Pergunta

Eu escrevi um script que usa xcodebuild Para gerar uma construção do ADHOC de um aplicativo para iPhone.

Eu gostaria de editar este script para produzir o nome do Perfil provisório usado para assinar a construção.
Isso me permitiria incluir o perfil de provisionamento no ZIP gerado automaticamente. Dessa forma, eu poderia enviar automaticamente o arquivo para os testadores do ADHOC e verifique se eles têm o perfil de provisionamento certo para instalar o aplicativo.

Existe alguma maneira de Extrair o nome ou arquivo do perfil de provisionamento usado para assinar o aplicativo:

  • A partir do aplicativo construído e assinado
  • No projeto Xcode (não quero analisar manualmente o arquivo Project.pbxProj, pois essa solução pode quebrar na próxima atualização do Xcode)
  • qualquer outra maneira que seja scriptable

imperdoável sugerido Para usar o comando security Para obter o nome do certificado usado para assinar o aplicativo. Depois de ter essas informações, existe alguma maneira de encontrar o nome do perfil de provisionamento?


Aqui está o que eu tentei:

Infelizmente, a saída do XCodeBuild durante a construção não contém essas informações. Durante a etapa do código, há a linha:

/usr/bin/codesign -f -s "iPhone Distribution: My name" ...

Mas não posso combinar isso com um certificado.

Eu olhei para usar o código e o comando

/usr/bin/codesign -d -vvv --entitlements - -r - /Users/lv/Desktop/TicTacBoo.app/TicTacBoo
Parecia promissor, mas isso não me fornece as informações de que preciso.
Também não encontrei nenhuma opção útil no XCodeBuild.

Foi útil?

Solução

O perfil de provisionamento já está dentro a aplicação. Você não precisa de outra cópia no seu arquivo zip (a menos que seus testadores não entendam como usar a cópia dentro do aplicativo.)

É nomeado YourApplication.app/embedded.mobileprovision

Isso não responde à sua pergunta porque o nome do arquivo original está perdido, no entanto, parece resolver seu maior problema.

Outras dicas

Você pode usar o comando "segurança" do terminal; Infelizmente, pelo menos no meu MBP com o Snow Leopard, parece causar uma falha de segmentação em um dos comandos que você precisa emitir. Para mais informações, emitir do terminal

man security

De qualquer forma, aqui está o que você pode tentar, assumindo que seus certificados de desenvolvimento/produção sejam armazenados no chaveiro de login:

security unlock-keychain login.keychain;
security find-certificate -a -c "iPhone Distribution: Your name"  -p > cert.pem;

O segundo comando causa a falha de segmentação (causada pelo argumento -c), mas deve ser exatamente o que você precisa. Alternativamente, você pode usar

security find-identity -p codesigning -v;

Para obter uma lista de todos os certificados válidos que você pode usar para codificar seus aplicativos. Para cada certificado, a saída também contém o SHA1 Message Digest, para que você possa pesquisar facilmente o certificado no chaveiro que corresponde ao SHA1 Digest associado à "distribuição do iPhone: seu nome". No entanto, isso exige que você escreva seu próprio aplicativo usando as APIs do chaveiro.

Deixe -me saber se isso funcionar no seu Mac ou se você tiver o mesmo problema de falha de segmentação.

Editar/atualizar: Verifiquei o bug em outras máquinas e arquivei um bug na Apple.

Que tal procurar no arquivo _codesignature/codeResources Plist (do aplicativo construído) para arquivos do tipo "MobileProvision"?

Aqui está uma maneira de fazer isso usando padrões (1) para ler o arquivo Plist. Você deve copiar o arquivo coderesources para algo com o sufixo ".plista" para manter os padrões felizes ...

cp /build/Distribution-iphoneos/MyApp.app/_CodeSignature/CodeResources /tmp/defaults.plist
defaults read /tmp/defaults files |grep .mobileprovision |grep -v embedded.mobileprovision

(No meu caso de teste, houve 2.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top