Erro do Xcode 6.1 ao criar IPA

140

Atualizei para o Xcode 6.1 hoje e adivinhe: Agora estou tendo problemas para enviar versões usando o aplicativo de desktop TestFlight. Aqui está o erro que estou recebendo enquanto o aplicativo começa a criar o IPA:

O erro

erro: / usr / bin / codesign --force --preserve-metadata = identificador, direitos, regras de recursos --sign 854059d45eed724593debef577a562e1ba96ab55 --resource-rules = / tmp / QYFSJIvu7W / Payload / XX.app / ResourceRules.plist / tmp /QYFSJIvu7W/Payload/XX.app falhou com o erro 1. Saída: Aviso: o uso de --preserve-metadata com a opção "resource-rules" (descontinuado no Mac OS X> = 10.10)! Aviso: --resource-rules foi descontinuado no Mac OS X> = 10.10! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist: não pode ler recursos

O 'Artigo de Suporte' não faz ideia do que está acontecendo.

Não parece ser um problema do TestFlight porque o mesmo acontece em um ambiente de IC como o Jenkins, usando o xcrun ou ferramentas semelhantes.

O aplicativo não foi atualizado por meses, então eu sei que não esperava atualizações para corrigir isso tão cedo. Costumava funcionar muito bem para mim e para meus clientes, por isso também não estou interessado em abandoná-lo por outra coisa.

Qualquer idéia sobre o que é esse erro e como corrigi-lo seria muito apreciada.

Şafak Gezer
fonte
4
Ele não parece ser um problema TestFlight porque a mesma coisa acontece em um ambiente de CI usando o comando xcrun assim: xcrun -sdk iphoneos PackageApplication -v <Path_to_App> -o <Path_to_IPA> --sign <Distribution_certificate> --embed <Provisioning_profile>. Com o Xcode 6.0.1, tudo funcionou bem.
Daniel Martín

Respostas:

312

Gostaria de saber por que ele funciona, mas aqui está uma correção que funcionou para mim:

Encontrou a correção!

Clique no seu projeto> Destinos> Selecione seu destino> Configurações de Construção>

Code Signing Resource Rules Path

e adicione :

$(SDKROOT)/ResourceRules.plist

Tim
fonte
7
Obrigado! Sinceramente, não me importo com o porquê de funcionar :) apenas o que há de mais recente no que a Apple quebrou em sua grande sequência de estragos nos últimos dois meses. De qualquer forma, obrigado por apontar a solução. (e um voto negativo para mim por não procurar o erro completamente antes de postar) #
akafak Gezer
10
CODE_SIGN_RESOURCE_RULES_PATH é o nome da variável se você estiver editando as configurações do xcodeproj por meio de um script ou linha de comando. developer.apple.com/library/ios/recipes/…
roblocop
5
Não consigo ver Code Signing Resource Rules Pathnas minhas Configurações de compilação. Qualquer ideia?
Georg
7
Certifique-se de ter selecionado as configurações ALL e não BASIC (a linha abaixo "Geral, recursos, informações, configurações de compilação etc.")
AS
Aparentemente, isso fará com que seu aplicativo seja rejeitado: stackoverflow.com/questions/26488077/…
Glenn Maynard
61

O patch a seguir para PackageApplications o corrigiu para mim, removi as regras de recursos, pois diz que está obsoleto na 10.10.

O Testflight cria trabalho sem ele. A Appstore também cria.

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
 % diff PackageApplication PackageApplicationFixed 
155,157c155,156
<     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
<                          "--sign", $opt{sign},
<                          "--resource-rules=$destApp/ResourceRules.plist");
---
>     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements",
>                          "--sign", $opt{sign});
Alistra
fonte
Removido o parâmetro obsoleto desonestos de PackageApplication e buildozer agora constrói meu aplicativo Python para iOS
Ian Ellis
Great fix! Muito obrigado :) O acima "de assinatura de código Regras de Recursos Path" configuração não corrigir o meu problema, mas esta resposta fez, além da correção agora é global em todos os projetos :)
Pellet
@IanEllis: Por favor, deixe-me saber como você removeu o parâmetro "resource-rules" do PackageApplication. Será de grande ajuda !!
Rashmi Ranjan mallick
8
Aqui está um oneliner para corrigir PackageApplication: perl -p -i'Orig '-e' BEGIN {undef $ /;} s /, resource-rules (. * Sign}). * ResourceRules.plist "/ $ 1 / smg '" / Aplicativos / Xcode6.1.1.app / Conteúdo / Desenvolvedor / Plataformas / iPhoneOS.platform / Desenvolvedor / usr / bin / PackageApplication "(ajuste seu caminho) E um script completo para aplicar isso: bitbucket.org/WeWantToKnow/xcode_scripts/raw/… usar: xcode_fix_PackageApplicationResourceRules.sh /Applications/Xcode6.1.1.app
coffeebreaks
Essa é a resposta correta. A resposta da configuração de construção força o uso de uma API reprovada.
Jameson
10

Enviei um email para o suporte do TestFlight e obtive esta resposta:

Atualmente, nossa equipe está investigando esse problema com o aplicativo TestFlight Desktop. Enquanto isso, use o Xcode para criar o arquivo IPA e faça o upload usando o aplicativo de desktop ou o site TestFlight.

A solução sugerida funcionou.

Adão
fonte
1
Funcionou para mim apenas fazer o arquivo .ipa com o Xcode e fazer o upload por meio do aplicativo de desktop.
livingtech 22/10/14
@livingtech Sim, no entanto, também recebi o temido "Xcode gerando um novo perfil em vez de escolher o que eu quero" -bug :) Carregar com o testflight funcionou diretamente esplêndido.
helmesjo
10

A resposta de Tim Gostony não funciona mais desde o lançamento do Xcode 7. Agora, o processo de envio da App Store falha quando as regras de recursos estão presentes. A solução é limpar o caminho das regras de recurso de assinatura de código e substituir xcrun pela ferramenta xcodebuild:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]

O Options.plist mais simples para exportar arquivos ipa de distribuição ad-hoc é assim:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>iCloudContainerEnvironment</key>
    <string>Production</string>
    <key>teamID</key>
    <string>[YOUR TEAM ID]</string>
    <key>method</key>
    <string>ad-hoc</string>
</dict>
</plist>

Existem outras opções disponíveis para este arquivo plist em relação a código de bits, afinamento de aplicativos etc. É por isso que acho que a ferramenta xcodebuild é a ferramenta certa para exportar arquivos ipa para iOS 9 e superior.

Mais detalhes sobre as opções plist estão disponíveis com o comando xcodebuild -help.

Vladimir Grigorov
fonte
obrigado Vladimir, eu estava realmente ficando confuso com a forma como ele entra em conflito com os envios do Xcode 7.
precisa saber é
como exatamente você substitui o xcrun? Não consigo ver nenhuma configuração para isso no plugin Jenkins Xcode :(
Hlung
2

No Yosemite com XCode 6.4, mesmo usando o patch SDKROOT, a assinatura do código falha. O artigo a seguir explica como corrigir o script XCode para contornar isso. Observe que isso está corrigindo o XCode, portanto é específico da versão, mas corrige o problema.

http://www.jayway.com/2015/05/21/fixing-your-ios-build-scripts

GrumpyGary
fonte
1

A resposta da Alistra funciona para mim, mas não quero alterar um script que não seja meu (uma versão futura do Xcode pode alterar esse arquivo e a correção será perdida).

 diff PackageApplication PackageApplicationFixed 155,157c155,156
<-     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
<-                          "--sign", $opt{sign},
<-                          "--resource-rules=$destApp/ResourceRules.plist");
---
->     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements",
->                          "--sign", $opt{sign});

Acho que a resposta de Vladimir Grigorov é a melhor se você tiver um arquivo usando:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]

No meu caso, não tenho o arquivo morto, porque modifico o aplicativo após compilá-lo e preciso alterar o ID do pacote e o certificado de assinatura.

A solução que encontrei é codesignme chamar antes de usar PackageApplicatione pedir PackageApplicationpara não assinar. Como isso :

replace :

 /usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>" --sign "<provisioning_profile.certificateSubject>" --embed "<provisioning_profile.path>"

by :

/bin/cp -rpfv "<provisioning_profile.path>" "<app_path>/embedded.mobileprovision"
/usr/bin/codesign -v -vvvv -f -s "<provisioning_profile.certificateSubject>" --entitlements="<entitlement_path>" "<app_path>"
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>"

Não se esqueça de incorporar o .mobileprovisionarquivo usando para assinar cp.

gbitaudeau
fonte
0

Conforme especificado em outra resposta , você também não pode especificar o certificado de distribuição com o qual assinar, e ele será empacotado corretamente. O TestFlight precisaria atualizar o aplicativo para fazer isso.

pr1001
fonte