Codesign da API do Dropbox falha no Xcode 4.6.3: “object de código não está assinado”

Eu tenho um aplicativo do OS X que é distribuído através da Mac App Store e recentemente atualizado para o Xcode 4.6.3.

Quando eu executo minha compilation regular agora, recebo:

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 

Eu não consigo discernir quaisquer outras alterações no meu projeto, então não posso dizer se é um problema relacionado à atualização 4.6.3, ou qualquer outra coisa.

Eu tentei reiniciar o Xcode, executando uma compilation limpa e limpando a pasta de compilation.

Acho que posso ter percebido isso. Eu tenho executado o Xcode 4.6.3 no OS X Mavericks, sob a impressão de que quaisquer ferramentas específicas da compilation foram empacotadas no aplicativo Xcode.

Mas parece que o codesign está em /usr/bin . Seja colocado lá por um dos instaladores do Xcode ou com uma instalação de sistema baunilha, não tenho certeza. Mas lendo a man page do codesign , encontrei esta opção interessante:

 --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. 

E então eu encontrei este post ( https://alpha.app.net/isaiah/post/6774960 ) de duas semanas atrás (~ junho de 2013), que menciona (embora de segunda mão):

@isaiah Perguntei a um cara nos laboratórios sobre isso. Ele disse que o codesign agora exige que as estruturas incorporadas sejam assinadas separadamente antes de assinar o conjunto de aplicativos como um todo.

Executar novamente manualmente o comando codesign que o Xcode normalmente executa, enquanto adiciona o sinalizador --deep ao final, assina o aplicativo corretamente.

Ainda não tenho certeza exatamente quais ramificações essa assinatura manual tem, ou se posso ajustar a compilation do Xcode para adicionar a sinalização --deep automaticamente, mas esse parece ser o problema subjacente. (o codesign não assina mais o seu pacote de aplicativos automaticamente.)

Conforme destacado em outras respostas, há uma alteração na maneira como a assinatura do código funciona. Se você instalou algum dos Xcode 5 DP, as novas ferramentas serão usadas mesmo se você estiver usando o Xcode 4.6.X.

Tudo o que você precisa fazer neste estágio (no Xcode 4.6.X) é pegar o sinalizador –deep sugerido acima e adicioná-lo aos seus sinalizadores de assinatura de código (Target, Build Settings) veja a imagem abaixo.

Especificando assinatura profunda de estruturas incorporadas

Para mim, esse problema foi causado depois de arrastar uma pasta chamada “resources” no meu projeto. Depois de mudar seu nome para qualquer outra coisa (como “resourcessss”, por exemplo), o erro desapareceu.

Eu tive o mesmo problema, mas a resposta foi simples: a identidade de assinatura de código no meu aplicativo estava definida como “-“, portanto, simplesmente defini-la como “Não assinar código”.

“-” parece ser a configuração padrão quando você executa algum conjunto de ações, embora eu não possa lhe dizer quais são.

Isso pode ajudar alguém:

Eu finalmente descobri a solução por tentativa e erro. No meu caso, eu tinha um nome de pasta que correspondia à variável “Nome do produto” nas configurações de criação. Isso também combinou com o nome do projeto inteiro! Então eu simplesmente mudei um campo. Eu mudei o “Build Settings” -> “Nome do produto”. O valor de MySpecialApp foi alterado para My-SpecialApp. Isso foi simplesmente isso! Em seguida, entrei novamente no portal do desenvolvedor da Apple e criei um novo ID do aplicativo e perfis de provisionamento móvel para desenvolvimento e distribuição, e o restante é o histórico. Meus lançamentos agora funcionam quando implantados por meio da distribuição Ad Hoc. Uma nota final sobre isso. Este é definitivamente um bug que a Apple deve alertar o usuário de que eles fizeram algo errado e habilitar algum tipo de ação corretiva automatizada. – Veja mais em: http://www.chrisdanielson.com/2012/08/29/codesign-ipa-and-the-code-object-is-not-signed-at-all-problem/#sthash.F0nF3BbC. dpuf

Para mim, foi um Framework PaddleMAs corrompido que: 1. Eu removi do meu arquivo Cocoapods 2. Executei a pod install 3. Reiniciei meu Xcode

e resolveu o problema. Por algum motivo, um framework corrompido impedirá que ele seja assinado. Infelizmente, o XCode não mostra esse erro com muita clareza e fornece uma boa sugestão de correção. Ter levantado um bug com a Apple para consertar.

    Intereting Posts