10

Apple が何らかの静的分析を実行してプライベート API の使用を自動的にチェックするようになった現在、Three20 ライブラリが原因で多くの人が逮捕されています。別のサードパーティ ライブラリ (コードから自分でコンパイルしたもの) を使用しており、Apple に送信する前にプライベート API の使用を自動的に監査して、それらの部分を削除/再書き込みできるようにしたいと考えています。

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

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

このようなものを自動的にキャッチする方法に関するヒントを誰かが持っているので、レビュープロセスを一度だけ実行しますか?

4

2 に答える 2

6

リンクされた実行可能ファイルの代わりに、オブジェクトファイルで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>
于 2009-12-08T00:48:22.943 に答える
3

この開発ツールApp Scannerを使用します。プライベート API メソッドの .app ファイルをスキャンします。今後のリリースでは、プライベート API インスタンス変数もチェックされます。

于 2010-10-10T18:29:26.607 に答える