web-dev-qa-db-fra.com

La signature du code de l'API Dropbox échoue dans Xcode 4.6.3: "l'objet de code n'est pas signé du tout"

J'ai une application OS X distribuée via le Mac App Store et récemment mise à jour vers Xcode 4.6.3.

Lorsque j'exécute ma version standard maintenant, je reçois:

Command /usr/bin/codesign failed with exit code 1:

/Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app: code object is not signed at all
In subcomponent: /Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app/Contents/Frameworks/DropboxOSX.framework
Command /usr/bin/codesign failed with exit code 1

Je n'arrive pas à discerner d'autres changements dans mon projet, donc je ne peux pas dire si c'est un problème lié à la mise à jour 4.6.3, ou autre chose.

J'ai essayé de redémarrer Xcode, d'exécuter une nouvelle génération et de nettoyer le dossier de génération.

75
Craig Otis

Je pense que j'ai peut-être compris celui-ci. J'ai exécuté Xcode 4.6.3 sur OS X Mavericks, sous l'impression que tous les outils spécifiques à la construction étaient intégrés dans l'application Xcode.

Mais il semble que codesign soit dans /usr/bin. Que ce soit mis là par l'un des installateurs Xcode ou livré avec une installation du système Vanilla, je ne suis pas sûr. Mais en parcourant la page man pour codesign, j'ai trouvé cette option astucieuse:

--deep  When signing a bundle, specifies that nested code content such as helpers, frameworks, and plug-ins, should be recursively signed
             in turn. Beware that all signing options you specify will apply, in turn, to such nested content.
             When verifying a bundle, specifies that any nested code content will be recursively verified as to its full content. By default,
             verification of nested content is limited to a shallow investigation that may not detect changes to the nested code.
             When displaying a signature, specifies that a list of directly nested code should be written to the display output. This lists only
             code directly nested within the subject; anything nested indirectly will require recursive application of the codesign command.

Et puis j'ai trouvé ce post ( https://alpha.app.net/isaiah/post/677496 ) d'il y a deux semaines (~ juin 2013), qui mentionne (quoique de seconde main):

@isaiah J'ai demandé à un gars dans les laboratoires à ce sujet. Il a déclaré que la signature de code nécessite maintenant que les cadres intégrés soient signés séparément avant de signer le code de l'ensemble d'applications.

Réexécutez manuellement la commande codesign que Xcode exécute normalement, tout en ajoutant --deep drapeau à la fin, signe correctement l'application.

Je ne sais pas encore exactement quelles sont les ramifications de cette signature manuelle, ni si je peux modifier la construction Xcode pour ajouter le --deep flag automatiquement, mais cela semble être le problème sous-jacent. (codesign ne signe plus automatiquement et en profondeur votre ensemble d'applications.)

140
Craig Otis

Comme souligné dans d'autres réponses, il y a un changement dans le fonctionnement de la signature de code. Si vous avez installé l'un des Xcode 5 DP, les nouveaux outils seront utilisés même si vous utilisez Xcode 4.6.X.

Tout ce que vous devez faire à ce stade (dans Xcode 4.6.X) est de prendre l'indicateur --deep suggéré ci-dessus et de l'ajouter à vos indicateurs de signature de code (cible, paramètres de construction) voir l'image ci-dessous.

Specifying Deep Signing of Embedded Frameworks

67
rougeExciter

Pour moi, ce problème a été provoqué après avoir fait glisser un dossier nommé "ressources" dans mon projet. Après avoir changé son nom en autre chose (comme "resourcessss" par exemple), l'erreur a disparu.

12
andrei

J'ai eu le même problème, mais la réponse était simple: l'identité de signature de code sur mon application a été définie sur "-", donc le définir simplement sur "Ne pas coder le signe" m'a corrigé.

"-" semble être le paramètre par défaut lorsque vous effectuez un ensemble d'actions, bien que je ne puisse pas vous dire de quoi il s'agit.

4
Maury Markowitz

Cela pourrait aider quelqu'un:

J'ai finalement trouvé la solution par essais et erreurs. Dans mon cas, j'avais un nom de dossier qui correspondait à la variable "Product Name" sous les paramètres de construction. Cela correspondait également au nom complet du projet! J'ai donc simplement changé un domaine. J'ai changé les "Paramètres de construction" -> "Nom du produit". La valeur de MySpecialApp a été remplacée par My-SpecialApp. C'était tout simplement ça! Je me suis ensuite reconnecté au portail des développeurs Apple et j'ai créé un nouvel ID d'application et des profils de provisionnement mobile pour le développement et la distribution et le reste est de l'histoire ancienne. Mes versions fonctionnent désormais lorsqu'elles sont déployées via la distribution Ad Hoc. Une dernière remarque à ce sujet. Il s'agit certainement d'un bogue qui Apple devrait soit alerter l'utilisateur qu'il a fait quelque chose de mal et activer une sorte d'action corrective automatisée. - Voir plus sur: http://www.chrisdanielson.com/2012/08/29/codesign-ipa-and-the-code-object-is-not-signed-at-all-problem/#sthash.F0nF3BbC.dpuf

2
Thomas Ayoub

Pour moi, c'était un Framework PaddleMAs corrompu qui: 1. J'ai supprimé de mon fichier Cocoapods 2. Ran pod install 3. Redémarré mon Xcode

et cela a résolu le problème. Pour une raison quelconque, un framework corrompu l'empêchera d'être signé, malheureusement XCode n'affiche pas cette erreur très clairement et vous donne une bonne suggestion de correction. Ont soulevé un bogue avec Apple à corriger.

0
UKDataGeek