2017-02-09 2 views
0

Ich arbeite gerade an einem iOS-Tweak namens "LockWatch", der watchOS-ähnliche Uhrgesichter auf dem Sperrbildschirm anzeigen soll. Diese Optimierung beinhaltet ein einfaches Plugin-System, das ein Bündel (name.watchface) aus einem bestimmten Verzeichnis lädt, das bisher funktioniert.iOS: Codesignatur ungültig/erforderliche Codesignatur fehlt

Das Problem ist jedoch, dass diese Bundles nicht auf einem Gerät ausgeführt werden können, entweder aufgrund einer fehlenden oder einer ungültigen Codesignatur, aber innerhalb des iOS-Simulators werden die Bundles geladen und ordnungsgemäß ausgeführt.

Ich hatte dies funktioniert auf iOS 9 durch Hinzufügen der "com.apple.backboard.client" Berechtigung (weil die Protokolle sagten, dass diese bestimmte Berechtigung fehlte und daher SpringBoard stürzte).

Das Bundle-Projekt selbst ist ein einfaches Xcode-Projekt, das mit einem "Bundle" -Ziel aus dem Mac OS Tab erstellt wurde, das Base SDK ist auf "Latest iOS (10.2)" gesetzt.

Ich habe folgende Unterzeichnung Methoden versucht:

  • Unterzeichnung nicht an allen
  • Xcode-Managed Unterzeichnung
  • Xcode manuelle Signierung (für beide Debug und Release)
  • mit ldid Unterzeichnung ohne Berechtigungen
  • Unterschreiben mit Idd mit Berechtigungen

Die Protokolle zwischen diesen beiden Texten verändert:

SpringBoard(CoreFoundation)[PID] <Notice>: Error loading /var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype: dlopen(/var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype, 265): no suitable image found. Did Find: 
/var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype: required code signature missing for '/var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype' 

SpringBoard(CoreFoundation)[PID] <Notice>: Error loading /var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype: dlopen(/var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype, 265): no suitable image found. Did Find: 
/var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype: code signature invalid for '/var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype' 

Da die binäre nicht ausgeführt werden kann, dessen Hauptklasseninstanz kann nicht in einem Array und Spring abstürzt hinzugefügt werden.

Antwort

0

Es scheint, ich habe es endlich selbst gelöst.

Wie sich herausstellt, wurden die Watchface-Bundles überhaupt nicht signiert (daher die Nachricht required code signature missing).

Ich habe eine Run Script Phase zu den Bündeln Sie das folgende Skript enthält:

/usr/bin/codesign --force --sign - --timestamp=none $CODESIGNING_FOLDER_PATH/$PRODUCT_NAME

Ich habe die Idee, als ich die Erforschung einer anderen Frage über Code-Signing, wo jemand vorgeschlagen zu löschen, den Inhalt des _CodeSignature Mappe. Was anscheinend in meiner Build-Ausgabe nicht existierte.

Verwandte Themen