2017-02-09 1 views
0

Je travaille actuellement sur un tweak iOS appelé "LockWatch" qui est censé afficher des cadrans watch-like sur l'écran de verrouillage. Ce tweak implique un système de plugin de base qui charge un bundle (name.watchface) à partir d'un répertoire spécifié, qui fonctionne jusqu'à présent. Le problème est cependant que ces bundles ne peuvent pas être exécutés sur un périphérique en raison d'une signature de code manquante ou non valide, mais dans le simulateur iOS, les bundles sont chargés et exécutés correctement. J'ai eu ce travail sur iOS 9 en ajoutant le droit "com.apple.backboard.client" (parce que les journaux disaient que ce droit particulier manquait et que SpringBoard se bloquait).iOS: signature de code invalide/signature de code requise manquante

Le projet bundle lui-même est un simple projet Xcode créé avec une cible "Bundle" à partir de l'onglet macOS, le SDK Base est défini sur "Latest iOS (10.2)".

J'ai essayé les méthodes de signature suivantes:

  • signature Pas du tout
  • Xcode gérés signature
  • Xcode signature manuelle (pour les deux Debug et Release)
  • signature avec ldid sans droits d'accès
  • Signature avec ldid avec droits

Les journaux ont changé entre ces deux textes:

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' 

Parce que le binaire ne peut être exécutée, son instance principale de classe ne peuvent être ajoutés à un tableau se bloque et SpringBoard.

Répondre

0

Il semble que je l'ai finalement résolu moi-même. Il se trouve que les faisceaux de la montre n'ont pas été signés du tout (d'où le message required code signature missing).

I a ajouté une phase Run Script aux faisceaux contenant le script suivant:

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

J'ai eu l'idée quand je faisais des recherches sur une autre question au sujet de la signature de code où quelqu'un a suggéré d'effacer le contenu du _CodeSignature dossier. Ce qui était apparemment inexistant dans ma sortie de construction.