検出&サードパーティのライブラリ内のプライベートAPIを使用しないようにする方法
-
16-09-2019 - |
質問
これでAppleが自動的にプライベートAPIの使用を確認するために、静的解析のいくつかの種類を実行していることを、人々の数があるためThree20ライブラリをキャッチされています。私は(私はコードから自分自身をコンパイル)、別のサードパーティのライブラリを使用し、私はアップルに提出する前に自動的にプライベートAPIの使用のためにそれを監査したいと思いますので、私は排除することができます/それらの部品を再書き込みます。
私は自分のアプリケーションの実行可能ファイルにnm
を実行する場合は、、私はシンボルのリストを取得し、私はそこに、私は使用しないことでシンボルを見ています。たとえば、私は_AudioServicesPlaySystemSoundを見て、私はXcodeで「AudioServicesPlaySystemSound」を検索すると、私は結果を得ることはありません。自動的にプライベートAPIへの呼び出しを区別するためにそこにどのような方法があり、例えば私はAppleが最初のアンダースコアでそれらを命名する習慣を持っていることがわかります。
ただし:私は意図的に民間のAPIへの呼び出しが含まれている場合、それはnm
の出力に表示されませんが、私はバイナリでstrings
を実行する場合、それは現れません。これに基づき、私が持っていた1つのアイデアは、巨大なテーブルにすべてのプライベートAPI呼び出しの膨大なリストをコンパイルし、自動的に文字列を出力でそれらを検索することでした。私はまだそれを行っていない。
誰もが、私は一度だけレビュープロセスを通じてつもりですので、自動的にこのようなものをキャッチする方法上の任意のヒントを持っていますか?
解決
あなたは代わりにリンクされた実行可能ファイルのオブジェクトファイルでNMを実行してみてください可能性があります:
nm -g -j *.o | sort | uniq
オブジェクトがbuild/<app>.build/*/<app>.build/Objects-normal
サブディレクトリであるべきである。
AudioServicesPlaySystemSound
を呼び出すためます。 あなたはAudioServicesPlaySystemSound
への参照を見ています
Objective Cの呼び出しは、一般的にnm
ダンプには表示されません、あなたはそのためotool
を使用する必要があります:
otool -ov <object file>
他のヒント
、アプリケーションスキャナのデベロッパーツールを使用します。これは、民間のAPIメソッドのためのあなたに.appファイルをスキャンします。将来のリリースでは、プライベートAPIのインスタンス変数をチェックします。