Xcode 6 - Como escolher o certificado de assinatura / perfil de provisionamento para distribuição Ad-Hoc?


143

Para distribuir o aplicativo aos nossos testadores, usamos o Xcode, o que fazemos usando o seguinte processo:

  • Aplicativo de arquivamento
  • Distribuir para Ad-Hoc
  • Escolha o perfil de provisionamento
  • Salve o .ipa em uma pasta

Mas com o Xcode 6 , esse fluxo de trabalho foi um pouco alterado. Ainda posso selecionar a opção de distribuição Ad-Hoc, mas não posso selecionar o perfil de provisionamento que desejo. Isso não nos dá controle sobre qual certificado de assinatura é usado e a configuração do perfil de provisionamento (usamos notificações push).

Por padrão, a iPhone distributionidentidade de assinatura é usada e algum tipo de XC Ad Hocperfil de provisionamento é gerado, o que pode ser visto na imagem abaixo: Exportando IPA Se você clicar na seta perto do perfil de provisionamento, ela abrirá a pasta com perfis de provisionamento.

Então, minha pergunta é:

Existe alguma maneira no Xcode 6 de selecionar o perfil de provisionamento usado na distribuição Ad Hoc?

Obrigado!


Alguém sabe se isso foi corrigido? Existe alguma maneira de distribuir uma compilação para os usuários do iOS 7 para testar as notificações por push?
haupman

usando a versão GM do Xcode 6, mesmo problema ...
Chris Chen

Então ainda não temos uma boa solução para isso? as respostas abaixo não funcionam para mim. Podemos usar o perfil de provisionamento XC? Não quero perder uma semana esperando a revisão da apple. Obrigado
Miles M.

2
Eu tive esse problema hoje e parece que o Xcode usa apenas perfis de distribuição que usam todos os dispositivos que você registrou online.
precisa saber é o seguinte

1
Seriamente? Não podemos escolher o arquivo de provisionamento? Eu acredito que Yossarian vive.
precisa saber é

Respostas:


52

Eu estava enfrentando o mesmo problema, resolvido usando o script da ferramenta "xcodebuild" da linha de comando, pré-instalado com o Xcode 6 (não era necessário reinstalar o Xcode 5).

http://www.thecave.com/2014/09/16/using-xcodebuild-to-export-a-ipa-from-an-archive/

Script no terminal:

xcodebuild -exportArchive -archivePath $projectname.xcarchive -exportPath $projectname -exportFormat ipa -exportProvisioningProfile 'Provisioning Profile Name'

1
isso funciona para mim! as outras respostas usando xcodebuildnão tiveram o -exportProvisioningProfileinterruptor.
bunnyhero

6
Observe que isso não funcionará corretamente se seu aplicativo usar extensões, estruturas incorporadas ou bibliotecas.
clarkcox3

4
Isso me ajudou. obrigado! Portanto, a Apple atualiza o XCode para gerar perfis ruins de XC Prov, mas esquece o XCodeBuild. Desta vez, tivemos sorte. Oh! Como a Apple nos faz sofrer!
kamyFC

1
Estou definindo isso como a resposta aceita. A resposta pode não funcionar em todos os casos, mas com certas modificações o xcodebuild pode ser usado para resolver esse problema (é isso que estamos fazendo no nosso servidor de IC).
Legoless

1
Eu gostaria de ter aprendido três horas antes que o xcodebuild agora também pode exportar para o formato ipa! Perdi tanto tempo tentando fazer o xcrun incorporar um determinado perfil de provisionamento, mas ele simplesmente não funciona no Xcode 6. O xcodebuild funciona! Obrigado.
Oscar Hierro

31

Eu tive um problema semelhante ao enviar para a App Store. Criei um arquivo, cliquei em "enviar" e o Xcode queria assinar automaticamente com o perfil padrão de provisionamento de curinga "XC com. *", Em vez do perfil explícito que já possuía.

Para corrigir isso, acabei de gerar novamente o perfil no Apple Developer Portal:

1) Acesse developer.apple.com e encontre o perfil de provisionamento de distribuição que você deseja usar.
2) Selecione-o, clique em "Editar", renomeie o perfil e clique em "Gerar".
3) Faça o download do perfil de provisionamento para a área de trabalho e arraste-o para o ícone do Xcode 6.
4) Reinicie o Xcode 6.
5) Abra a janela do organizador e clique em "Enviar" no arquivo que você criou. O Xcode selecionará automaticamente seu perfil explícito, em vez do genérico.


Oi, há alguma declaração oficial sobre essa mudança?
frank

Não que eu saiba. Tentei comparar os velhos e novos perfis em um editor de texto para ver se eu poderia detectar mudanças no formato, mas eu não notei nada de significativo
GingerBreadMane

2
Eu era cético, mas isso funcionou para mim. Eu apenas mudei para Xcode 6 e tentou saída minha primeira construção ad hoc
Newtz

Até agora, usei o perfil de provisionamento de desenvolvimento. Isso ainda é utilizável ou eu preciso criar um perfil de distribuição?
Legoless

Sim Sem Legendas, você precisará criar um perfil de Distribuição para exportar uma compilação. Você ainda pode usar um perfil de desenvolvimento para depurar quando o dispositivo estiver conectado ao seu Mac.
Codeburn #

27

Quando estiver no Organizer

  • Selecione a compilação ad-hoc e clique em "Exportar ...."
  • Selecione "Salvar para implantação ad hoc" -> Avançar
  • Em vez de selecionar uma organização na lista suspensa, selecione "Usar ativo de assinatura local" -> Escolha
  • Exporte e salve .ipa como antes.

Obviamente, você precisa ter gerado, baixado e instalado o perfil de provisionamento ad-hoc.


5
Resolvido o problema graças a esta resposta e a esta resposta . O perfil de provisionamento precisa estar vinculado a um ID de aplicativo explícito, que usa o mesmo identificador de pacote configurável que seu aplicativo. Um ID de aplicativo curinga não funcionará. Você precisa selecionar "Usar recurso de assinatura local" ao exportar o aplicativo.
Sarah Elan

@SarahElan combinar as duas respostas e escrever um novo ... obrigado
YaBoiSandeep

Na minha opinião e em relação à minha experiência, acho que essa é a melhor resposta. Obrigado.
Basem Saadawy

17

Parece que o último perfil de provisionamento gerado vence agora. Assim, você pode gerar novamente o perfil desejado e fazer o download e o Xcode o usará.

Uma abordagem um pouco melhor: defina o perfil prov desejado em seu destino e use a linha de comando para criar seu ipa, que também funciona.

Aqui está o script, estou usando:

#!/bin/sh

# Current as working as of 2014/09/22
# Xcode 6

OUTPUTDIR="$HOME/build"
APPNAME="your-app"
SCHEME="your-app"
APP_WORKSPACE="$HOME/Path/To/your-app.xcworkspace"

rm "$OUTPUTDIR/$APPNAME.ipa" #deletes previous ipa
xcodebuild -workspace "$APP_WORKSPACE" -scheme "$SCHEME" archive -archivePath "$OUTPUTDIR/$APPNAME.xcarchive"
xcodebuild -exportArchive -exportFormat ipa -archivePath "$OUTPUTDIR/$APPNAME.xcarchive" -exportPath "$OUTPUTDIR/$APPNAME.ipa" 

e minhas configurações:

Configurações do Xcode


Existe alguma maneira mais fácil?
Timur Bernikovich

Eu acho que é porque o MacOS 10.0. ainda está na versão beta.
Timur Bernikovich

1
O problema com o uso de perfis XC Ad Hoc é que eles sempre incluem todos os dispositivos - tira a opção de desativar alguns dispositivos que você pode fazer com perfis manuais.
Jonny

O perfil ad hoc do XC é apenas um exemplo. Você pode usar o perfil que quiser.
quer

Você deve remover a extensão '.ipa' do argumento para -exportPath, pois ela já foi adicionada automaticamente pelo xcodebuild.
Oscar Hierro

8

Também não consegui descobrir isso - fui mordido ao enviar para a AppStore, onde o padrão era um perfil curinga.

Acabei construindo no Xcode 6, depois voltando à janela Organizador do Xcode 5 para o envio. Dessa forma, você será solicitado a escolher um perfil para assinar.


Esta é a solução alternativa que estou fazendo. Mas eu realmente quero me livrar do Xcode 5 agora. Estou pensando em usar xcrun e linha de comando agora.
Legoless 29/09

Tentei todas as soluções sugeridas que encontrei, mas essa é a única que realmente funciona.
HunTer DRF 10/10

8

No Xcode 6 (pelo menos 6.1 eu estou usando agora) quando você está exportando para ad hoc, o xcode 6 varrerá automaticamente se houver algum perfil de provisionamento que contenha todos os dispositivos registrados na conta de desenvolvedor e, ao mesmo tempo, corresponda ao ID do pacote . Se não, ele usará o perfil de provisão XC. Portanto, se você deseja usar seu próprio perfil, por exemplo, para fins de notificação por push, será necessário selecionar todos os dispositivos em seu perfil no portal do desenvolvedor da apple. Eu acho que essa é a razão pela qual algumas pessoas recriam o perfil funcionariam e outras não.

btw, use script pode exportar e fazer upload para testflight, mas o dispositivo simplesmente não pode baixá-lo. provavelmente em algum lugar eu errei. se alguém sabe por que é, por favor me avise. tks


Obrigado! Isso fez o truque para mim. Editei o perfil para incluir todos os dispositivos, arquivei novamente o aplicativo e o viola usou o perfil correto.
Erik Villegas

É exatamente isso e me parece um bug ou agora que a Apple introduziu o TestFlight para distribuir versões beta, a distribuição AdHoc não recebeu a devida atenção. O que aconteceu comigo foi exatamente o que @AlexHsieh descreve; Criei meu perfil de provisionamento como sempre fiz antes, selecionei apenas um subconjunto de todos os meus dispositivos registrados e, quando tentei gerar o IPA, o Xcode não encontrou nenhum perfil de provisionamento válido e tentei usar esse XC gerado automaticamente (que também falhou no meu caso). A correção foi adicionar todos os meus dispositivos registrados ao perfil de provisionamento.
Jjramos

7

Isso funcionou para mim:

  1. clique em "Exibir contas .." na caixa de diálogo "..select a Development Team ..".
  2. clique em "Visualizar detalhes .." e localize o perfil de provisionamento XC Ad Hoc.
  3. clique com o botão direito do mouse nesse perfil e escolha "Mostrar no Finder".
  4. excluir o perfil selecionado.
  5. volte para a caixa de diálogo na etapa 1.
  6. clique em "Escolha".
  7. clique na seta perto do perfil de provisionamento para abrir o diretório de perfis de provisionamento.
  8. exclua novamente o perfil genérico como na etapa 4.
  9. clique no botão "Anterior" na caixa de diálogo "Enviar [nome do aplicativo] para a Apple:".
  10. selecione novamente "Salvar para implantação ad hoc"
  11. clique novamente no botão "escolher".

agora você deve ver o nome correto do perfil de provisionamento.


Eu não tentei o primeiro. Mas este funcionou para mim. Obrigado. =]
Glauco Neves

5
Não funcionou para mim. Mesmo após a exclusão dos perfis nas etapas 4 e 8, os perfis se recriado e automaticamente selecionado novamente na etapa 11.
Chun

1
Não funciona para mim porque, sempre que preciso clicar em escolher uma conta (tenho várias contas para entregar aplicativos aos meus clientes), o perfil Gerado pelo XC é recriado. PITA da Apple.
Wf810 /

Eu acrescentaria que antes de seguir estas etapas com o XCode 6, você deve excluir os perfis de provisionamento XC: * da sua conta de desenvolvedor da apple. Após a etapa 4, voltaria à caixa de diálogo Visualizar detalhes e apertaria o botão de atualização para garantir que os perfis XC: * não estejam mais lá. Além disso, use as configurações de compilação do Thorsten para garantir que você selecione o perfil correto. Trabalhou para mim duas vezes.
Android Noob

Eu tive o mesmo problema que @Chun e (@) wuf810. Essas malditas disposições móveis continuam sendo recriadas. O que fiz foi manter aberta a janela do diretório "Perfis de provisionamento" e seguir as etapas do (@) usuário3382891 - exclusão dos registros .mobileprovision o mais rápido possível. Eventualmente, o Xcode selecionou meu perfil de provisionamento correto. Agora eu sou para o próximo problema ...
kris

6

Eu tenho uma solução alternativa para isso que funciona para mim.

Eu tenho o Xcode 6 e o ​​Xcode 5.1.1 instalados, o Xcode 6 está em Aplicativos e o Xcode 5.1.1 está em outro diretório. Quando quero fazer uma compilação, uso o Xcode 6 para criar o arquivo morto. Mas você também pode ver o arquivo morto criado no Xcode 5.1.1, então eu uso o Xcode 5.1.1 para distribuir o Ad Hoc .ipa usando o perfil de provisionamento que eu quero usar. Então construa usando o Xcode 6, mas distribua usando o Xcode 5.1.1.


Não consigo fazer o upload da build para o testflight dessa maneira.
hardik hadwani

Se você estiver usando o mesmo perfil de provisionamento para criar e distribuir, poderá fazer o upload da sua compilação para testar o voo dessa maneira. Verifique novamente se o perfil de provisionamento que você está usando para construção é o mesmo que você está usando para distribuir.
Adam Freeman

4

O uso de recursos de assinatura local durante a exportação resolveu o problema para mim:insira a descrição da imagem aqui


3

A resposta do @MrPatol não funcionou para mim. Meu cenário de trabalho para o Xcode 6.3.2

Na Central de Membros -> Perfis de provisionamento para iOS

  • Exclua o perfil de provisionamento que foi definido por padrão quando você estava tentando criar o aplicativo (por exemplo, "XC ..."). Crie um perfil de provisionamento ad-hoc (não produção) com um nome abreviado.

No Utilitário de configuração do iPhone -> Perfis de provisionamento

  • Exclua o mesmo perfil de provisionamento (por exemplo, "XC ...")

No Xcode -> Organizador

  • Selecione a compilação ad-hoc e clique em "Exportar ...." Selecione "Salvar para implantação ad hoc" -> Avançar
  • Selecione uma organização na lista suspensa
  • Verifique se seu novo perfil de provisionamento ad-hoc está selecionado automaticamente
  • Exporte e salve .ipa como antes.

2

Aqui estão os dois pontos principais que resolveram o problema para mim.

  • Quando você gera o perfil de provisionamento, ele precisa estar vinculado a um ID de aplicativo explícito que usa o mesmo identificador de pacote configurável que seu aplicativo. Um ID de aplicativo curinga não funcionará.
  • Ao exportar o aplicativo para implantação ad-hoc, selecione Usar ativo de assinatura local no menu suspenso e clique em Escolher.

O Xcode encontrará o perfil de provisionamento correto, correspondendo o ID do aplicativo ao identificador de pacote do aplicativo.


1

De fato, você precisa criar um novo perfil de Distribuição, específico para Implantação Ad Hoc. Isso pode ser encontrado no centro de membros clássico, mas é um novo tipo de certificado.

Em seguida, você pode selecionar quais dispositivos podem ser usados ​​para testar o aplicativo, como faria com um perfil de desenvolvedor.

E o certificado recém-criado estará disponível quando você exportar seu pacote do Organizer da maneira usual.

Como alternativa, você pode usar a solução TestFlight fornecida pela Apple com iOS 8 para permitir que seu usuário tenha acesso ao pré-lançamento.

insira a descrição da imagem aqui


Sim, mas como você aponta, isso significa apenas iOS8. A Apple tem sido estúpida em particular, forçando os usuários do Testflight apenas ao iOS8. Por um bom tempo, a maior base instalada ainda será o iOS7, então a Apple deveria ter permitido isso.
wuf810

1

Eu tive o mesmo problema, finalmente o resolvi, regenerando o perfil que queria usar no Xcode 6, incluindo todos os dispositivos que registrei na minha conta de desenvolvedor iOS, fazendo assim, ao selecionar exportar, mostro o perfil correto e eu pode fazer a exportação Ad Hoc com o Xcode 6 sem usar um script. Espero que ajude.


1
Isso funciona, mas apenas se você estiver de acordo com o perfil de provisionamento que contém todos os dispositivos registrados com sua conta de desenvolvedor do iOS. Para usar apenas um subconjunto dos dispositivos no perfil de aprovisionamento eu tive que usar esta técnica: stackoverflow.com/a/26296138/71262
Oran Dennison

0

Fiquei um tempo parado com isso, mas usando o Crashlytics, resolvi construir compilado usando o perfil selecionado nas configurações de compilação do seu projeto Xcode.

espero que ajude alguém.


0

Quase o mesmo problema. Após criar um arquivo morto para distribuição (Produto> Arquivo morto), exporte o arquivo morto (clique em Exportar ...) e escolha "Salvar para implantação corporativa"; Então o próximo". Você seleciona o padrão "Equipe de desenvolvimento" (por exemplo, nome da organização) e clique em "Escolher". Por fim, você verá uma visão resumida que também lista o perfil de provisionamento que o Xcode encontrou automaticamente (talvez criado rapidamente) para você. PODE ser o perfil de provisionamento errado (normalmente um perfil de provisionamento de curinga, como "XC: *") e PODE estar acontecendo porque já existe um perfil de provisionamento de curinga no portal do desenvolvedor.

Usei um tíquete de suporte para isso e só recebi esse link de volta https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringPushNotifications/ConfiguringPushNotifications.html#//apple_ref/doc/uid/TP40012582 -CH32-SW1 . Não é realmente uma grande ajuda.

Descobri que a solução do MrPatol também funciona para o Enterprise Deployment e resolve o problema para nós. Primeiro, entrei no portal do desenvolvedor e criei manualmente um perfil de provisionamento adequado ao meu aplicativo. Em seguida, baixou e instalou o novo perfil de provisionamento criado manualmente.


0

No xcode 7, não consegui escolher o provisionamento ad-hoc via

Organizador -> Carregar na App Store e Organizador -> Validar

Mas eu poderia escolher via Organizer -> Exportar

Editado:

O upload do aplicativo após a exportação para adhoc na loja de aplicativos para testFlight causou outro problema discutido aqui . Portanto, a solução para esses dois problemas é uma. Crie o provisionamento da AppStore para poder selecioná-lo via organizador e utilizar o testFlight fazendo upload na appstore.


0
  1. Eu acho que é a maneira correta de especificar uma opção -exportOptionsPlist após o Xcode 7. Ele escolherá os arquivos de provisionamento certos, como na exportação da GUI, independentemente do que você especificar na configuração do projeto.

xcodebuild -exportArchive -archivePath $ Archive_Path -exportPath $ LOCAL_PACKAGE_DIR -exportOptionsPlist $ Export_Plist_Path

O arquivo optionPlist é assim,

<dict>
  <key>teamID</key>
        <string>MYTEAMID123</string>
        <key> teamID </key>
        <string>app-store</string>
        <key>uploadSymbols</key>
        <true/>
</dict>


<plist>

loja de aplicativos, empresa, ad-hoc, desenvolvimento são alternativas

  1. Mas você pode encontrar outro erro depois acima.

Domínio do erro = Código IDEDistributionErrorDomain = 14 "Nenhum dispositivo aplicável encontrado." UserInfo = {NSLocalizedDescription = Nenhum dispositivo aplicável encontrado.}

É um problema de rubi. Experimente este script de shell,xcbuild-safe.sh

xcbuild-safe.sh xxxxNormalOptionsInXcodebuild bla...
  1. Aguarde um momento, outro erro estranho aparece.

xcbuild-safe.sh: linha 62: shell_session_update: comando não encontrado

O que diabos shell_session_update? Vamos contornar isso. Basta definir uma função antes do cmd real do xcodebuild, ou seja, na linha 60 ou 61.

function shell_session_update() { :; }

-4

Em resposta à sua pergunta específica, não há como selecionar o perfil de provisionamento a ser usado. O que você está tentando fazer? (ou seja, o que o perfil que você deseja selecionar permite que o gerado automaticamente não?)


1
Por exemplo, tendo uma lista específica de UDIDs disponíveis para esse aplicativo. Estou desenvolvendo aplicativos para vários clientes e não posso misturá-los. Existem maneiras de contornar isso, claro, mas todos eles são muito mais complicado do que simplesmente selecionando perfil de aprovisionamento eu quero usar
Lope

Certamente, existe uma maneira de selecionar o perfil de provisionamento a ser usado. stackoverflow.com/a/26296138/71262
Oran Dennison

1
@Lope Se um cliente tiver um dos seus aplicativos e o perfil associado instalado, ele poderá instalar qualquer um dos seus aplicativos (mesmo que os perfis dos outros aplicativos não contenham o dispositivo). Essa confusão é um dos principais motivos pelos quais queremos afastar os desenvolvedores da especificação manual de seus perfis e listas de dispositivos. (ou seja, muitas pessoas parecem estar confiando em uma falsa sensação de segurança como sua principal razão para querer especificar manualmente perfis)
clarkcox3

@ clarkcox3 bem que é ainda pior, eu quero manter o cliente de ser capaz de ver uns aos outros aplicativos
Lope

@Ope: Não conheço uma maneira de distribuir arquivos ad hoc ipa que disponibilizariam todos os seus aplicativos para os testadores. Em outras palavras, você precisa fornecer explicitamente aos testadores o aplicativo que deseja que eles testem, certo? Essa separação física os impediria de usar outros aplicativos. (Não é como eles podem ir à loja e obter todos eles, sim?) Existe outra maneira pela qual seus testadores podem acessar todos os seus aplicativos sem a sua permissão ???
Leanne
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.