Publicar aplicativo iOS na App Store: passo a passo
Apps mobile · Por Kevin Marcondes · Publicado em · Atualizado em · 8 min de leitura
Este guia mostra, de ponta a ponta, como publicar um aplicativo iOS na App Store. Você verá requisitos, configuração do projeto, criação do registro no App Store Connect, geração do build com Xcode ou CI, upload com Transporter ou Fastlane, testes no TestFlight e envio para revisão. Siga as etapas e evite rejeições comuns.
Pré-requisitos e contas necessárias
Antes de publicar, garanta que você atende aos requisitos essenciais. Você precisa de uma conta ativa no Apple Developer Program e de um Mac com Xcode instalado. Também é preciso definir o identificador do app e preparar materiais obrigatórios, como ícones, screenshots e política de privacidade.
Use este checklist para começar sem bloqueios.
- Conta no Apple Developer Program ativa.
- Mac com versão do Xcode compatível com o SDK alvo.
- Acesso ao App Store Connect com permissão para gerenciar apps.
- Bundle ID reservado e único.
- Certificados e perfis de provisionamento de distribuição iOS.
- Versão do app e número de build definidos.
- URL de política de privacidade e site de suporte.
- Ícones e screenshots nos tamanhos exigidos.
- Credenciais de teste e dados fictícios, se houver login.
- Chave de API para App Store Connect (opcional, para automação).
| Requisito | Para que serve |
|---|---|
| Apple Developer Program | Assinatura de código e publicação na App Store. |
| App Store Connect | Cadastro do app, metadados e envios. |
| Certificados e perfis | Assinar builds de distribuição com validade. |
| Ícones e screenshots | Compor a página do app na App Store. |
| Política de privacidade | Transparência sobre coleta e uso de dados. |
Configurar o projeto iOS (Bundle ID, versão e assinatura)
No Xcode, abra o projeto e ajuste identificadores e versões. O Bundle Identifier deve corresponder ao cadastrado no App Store Connect. Em Signing & Capabilities, ative o assinador automático ou carregue certificados e perfis de provisionamento.
Revise o Info.plist. Para APIs que usam câmera, fotos, microfone, localização ou Bluetooth, inclua mensagens de uso. Sem elas, o app será rejeitado.
- Atualize CFBundleShortVersionString (versão) e CFBundleVersion (build).
- Confirme que o Product Bundle Identifier é único e estável.
- Adicione entitlements e capabilities necessários (ex.: Push Notifications).
<!-- Exemplo de chaves no Info.plist para permissões -->
<key>NSCameraUsageDescription</key>
<string>Precisamos da câmera para ler QR Codes.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Usamos sua galeria para selecionar imagens do perfil.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Usamos sua localização para mostrar lojas próximas.</string>
Criar o app no App Store Connect e metadados obrigatórios
No App Store Connect, crie o registro do app com nome, plataforma, Bundle ID e SKU. Depois, preencha as informações exigidas para a listagem do app.
Inclua descrição, palavras‑chave, categoria, classificação etária, política de privacidade e detalhes de coleta de dados. Se usar anúncios, declare o uso do IDFA. Prepare notas de revisão e credenciais de teste, se houver login.
Se seu processo de release sofre com falhas recorrentes, uma revisão de fluxo ajuda a reduzir riscos. Veja ideias em auditoria de processos de deploy e plano de correção.
- Nome do app e idioma primário definidos.
- Bundle ID vinculado corretamente ao registro.
- Descrição clara e objetiva do app.
- Palavras‑chave coerentes com a busca.
- Categoria principal e secundária compatíveis.
- Classificação etária preenchida com precisão.
- URL de suporte e política de privacidade válidas.
- Detalhes de coleta de dados e rastreamento informados.
Gerar o build (Archive) com Xcode ou pipeline de CI
Com o projeto configurado, gere um Archive. No Xcode: Product > Archive e, em seguida, exporte para a App Store. Em automação, use xcodebuild em um runner macOS. Isso exige certificados válidos e perfis de distribuição.
Para padronizar builds e reduzir erros, pipelines de CI/CD são úteis. Veja um guia introdutório para estruturar pipelines e adapte para jobs iOS em runners macOS: pipelines de CI/CD.
- Use número de build crescente a cada upload.
- Exporte o .ipa com ExportOptions de distribuição.
- Gerencie assinatura automaticamente ou com ferramentas como Fastlane Match.
# Archive do esquema de Release
xcodebuild -scheme "SeuEsquema" \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath build/SeuApp.xcarchive \
clean archive
# Exporta o .ipa para distribuição (usa ExportOptions.plist)
xcodebuild -exportArchive \
-archivePath build/SeuApp.xcarchive \
-exportPath build/export \
-exportOptionsPlist ExportOptions.plist
# Exemplo mínimo de ExportOptions.plist (coloque em arquivo separado)
# <?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>method</key><string>app-store</string>
# <key>signingStyle</key><string>automatic</string>
# <key>uploadSymbols</key><true/>
# </dict>
# </plist>
Upload do .ipa com Transporter ou Fastlane
Faça upload do .ipa gerado. Opção gráfica: Transporter (aplicativo para macOS). Opção automatizada: Fastlane, que integra build e upload. Garanta 2FA habilitada e uma sessão válida para evitar falhas em linha de comando.
Exemplo de lanes para beta (TestFlight) e release (App Store) com Fastlane.
- Armazene credenciais com segurança e rotacione tokens quando necessário.
- Evite commitar certificados e perfis; gerencie‑os com controle de acesso.
- Se preferir, faça o upload direto pelo Xcode em Distribute App.
# Fastfile (exemplo simplificado)
default_platform(:ios)
platform :ios do
desc "Build + upload para TestFlight"
lane :beta do
build_ios_app(
scheme: "SeuEsquema",
export_method: "app-store"
)
upload_to_testflight
end
desc "Upload para App Store (sem mexer em metadata)"
lane :release do
upload_to_app_store(
skip_screenshots: true,
skip_metadata: true
)
end
end
TestFlight: testes beta e critérios de aprovação
Após o upload, o build passa por processamento. Quando disponível, habilite TestFlight para testes internos ou externos. Builds externos passam por validação básica antes de liberar para testers.
Colete feedback, relatos de falhas e métricas de estabilidade. Defina critérios de saída claros para avançar ao release. Se você ainda está maturando roadmap e escopo, veja ideias em apps para dispositivos móveis.
- Teste em dispositivos e versões do iOS suportadas.
- Valide onboarding, login e fluxos críticos, inclusive offline.
- Especifique notas de versão claras para testers.
- Rastreie crashes e trate regressões antes do envio final.
Enviar para revisão: checklist de conformidade
Com o build aprovado nos testes, selecione o build na versão, preencha as notas de versão e envie para revisão. O tempo de análise varia conforme o app e a fila.
Finalize este checklist para reduzir rejeições e retrabalho.
- Export compliance: informe se usa criptografia e como.
- Direitos de conteúdo: licenças para mídia de terceiros, se houver.
- Política de privacidade acessível e atualizada no site.
- Acesso a recursos pagos: forneça ambiente e contas de teste.
- Transparência de rastreamento: declare, se aplicável (ex.: IDFA).
- Mensagens de uso no Info.plist para dados sensíveis.
- Fluxo de exclusão de conta, se o app exigir cadastro.
Como confirmar que funcionou e publicar
Acompanhe os status no App Store Connect. Após “Waiting For Review” e “In Review”, o app aprovado entra em “Ready for Sale”. Você pode liberar manualmente ou usar lançamento gradual.
Se o build não processar ou voltar com erro, ajuste assinatura, versões e metadados e reenvie. Estes erros são comuns e como resolver rapidamente.
- ITMS-90164/90035: problemas de assinatura — revise certificados e entitlements.
- Invalid Bundle Identifier: Bundle ID no Xcode difere do App Store Connect.
- Duplicate CFBundleVersion: incremente o número de build.
- Missing Purpose String: adicione mensagens de permissão no Info.plist.
Perguntas frequentes
Preciso de conta paga para publicar na App Store?
Sim. É necessário ter uma assinatura ativa no Apple Developer Program para assinar builds de distribuição e gerenciar o app no App Store Connect. Sem essa conta, você não consegue enviar builds nem publicar.
Qual a diferença entre versão e número de build?
A versão (ex.: 1.2.0) é o número visível ao usuário e muda quando há novas funcionalidades. O número de build (ex.: 45) é interno e precisa aumentar a cada upload. Você pode enviar vários builds da mesma versão, mas cada build deve ter número maior.
Consigo publicar sem usar um Mac?
A compilação de apps iOS requer macOS e ferramentas compatíveis. Se você não tem um Mac local, use provedores de CI com runners macOS para compilar e assinar o app, e então fazer upload via linha de comando ou Transporter.
Quanto tempo leva a revisão do app?
Varia conforme o tipo de app, complexidade e fila de análise. Em alguns casos, a aprovação ocorre no mesmo dia; em outros, pode levar alguns dias. Rejeições estendem o prazo. Tenha respostas rápidas para solicitações da equipe de revisão.
Preciso de política de privacidade para publicar?
Se o app coleta dados do usuário, integra login de terceiros ou usa APIs sensíveis, você deve fornecer uma política de privacidade. Mesmo quando a coleta é mínima, manter a política pública e atualizada evita rejeições e dá transparência ao usuário.
O que fazer se meu app for rejeitado?
Leia o motivo da rejeição, corrija o ponto indicado e envie uma nova compilação ou atualização de metadados. Inclua notas objetivas explicando a correção. Se necessário, anexe vídeos ou credenciais de teste para demonstrar o funcionamento.
Quer automatizar seu pipeline de publicação iOS?
Se você precisa revisar assinatura, padronizar builds ou integrar Fastlane e CI, vamos conversar sobre seu cenário e próximos passos.
Falar sobre publicação iOSVeja também
- tutorial: implementar Canary releases com Traefik em Docker Compose usando headers e weight routing para deploys graduais de aplicações PHP
- Tutorial: configurar HAProxy com Let's Encrypt e healthchecks para balanceamento de tráfego entre containers Docker em VPS (passo a passo)
- Tutorial prático: implementar mTLS entre Nginx e microserviços usando smallstep CA em Docker Compose
- Tutorial: configurar cgroup v2 e systemd ResourceControl para limitar CPU, memória e I/O de containers Docker no Debian