web-dev-qa-db-fra.com

Comment corriger "l'objet de code n'est pas signé du tout? Dans le sous-composant:" dans Xcode 6, Mac OS X Yosemite ou Mavericks?

Lors de la compilation de mon application, l'erreur suivante apparaît:

CodeSign /Users/pupeno/Library/Developer/Xcode/DerivedData/ProjectX-cynmgyozflnwbpamwnpsnhgshuyq/Build/Products/Debug/Project\ X.app
    cd /Users/pupeno/Projects/ProjectX
    export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate

Signing Identity:     "Mac Developer: José Fernández (G4PM7K38JH)"

    /usr/bin/codesign --force --sign A21FB31766DDCBB28FBB4E4DD86E3743024A45F3 --entitlements /Users/pupeno/Library/Developer/Xcode/DerivedData/ProjectX-cynmgyozflnwbpamwnpsnhgshuyq/Build/Intermediates/ProjectX.build/Debug/App.build/Project\ X.app.xcent --requirements =designated\ =>\ anchor\ Apple\ generic\ \ and\ identifier\ \"$self.identifier\"\ and\ ((cert\ leaf[field.1.2.840.113635.100.6.1.9]\ exists)\ or\ (\ certificate\ 1[field.1.2.840.113635.100.6.2.6]\ exists\ and\ certificate\ leaf[field.1.2.840.113635.100.6.1.13]\ exists\ \ and\ certificate\ leaf[subject.OU]\ =\ \"XHT4M2DATL\"\ )) /Users/pupeno/Library/Developer/Xcode/DerivedData/ProjectX-cynmgyozflnwbpamwnpsnhgshuyq/Build/Products/Debug/Project\ X.app

/Users/pupeno/Library/Developer/Xcode/DerivedData/ProjectX-cynmgyozflnwbpamwnpsnhgshuyq/Build/Products/Debug/Project X.app: code object is not signed at all
In subcomponent: /Users/pupeno/Library/Developer/Xcode/DerivedData/ProjectX-cynmgyozflnwbpamwnpsnhgshuyq/Build/Products/Debug/Project X.app/Contents/Frameworks/Paddle.framework
Command /usr/bin/codesign failed with exit code 1

J'utilise deux frameworks, Paddle et Sparkle et ils sont configurés pour signer une copie:

enter image description here

À la recherche d'une solution à ce problème, j'ai trouvé de nombreuses recommandations pour faire un signe --deep, qui est officiellement déconseillé par Apple ( Utiliser l'outil --deep Option Correctement de l'outil de conception de code ).

J'ai aussi trouvé l'article Code Signing and Mavericks qui explique également que l'utilisation de --deep est erroné et offre une alternative: utiliser un script pour générer des signatures pour chaque framework. Je pense que c'est quelque chose qui était nécessaire avant que Xcode ait l'option de signer une copie, mais je l'ai quand même essayé. Cela n'a fait aucune différence, j'ai toujours la même erreur. En examinant les journaux, les lots sont signés avec l'option "Signature sur copie". L'ajout de ce script leur a donc permis d'être signé deux fois.

Mon identité de signature de code est configurée comme suit pour l'ensemble du projet et chaque cible en hérite:

enter image description here

Je comprends que ce ne soit pas la signature appropriée pour Release, mais pour l’instant, nous essayons simplement de le construire et de l’exécuter localement.

Des idées ce qui ne va pas? Des idées comment résoudre ce problème? Je comprends que

13
pupeno

Le problème était que le Framework, Paddle.framework, était corrompu. Les liens symboliques ont été résolus vers les fichiers vers lesquels ils ont été dirigés. La compilation a donc bien fonctionné, mais la signature n'a pas fonctionné.

Re-télécharger le framework et le copier dans le projet a résolu le problème.

9
pupeno

Pour moi, la solution a été de rajouter un dossier de ressources (cochez Créer des groupes au lieu de créer des références de dossiers).

8
Bisca

J'admets que la codification est encore un art noir pour moi, mais dans Xcode 6, j'ai constaté que la suppression de tous de mes scripts de signature (nécessaires dans Xcode 5, ainsi que des drapeaux --deep) et des drapeaux de signature supplémentaires, et juste utiliser l'option "codesign on copy" dans la phase de copie des fichiers de la structure de la compilation fonctionnait parfaitement pour moi.

1
Brett Terpstra

Pour moi, il s’est avéré que j’avais ajouté par inadvertance un script de construction bash à la cible. S'assurer que je n'avais pas de scripts furtifs copiés accidentellement dans la cible a corrigé le problème. 

1
johnboiles