-1

プログラムに追加機能が必要で、iPhone プログラムに文書化されていない API を使用したいと考えています。私がダウンロードしたもの: DumpFrameworks.pl としての DumpFrameworks および class-dump から: http://ericasadun.com/HeaderDumpKit/

DumpFrameworks.pl を Downloads に置き、class-dump ファイルを /usr/local/bin に置きました

私が実行するターミナルで:

$perl DumpFrameworks.pl

いくつかの警告とエラーが表示されました:

Framework: Accelerate
2009-09-30 08:39:58.776 class-dump[466:903] Warning: This file does not contain any Objective-C runtime information.
Framework: ApplicationServices
2009-09-30 08:40:00.443 class-dump[473:903] Couldn't read file: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/ApplicationServices.framework/ApplicationServices
2009-09-30 08:40:00.449 class-dump[473:903] Couldn't read file: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/ApplicationServices.framework/ApplicationServices
class-dump: Input file (/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/ApplicationServices.framework/ApplicationServices) is neither a Mach-O file nor a fat archive. 
... etc (above warnings are very common when I run the perl script)

***しかし、最も重要なことは、スクリプトは最終的に失敗するようです。

もらった***

(after several warnings like above)
Framework: WebKit
    2009-09-30 08:40:24.228 class-dump[662:903] caught exception: expected (many things), got 260
    2009-09-30 08:40:24.232 class-dump[662:903] type: ^{WebDocumentLoaderMac=^^?iB^{Frame}{RefPtr<WebCore::MainResourceLoader>="m_ptr"^{MainResourceLoader}}{HashSet<WTF::RefPtr<WebCore::ResourceLoader>,WTF::PtrHash<WTF::RefPtr<WebCore::ResourceLoader> >,WTF::HashTraits<WTF::RefPtr<WebCore::ResourceLoader> > >="m_impl"{HashTable<WTF::RefPtr<WebCore::ResourceLoader>,WTF::RefPtr<WebCore::ResourceLoader>,WTF::IdentityExtractor<WTF::RefPtr<WebCore::ResourceLoader> >,WTF::PtrHash<WTF ... etc (I got many many lines of this kind of code in WebCore framework)

ここで何が間違っているのだろうか?追加の設定が必要ですか?

私は Mac OS 10.6.1 を使用しており、最初に 3.0 フレームワークをダンプしたいと考えていますが、私の本当の目的は 3.1 フレームワークです

どんな助けでも大歓迎です。

4

3 に答える 3

1

文書化されていない API についての私の理解から、それらは存在します。したがって、どのアプリでも呼び出すことができます。

クラス ダンプに関する私の理解では、文書化されていない API を発見するために必要です。

サドゥンの本では、これを使用するための文書化されていない API 呼び出しがあり、これをヘッダーに含めます。それなら使えます。

私の推奨事項は、それらを使用しないことです。

于 2009-09-30T00:20:52.450 に答える
1

Erica のサイトに含まれている class-dump のバージョンは古いようです。動作するバージョン (とにかく iPhone OS 3.2 以降) は次の場所にあります: http://www.codethecode.com/projects/class-dump/

注: いくつかのフレームワークを実行した後でも、スクリプトは失敗します。スクリプトを修正するのではなく、対象のフレームワークで手動で class-dump を実行するだけです。

すなわち:

cd /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.2.sdk/System/Library/Frameworks/UIKit.framework
class-dump UIKit -H -o ~/temp/Headers/UIKit
于 2010-08-25T04:02:19.593 に答える
0

私は DumpFrameworks を合計 1 回使用したと思うので、DumpFrameworks についても、なぜ失敗するのかについてもあまり詳しくありません。ただし、IIRC では、ヘッダーにある情報を簡単にダンプできます。

ヘッダー ファイルの場所については、スクリプトをカット アンド ペーストするだけではありません。スクリプトの動作を見てください。パブリック フレームワークとプライベート フレームワークをプルしている場所から明確にコメントされています。これらのディレクトリに移動し、ドリルインを開始すると、ヘッダー ファイルが見つかります。

フレームワークをプロジェクトに含め、関数を呼び出したい場所にインポートし、ヘッダーにリストされているとおりに関数を呼び出します。

ご存じないかもしれませんが、ドキュメント化されていない API を呼び出すことは、アプリを Apple に拒否させる良い方法です。

于 2009-09-30T05:41:08.220 に答える