TL; DR Es ist Sache des Entwicklers, auszuwählen, welche Teile der App signiert sind und ob Änderungen an diesen Teilen zu Aktionen führen, wenn die App gestartet wird. Sie müssen Trial-and-Error verwenden, um dies App für App herauszufinden.
Es ist weitgehend Sache des Entwicklers, zu entscheiden, welche Komponenten in seinem Anwendungspaket in dem Siegel enthalten sind, das unterzeichnet wird, bevor sie ihre Anwendung ausliefern. Alles in dem Siegel ist fälschungssicher, da es meist unmöglich ist, diese Dinge zu ändern, ohne ihre Hash-Signaturen zu ändern. Das heißt aber nicht, dass man sie nicht manipulieren kann.
Im Apple Developer Guide steht, was Sie unterschreiben sollten:
Sie sollten jede ausführbare Datei in Ihrem Produkt signieren, einschließlich Anwendungen, Tools, versteckter Hilfsprogramme, Dienstprogramme usw. Das Signieren eines Anwendungsbündels deckt seine Ressourcen ab, nicht jedoch seine Unterkomponenten wie Tools und Unterbündel. Jedes dieser Dokumente muss unabhängig unterschrieben werden.
Wenn Ihre Anwendung aus einem großen UI-Teil mit einem oder mehreren kleinen Hilfsprogrammen besteht, die versuchen, dem Benutzer ein einziges Gesicht zu präsentieren, können Sie sie für die Codesignatur nicht unterscheidbar machen, indem Sie ihnen alle exakt die gleiche Codesignaturkennung geben. (Sie können dies tun, indem Sie sicherstellen, dass alle den gleichen CFBundleIdentifier-Wert in ihrer Info.plist haben, oder indem Sie die Option -i im Befehl codesign verwenden, um denselben Bezeichner zuzuweisen.) In diesem Fall verfügen alle Ihre Programmkomponenten über Zugriff auf dieselben Schlüsselbundelemente und Validierung mit demselben Programm. Tun Sie dies nur, wenn die beteiligten Programme wirklich eine Einheit bilden sollen, ohne dass Unterschiede gemacht werden.
Eine universelle Binärdatei (Bundle oder Tool) weist automatisch individuelle Signaturen auf, die auf jede Architekturkomponente angewendet werden. Diese sind unabhängig und in der Regel wird nur die native Architektur auf dem Endbenutzersystem überprüft.
Bei Installationspaketen (.pkg- und .mpkg-Bundles) ist alles implizit signiert: Das CPIO-Archiv mit den Nutzdaten, das CPIO-Archiv mit den Installationsskripten und die Stückliste enthalten jeweils einen in der XAR-Datei aufgezeichneten Hash Header, und dieser Header wiederum ist signiert. Wenn Sie beispielsweise ein Installationsskript ändern, nachdem das Paket signiert wurde, ist die Signatur ungültig.
Möglicherweise möchten Sie auch Ihre Plug-Ins und Bibliotheken signieren. Obwohl dies derzeit nicht erforderlich ist, wird dies in Zukunft der Fall sein, und es ist nicht nachteilig, Signaturen für diese Komponenten zu haben.
Je nach Situation kann Codesign zu Ihrer ausführbaren Mach-O-Datei hinzugefügt, ihr erweiterte Attribute hinzugefügt oder neue Dateien im Inhaltsverzeichnis Ihres Bundles erstellt werden. Keine Ihrer anderen Dateien wird geändert.
Auch von hier aus ist es nicht unbedingt wahr, dass eine ungültige Signatur für eine Anwendung dazu führt, dass sie nicht gestartet werden kann. Die Seite sagt:
Es ist Sache des Systems oder Programms, das signierten Code startet oder lädt, zu entscheiden, ob die Signatur überprüft werden soll, und zu bestimmen, wie die Ergebnisse dieser Überprüfung ausgewertet werden sollen.
Eine Anwendung kann Änderungen zulassen.
Ihre beste Wahl ist ein Versuch-und-Irrtum-Ansatz mit jeder Anwendung, die Sie ändern möchten. Es kann funktionieren, es kann nicht. Es gibt keine immer wahre Antwort, die gegeben werden kann.
Wenn eine App signiert wurde, können Sie nach einer Contents/CodeResources
Datei oder einer Contents/_CodeSignature/CodeResources
Datei im Bundle suchen . Diese Datei listet alle signierten Komponenten und ihre erwarteten Hashwerte im Bundle auf. Es ist ein guter Ort, um zu verstehen, welche Teile der Anwendung ein Entwickler als kritisch genug erachtet, um auf Änderungen zu achten.