xcodebuild em uma VM macOS e se autentica com uma chave de API do App Store Connect que você armazena como segredos do Devin.
Antes que o Devin possa importar um build, você precisa:
- Configurar seu app no App Store Connect.
- Criar uma chave de API do App Store Connect.
- Adicionar a chave e seu Team ID ao Devin como segredos.
- Garantir que o Devin consiga acessar os servidores da Apple.
Importar para o TestFlight exige sessões no macOS. Se você usa um deployment Dedicated SaaS, entre em contato com seu account team para ativar VMs macOS.
Requisitos
Configure o App Store Connect
1
Aceite os contratos mais recentes
O Account Holder entra no App Store Connect e aceita os contratos pendentes em Business. As importações falham enquanto houver um contrato obrigatório pendente.
2
Registre o bundle ID
No portal do Apple Developer, acesse Certificates, Identifiers & Profiles → Identifiers e registre um App ID que corresponda ao bundle ID do target do seu app. Pule esta etapa se o identificador já existir.
3
Crie o registro do app
No App Store Connect, acesse Apps, clique em + e selecione New App. Escolha a plataforma, o nome, o idioma principal, o bundle ID da etapa anterior e um SKU. As importações para o TestFlight falham se não houver um registro de app para o bundle ID.
4
Crie um beta group
Abra o app, acesse TestFlight e crie um grupo:
- Internal testing: os testadores precisam ser usuários do seu time no App Store Connect. Os builds ficam disponíveis assim que o processamento termina.
- External testing: os testadores podem ser qualquer pessoa com um endereço de e-mail ou um link público. Antes, preencha as Test Information (descrição do app beta, e-mail para feedback e dados de contato para revisão). O primeiro build de cada versão passa pelo Beta App Review.
5
Responda à conformidade de exportação
Todo build precisa responder à pergunta de conformidade de exportação antes que os testadores possam instalá-lo. Para pular essa pergunta a cada build, defina
ITSAppUsesNonExemptEncryption no Info.plist do seu app. Use NO se o app usa apenas criptografia isenta, como HTTPS.Criar uma chave de API do App Store Connect
1
Ativar o acesso à API
No App Store Connect, acesse Users and Access → Integrations → App Store Connect API. Se o acesso à API ainda não estiver ativado, o Account Holder deve clicar em Request Access e aceitar os termos.
2
Gerar uma chave de equipe
Em Team Keys, clique em +. Informe um nome, como
Devin TestFlight, e selecione a função App Manager. É necessário ter a função Admin para gerar uma chave. Se o Xcode não conseguir criar um certificado de distribuição com uma chave App Manager, gere uma chave com a função Admin.3
Baixar a chave privada
Clique em Download ao lado da nova chave para salvar
AuthKey_<KEY_ID>.p8. A Apple permite baixar o arquivo apenas uma vez. Se você perdê-lo, revogue a chave e gere uma nova.4
Copiar o Issuer ID e o Key ID
O Issuer ID aparece acima da tabela de chaves. O Key ID fica na linha da chave.
5
Encontrar o seu Team ID
No portal do Apple Developer, acesse Membership details e copie o Team ID. É uma sequência de 10 caracteres, como
A1B2C3D4E5.Adicione segredos ao Devin
Para copiar a chave privada em um Mac, execute:
- organização: todas as sessões da sua organização podem usar a chave. Use esse escopo quando o time publica builds com Devin.
- Personal: apenas as sessões que você iniciar podem usar a chave.
Permitir acesso à rede
api.appstoreconnect.apple.com e os demais hosts da Apple que o xcodebuild utiliza para assinatura e importação. Permitir *.apple.com cobre todos eles.
Um host bloqueado normalmente aparece como erro de autenticação, e não como erro de rede. Consulte Solução de problemas.
Importar um build
- Escrever
ASC_PRIVATE_KEYem~/.appstoreconnect/private_keys/AuthKey_$ASC_KEY_ID.p8com permissões0600. - Verificar o número do build mais recente com a API do App Store Connect e escolher um número maior.
- Arquivar o app com
xcodebuild archive. - Assinar e importar o build com
xcodebuild -exportArchive. - Aguardar o fim do processamento e então adicionar o build ao beta group com a API do App Store Connect.
destination definido como upload:
-allowProvisioningUpdates permite que o Xcode crie o certificado de distribuição e o provisioning profile com a chave de API, de modo que a VM não precisa ter os ativos de assinatura instalados.
Se o seu repositório já tiver um script de publicação de versão, como uma lane do fastlane ou um target do make, peça ao Devin para usá-lo. O fastlane aceita a mesma chave por meio de app_store_connect_api_key.
Salve as etapas no seu blueprint
knowledge do blueprint do seu repositório:
Solução de problemas
No Accounts with App Store Connect Access ou Failed to Use Accounts durante a exportação. Verifique primeiro o acesso à rede. Se a VM não conseguir alcançar os servidores da Apple, o xcodebuild reporta esse erro mesmo que a chave seja válida. Procure por ITunesConnectFoundationErrorDomain Code=-1003 nas linhas acima. Se a rede estiver funcionando, verifique se a chave tem a função App Manager.
No profiles for '<bundle ID>' were found. O bundle ID não está registrado para o team indicado em APPLE_TEAM_ID, ou não existe nenhum registro de app para ele no App Store Connect.
The provided entity includes an attribute with a value that has already been used. O número de build já foi usado para esta versão. Faça a importação novamente com um número de build maior.
O build é importado, mas os testadores não conseguem instalá-lo. Verifique o build em App Store Connect → TestFlight. Ele pode ainda estar em processamento, estar sem as informações de conformidade de exportação ou aguardando a Beta App Review.
O Xcode não consegue criar um certificado de distribuição. A função da chave não permite gerenciar certificados. Gere uma chave com a função Admin ou peça a um Admin que crie o certificado de distribuição no portal Apple Developer.
As variáveis de ambiente estão vazias na sessão. Os segredos não são exportados para todos os shells. Peça ao Devin para vincular o segredo (por exemplo, ASC_KEY_ID) ao comando que precisa dele e verifique se o segredo existe na página de segredos com um escopo que a sessão possa usar.
