TL; DRアプリのどの部分に署名するか、それらの部分を改ざんするとアプリの起動時に何らかのアクションが発生するかどうかを選択するのは開発者の責任です。アプリごとに試行錯誤を繰り返す必要があります。
アプリケーションバンドルのどのコンポーネントを、アプリケーションを配信する前に署名するシールに表示するかを決定するのは、主に開発者次第です。シール内のすべてのものは、それらのハッシュ署名を変更せずにこれらを変更することはほとんど不可能であるため、実質的に改ざん防止されています。しかし、実際には、それらを改ざんできないというわけではありません。
Apple開発者ガイドには、署名する必要があるものについての説明があります。
アプリケーション、ツール、非表示のヘルパーツール、ユーティリティなど、製品のすべての実行可能ファイルに署名する必要があります。アプリケーションバンドルに署名すると、そのリソースがカバーされますが、ツールやサブバンドルなどのサブコンポーネントはカバーされません。これらはそれぞれ独立して署名する必要があります。
アプリケーションが、ユーザーに単一の顔を見せようとする1つまたは複数の小さなヘルパーツールを備えた大きなUIパーツで構成されている場合、まったく同じコード署名識別子を与えることで、それらをコード署名と区別できなくすることができます。(Info.plistでCFBundleIdentifierの値がすべて同じであることを確認するか、codesignコマンドで-iオプションを使用して同じ識別子を割り当てることで確認できます。)その場合、すべてのプログラムコンポーネントは同じキーチェーン項目にアクセスし、同じプログラムとして検証します。これを行うのは、関係するプログラムが本当に区別なく単一のエンティティを形成することを意図している場合のみです。
ユニバーサルバイナリ(バンドルまたはツール)には、各アーキテクチャコンポーネントに個別の署名が自動的に適用されます。これらは独立しており、通常、エンドユーザーのシステム上のネイティブアーキテクチャのみが検証されます。
インストーラーパッケージ(.pkgおよび.mpkgバンドル)の場合、すべてが暗黙的に署名されます。ペイロードを含むCPIOアーカイブ、インストールスクリプトを含むCPIOアーカイブ、および部品表(BOM)にはそれぞれXARに記録されたハッシュがありますヘッダー、そのヘッダーは順番に署名されます。したがって、パッケージに署名した後にインストールスクリプトを変更すると(たとえば)、署名は無効になります。
プラグインとライブラリに署名することもできます。これは現在必須ではありませんが、将来的にはそうであり、これらのコンポーネントに署名を付けることに不利な点はありません。
状況に応じて、codesignはMach-O実行可能ファイルに追加、拡張属性を追加、またはバンドルのコンテンツディレクトリに新しいファイルを作成します。他のファイルは変更されません。
また、ここから、アプリケーションに無効な署名があると、起動に失敗することになるとは限りません。ページは言う:
署名を検証するかどうかを決定し、検証する場合はその検証結果を評価する方法を決定するのは、署名されたコードを起動またはロードするシステムまたはプログラム次第です。
アプリケーションは、変更を許可することを選択できます。
最善の策は、修正しようとしているアプリケーションで試行錯誤することです。機能する場合もあれば、機能しない場合もあります。常に真実の答えを与えることはできません。
アプリが署名されている場合、Contents/CodeResources
ファイルまたはContents/_CodeSignature/CodeResources
バンドル内のファイルを 検索できます。このファイルには、すべての署名済みコンポーネントと、バンドル内の予想されるハッシュ値がリストされています。開発者が変更を監視するのに十分重要であると考えるアプリケーションの部分を理解し始めるのに適した場所です。