2009-12-08 12 views
9

アップルは、プライベートAPIの使用を自動的にチェックするために何らかの静的解析を実行しているので、Three20ライブラリのために多数の人がキャッチされています。私は別のサードパーティのライブラリ(コードから自分自身をコンパイルする)を使用しています。私はアップルに提出する前にプライベートAPIの使用を自動的に監査したいので、その部分を削除/書き直すことができます。サードパーティのライブラリでのプライベートAPIの使用の検出と回避方法

実行可能ファイルにnmを実行すると、シンボルのリストが表示され、そこに使用していないシンボルが表示されています。例えば、私は_AudioServicesPlaySystemSoundを見て、XCodeで "AudioServicesPlaySystemSound"を検索しても結果は得られません。プライベートAPIへの呼び出しを自動的に区別する方法はありますか?たとえば、Appleに最初のアンダースコアで名前を付ける習慣があることに気づくなどです。

ただし、意図的にプライベートAPIの呼び出しを含めると、出力にはnmは表示されませんが、バイナリにstringsを実行すると表示されます。これに基づいて、私が持っていた1つのアイデアは、すべてのプライベートAPI呼び出しの巨大なリストを巨大なテーブルにコンパイルし、文字列出力でそれらを自動的に検索することでした。私はまだそれをしていない。

誰もが自動的にこの情報をキャッチするためのヒントを持っていますので、私は一度だけレビュープロセスを行っていますか?

+0

彼らはThree20に反対していますか?これは実際には、iPhone向けFacebookアプリを開発した開発者によって書かれたものです。あなたのアプリがThree20のために拒否された場合は、Facebookアプリもあまりにも... Heh。ちょうどスティン;-) –

+0

うん... http://groups.google.com/group/three20/browse_thread/thread/c442af6e39a918b0/6d5046771539d139 –

+0

次回は、Facebookがアップデートを提出したら拒否されるAppleのポリシーに準拠した最新のバージョンは使用していません。 – bpapa

答えて

4

代わりにリンクされた実行可能ファイルのオブジェクトファイルでNMを実行してみてください可能性:

nm -g -j *.o | sort | uniq 

オブジェクトがbuild/<app>.build/*/<app>.build/Objects-normalサブディレクトリにある必要があります。

AudioServicesPlaySystemSoundへの参照は、呼び出した機能の1つがAudioServicesPlaySystemSoundを呼び出すためです。

Objective Cの呼び出しは、一般的にnmダンプには表示されません、あなたはそのためotoolを使用する必要があります:

otool -ov <object file> 
3

は、デベロッパーツール、App Scannerを使用してください。 .appファイルのプライベートAPIメソッドをスキャンします。将来のリリースでは、プライベートAPIインスタンス変数もチェックされます。

+1

そのリンクが壊れています。試してみてください:https://github.com/ChimpStudios/App-Scanner – chown

+0

APPスキャナは本当に機能していますか? 正確さは – Kiarash

+0

プロジェクトは期限切れで、リリースはありません。 –

関連する問題