Skip to content

Runbook: Publicação do app mobile nas lojas (Apple + Google)

Guia completo para configurar e publicar o app Contrasync na App Store e na Google Play. Pressupõe que você já possui:

  • Conta Apple Developer Program (paga, ativa)
  • Conta Google Play Console (desenvolvedor registrado)
  • Binários prontos: .ipa (iOS) e .aab (Android)

Este runbook cobre o primeiro envio manual (obrigatório nas duas lojas) e a configuração pós-publicação (backend, credenciais EAS, revisão de loja).

Identificadores do projeto

CampoValor
Nome exibidoContrasync
Slug Expocontrasync-app
Owner Expocontrasync
Projeto EAS@contrasync/contrasync-app
Project ID EAS409313df-bb14-45e4-a689-87c83d3edf7d
Bundle ID iOScom.contrasync
Package Androidcom.contrasync
Versão semver (app.json)1.0.0
Scheme deep linkcontrasync://
Firebase projectcontrasync (705803465844)
Política de privacidadehttps://contrasync.com/privacy-policy
Sitehttps://contrasync.com

Repositório: contrasync-reactnative-app.

Decisão rápida: qual caminho usar?

Você já criou o registro do app na loja (primeira vez)?
├─ NÃO → siga este runbook do início (seções Google Play + App Store)
└─ SIM → pule para "Enviar binário" em cada plataforma
         e depois "Pós-publicação"

Quer submeter o .ipa/.aab que já tem localmente?
├─ SIM → upload manual nas consoles (seções abaixo)
└─ NÃO → use EAS Submit (ver runbook eas-pipeline.md)

Checklist geral (antes de submeter)

Binários

  • [ ] iOS .ipa: assinado com certificado de App Store Distribution e provisioning profile para com.contrasync.
  • [ ] Android .aab: assinado com o mesmo keystore que será usado em todas as releases futuras (guarde backup seguro — perder o keystore impede atualizações).
  • [ ] Versão do binário (CFBundleShortVersionString / versionName) = 1.0.0 (ou a versão que você quer publicar).
  • [ ] Build number (CFBundleVersion / versionCode) único e maior que qualquer build já enviado.
  • [ ] Build aponta para API de produção (EXPO_PUBLIC_API_URL), não ngrok.

Contas e contratos

  • [ ] Apple Developer Program ativo e PLA aceito (Program License Agreement — ver troubleshooting no eas-pipeline).
  • [ ] App Store Connect → Business → Agreements, Tax, and Banking completo (contrato pago, impostos, dados bancários).
  • [ ] Google Play Console → perfil de desenvolvedor verificado e conta de pagamento (se app pago; Contrasync é gratuito).

Materiais de listing

  • [ ] Ícone 1024×1024 (sem transparência, sem cantos arredondados — a loja arredonda).
  • [ ] Screenshots (ver seção "Assets visuais").
  • [ ] Descrição curta e longa (PT-BR; EN opcional).
  • [ ] URL da política de privacidade: https://contrasync.com/privacy-policy.
  • [ ] E-mail de suporte ao usuário (ex.: [email protected]).
  • [ ] Categoria sugerida: Produtividade ou Negócios.

Permissões declaradas no app

O app.json declara estas permissões — todas precisam aparecer nos formulários de privacidade das lojas:

PermissãoUso no appJustificativa para loja
CâmeraLogin via QR codeEscanear QR gerado no painel web
Localização (when in use)Lançamento de horasRegistrar posição no registro de horas
Notificações pushAlertas operacionaisAvisos de contratos, compliance, aprovações
Microfone (RECORD_AUDIO)Dependência do expo-cameraDeclarar se solicitado; o app não grava áudio

Criptografia: ITSAppUsesNonExemptEncryption: false — responda "Não" à pergunta de criptografia de exportação na App Store (usa apenas HTTPS padrão).


Google Play Console

1. Criar o app (primeira vez)

  1. Acesse https://play.google.com/console.
  2. Criar app → nome Contrasync.
  3. Tipo: App (não game).
  4. Gratuito ou pago: Gratuito.
  5. Declarações iniciais: marque conforme aplicável (políticas, exportação EUA, etc.).

2. Configurar ficha da loja (Store listing)

Painel → Crescer → Presença na loja → Ficha principal da loja

CampoOrientação
Nome do appContrasync (máx. 30 caracteres)
Descrição curtaAté 80 caracteres. Ex.: "Gestão de prestadores, horas, compliance e contratos digitais."
Descrição completaAté 4000 caracteres. Use texto da proposta de valor.
Ícone do app512×512 PNG, 32-bit, máx. 1 MB
Gráfico de recursos1024×500 PNG/JPEG (banner da loja)
Screenshots telefoneMín. 2, máx. 8. Resolução conforme guidelines (ex.: 1080×1920 ou 1440×2560)
Screenshots tablet 7"Opcional (app suporta tablet no iOS; Android edge-to-edge)
Screenshots tablet 10"Opcional
CategoriaProdutividade ou Negócios
E-mail de contatoE-mail de suporte visível ao usuário
Sitehttps://contrasync.com
Política de privacidadehttps://contrasync.com/privacy-policy

Idioma padrão: Português (Brasil). Adicione Inglês (EUA) se quiser alcance internacional.

3. Classificação de conteúdo

Painel → Política → Classificação de conteúdo

  1. Preencha o questionário IARC.
  2. Para Contrasync (B2B, sem conteúdo sensível): espere classificação Livre ou equivalente (sem violência, jogos de azar, conteúdo adulto).
  3. Salve e aplique a classificação.

4. Público-alvo e conteúdo

Painel → Política → Público-alvo e conteúdo

  • Público-alvo: 18+ (app corporativo B2B).
  • Não é app infantil.
  • Declarações de anúncios: Não contém anúncios (salvo se mudar no futuro).

5. Segurança dos dados (Data safety)

Painel → Política → Segurança dos dados

Preencha com base no que o app coleta:

DadoColetado?Compartilhado?Obrigatório?Finalidade
Nome, e-mail, CPF (perfil)SimNão (exceto processadores)Sim (conta)Funcionalidade da conta
Localização aproximada/precisaSimNãoNão (opt-in)Lançamento de horas
Fotos (câmera/QR)Sim (frame da câmera)NãoNãoLogin QR
Identificadores do dispositivoSimNãoSimPush notifications, sessão
Arquivos e documentosSimNãoDepende do fluxoUpload de compliance/contratos
Logs de diagnósticoSim (interno)NãoNãoEstabilidade

Marque:

  • Dados criptografados em trânsito (HTTPS).
  • Usuário pode solicitar exclusão (fluxo de exclusão de conta/empresa na plataforma).
  • Política de privacidade vinculada.

6. Acesso ao app (revisão Google)

Painel → Política → Acesso ao app

O app não permite login livre — exige QR code do painel web ou master key.

  1. Selecione "Todo ou parte do app é restrito".
  2. Em Instruções de acesso, informe:
O app Contrasync é complementar ao painel web (contrasync.com).

Para acessar:
1. Abra o app.
2. Na tela de login, cole a chave de acesso fornecida abaixo
   (campo "Código" / QR).
3. A sessão será criada automaticamente.

Chave de acesso para revisão:
[INSERIR MASTER_KEY DE PRODUÇÃO — ver seção "Credenciais para revisão"]

Conta de teste associada: usuário e empresa de demonstração pré-configurados
no backend. Não é necessário painel web ativo para login com a master key.

Funcionalidades principais após login:
- Lista de contratos e workflows
- Monitoramento de horas
- Compliance e documentos
- Notificações push
  1. Se a master key expirar ou for rotacionada, atualize este campo antes de cada nova submissão.

Documentação de negócio: app-qr-login.

7. Declaração de permissões sensíveis

Painel → Política → Permissões sensíveis do app

Se solicitado para ACCESS_FINE_LOCATION:

  • Justificativa: registro de localização no lançamento de horas do prestador.
  • Vídeo demo opcional (30–60 s mostrando o fluxo de horas).

Para CAMERA:

  • Justificativa: leitura de QR code para autenticação com o painel web.

8. Enviar o AAB

Painel → Testar e publicar → Produção (ou Teste interno na primeira validação)

Opção A — Upload manual (você já tem o .aab)

  1. Criar nova versão → faixa Produção (ou Teste interno para validar primeiro).
  2. Fazer upload do arquivo .aab.
  3. Preencha Notas da versão (o que mudou — ex.: "Versão inicial").
  4. Revise App bundle explorer (versão, permissões, tamanho).

Opção B — EAS Submit

bash
cd contrasync-reactnative-app
eas submit --platform android --path /caminho/para/app.aab --profile production

Requer Service Account configurada no EAS (ver eas-pipeline).

9. Países e preço

Painel → Crescer → Presença na loja → Países/regiões

  • Selecione Brasil (mínimo) e demais países desejados.
  • Preço: Gratuito.

10. Enviar para revisão

  1. Verifique que todas as seções obrigatórias estão com ✓ verde.
  2. Revisar versãoIniciar lançamento para produção (ou teste interno).
  3. Tempo médio de revisão: algumas horas a 7 dias (primeira submissão pode demorar mais).

11. Após aprovação

  1. Copie a URL pública da Play Store (formato: https://play.google.com/store/apps/details?id=com.contrasync).
  2. Registre no backend (seção "Backend e URLs de loja" abaixo).

App Store Connect (Apple)

1. Pré-requisitos Apple

  1. https://developer.apple.com/account — PLA aceito, membership ativo.
  2. https://appstoreconnect.apple.comBusiness → Agreements, Tax, and Banking — tudo verde.
  3. Certificados: se o .ipa já foi gerado via EAS, certificados já existem no EAS. Para upload manual, confirme que o .ipa está assinado para App Store.

2. Criar o app (primeira vez)

  1. Apps+Novo app.
  2. Plataformas: iOS (e iPadOS se quiser — app declara supportsTablet).
  3. Nome: Contrasync.
  4. Idioma principal: Português (Brasil).
  5. Bundle ID: com.contrasync (deve existir em Certificates, Identifiers & Profiles → Identifiers).
  6. SKU: ex. contrasync-ios-001 (identificador interno, imutável).
  7. Acesso total ou limitado: Acesso total (salvo se usar TestFlight restrito).

3. Informações do app (App Information)

CampoValor
NomeContrasync
SubtítuloAté 30 caracteres. Ex.: "Gestão de prestadores PJ"
Categoria primáriaProdutividade ou Negócios
Categoria secundáriaNegócios ou Produtividade
URL de suportehttps://contrasync.com ou página de suporte
URL de marketinghttps://contrasync.com (opcional)
Política de privacidadehttps://contrasync.com/privacy-policy
Direitos de conteúdoMarque conforme possui os direitos

4. Preços e disponibilidade

  • Preço: Gratuito (Tier 0).
  • Disponibilidade: Brasil + países desejados.

5. Privacidade do app (App Privacy)

App Privacy → Get Started

Declare tipos de dados coletados (espelhe a tabela Data Safety do Google):

Categoria AppleDadosVinculado ao usuário?Rastreamento?
Informações de contatoNome, e-mail, telefoneSimNão
IdentificadoresID do usuário, ID do dispositivoSimNão
LocalizaçãoLocalização precisaSimNão
Conteúdo do usuárioDocumentos, fotos enviadasSimNão
DiagnósticoDados de crashPode ser não vinculadoNão

Finalidade: Funcionalidade do app, Análise (se aplicável).

Tracking: responda Não — o app não faz tracking cross-app para ads.

6. Classificação etária

Questionário App Store → espere 4+ ou 12+ (app corporativo sem conteúdo adulto).

7. Versão 1.0 — metadata da loja

Na aba App Store da versão:

CampoOrientação
Screenshots iPhone 6.7"Obrigatório (iPhone 15 Pro Max). Mín. 1, recomendado 3–5
Screenshots iPhone 6.5"Obrigatório se suportar
Screenshots iPad 12.9"Obrigatório se supportsTablet: true
Texto promocionalOpcional, 170 caracteres
DescriçãoAté 4000 caracteres
Palavras-chaveAté 100 caracteres, separadas por vírgula
URL de suporteObrigatório
URL de marketingOpcional
Versão1.0.0 (deve bater com o binário)
CopyrightEx.: 2026 Contrasync

8. Informações de revisão (Review Notes)

App Review Information

CampoValor
Informações de contatoNome, telefone, e-mail de quem responde à Apple
NotasVer texto abaixo
AnexoOpcional — screenshot do fluxo de login

Texto sugerido para Notas:

Contrasync é o app mobile complementar à plataforma web contrasync.com,
focada em gestão de prestadores de serviço (PJ), horas, compliance e contratos.

LOGIN:
O app não possui cadastro próprio. O usuário autentica com:
(a) QR code gerado no painel web logado, ou
(b) chave de acesso fornecida abaixo para revisão.

Chave de acesso para revisão:
[INSERIR MASTER_KEY DE PRODUÇÃO]

Cole a chave no campo de código na tela inicial do app.

PERMISSÕES:
- Câmera: escanear QR code de login
- Localização (when in use): registrar posição no lançamento de horas
- Notificações: alertas operacionais

CRIPTOGRAFIA:
O app usa apenas HTTPS/TLS padrão (ITSAppUsesNonExemptEncryption = false).

9. Enviar o IPA

Opção A — Transporter (upload manual)

  1. Instale Apple Transporter (Mac) ou use xcrun altool / iTMSTransporter.
  2. Faça login com Apple ID do time de desenvolvimento.
  3. Arraste o .ipaDeliver.
  4. Aguarde processamento (5–30 min). Erros comuns: assinatura inválida, bundle ID divergente, versão/build duplicada.

Opção B — EAS Submit

bash
cd contrasync-reactnative-app
eas submit --platform ios --path /caminho/para/app.ipa --profile production

Requer App Store Connect API Key no EAS (ver eas-pipeline).

10. Selecionar build e enviar

  1. Após processamento, o build aparece em TestFlight e na versão da App Store.
  2. Na versão 1.0.0, seção Build+ → selecione o build enviado.
  3. Preencha Export Compliance: Não usa criptografia não isenta (já declarado no Info.plist).
  4. Adicionar para revisãoEnviar para análise.

11. TestFlight (recomendado antes da produção)

  1. TestFlight → build processado → adicionar testadores internos.
  2. Valide login (master key), push, câmera, localização.
  3. Quando estável, promova a mesma versão para App Store.

12. Após aprovação

  1. Lançar esta versão (manual ou automático após aprovação).
  2. URL pública do app: https://apps.apple.com/br/app/contrasync/id6782732793.
  3. Registre no backend (próxima seção).

Assets visuais

Ícones (já no repositório)

AssetCaminhoUso
Ícone principalassets/images/icon.pngiOS 1024×1024, base
Adaptive foregroundassets/images/android-icon-foreground.pngAndroid
Adaptive backgroundassets/images/android-icon-background.pngAndroid
Monochromeassets/images/android-icon-monochrome.pngAndroid 13+ / notificações
Splashassets/images/splash-icon.pngNão vai para listing

Screenshots recomendados (mínimo 3 telas)

Capture no device ou simulador com dados realistas:

  1. Login / QR — tela inicial
  2. Home / Contratos — lista principal
  3. Monitoramento / Horas — diferencial do produto
  4. Compliance ou Prestadores — segundo módulo forte
  5. Detalhe de contrato — opcional

Resoluções de referência:

PlataformaTamanho
iPhone 6.7"1290 × 2796 px
iPhone 6.5"1284 × 2778 px
iPad 12.9"2048 × 2732 px
Android phone1080 × 1920 px mínimo

Dica: use frames do Figma ou ferramentas como screenshots.pro para apresentação profissional.


Backend e URLs de loja

Após publicação, configure o backend para o modal de atualização do app.

1. URLs das lojas (storeUrl)

Endpoint: GET /app/versions — campo storeUrl por plataforma.

Registre na tabela app_versions (ou painel admin, se existir):

platformstoreUrl
ioshttps://apps.apple.com/br/app/contrasync/id6782732793
androidhttps://play.google.com/store/apps/details?id=com.contrasync

Documentação: business/app-versions, api/app-versions.

2. Versão inicial no backend

Crie registro para cada plataforma:

json
{
  "version": "1.0.0",
  "platform": "ios",
  "type": "release",
  "delivery": "store",
  "forceUpdate": false,
  "title": "Contrasync disponível na App Store",
  "description": "Baixe a versão mais recente na loja.",
  "storeUrl": "https://apps.apple.com/br/app/contrasync/id6782732793",
  "minSupportedVersion": "1.0.0",
  "launchAt": "2026-06-21T12:00:00.000Z"
}

Repita para android com a URL da Play Store.

3. Master key para revisão de loja

Variável no backend (nome exato conforme deploy): chave administrativa trocada por sessão em POST /app/exchange-token.

  • Usada por revisores Google/Apple e QA interno.
  • Deve apontar para usuário/empresa de demonstração com dados realistas.
  • Rotacionar após publicação se a chave foi exposta nas notas de revisão.

Documentação: authentication, app-qr-login.

4. API de produção no build

O app lê EXPO_PUBLIC_API_URL em build time (config/api.ts).

Confirme que o .ipa/.aab foram compilados com a URL de produção, não ngrok. Para rebuild:

bash
EXPO_PUBLIC_API_URL=https://[URL-PRODUCAO-API] eas build --platform all --profile production

Firebase e push notifications

ItemStatus no projeto
google-services.jsonPresente, package com.contrasync
Expo Push (expo-notifications)Usa projectId do EAS
FCM / APNsConfigurados via EAS credentials no build

Para iOS em produção, o EAS configura APNs key automaticamente no primeiro build iOS. Se push falhar pós-publicação:

  1. Verifique certificado APNs no EAS: eas credentials → iOS.
  2. Confirme permissão de notificação no device.
  3. Teste token via Expo push tool.

Automação futura (EAS + CI)

Depois do primeiro envio manual, configure automação conforme eas-pipeline:

ItemOnde configurar
EXPO_TOKENGitHub Secrets
Android Service Account JSONEAS credentials
App Store Connect API Key (.p8)EAS credentials
Track Androideas.json → hoje internal; mudar para production quando estável

Comando manual equivalente ao CI:

bash
eas build --platform all --profile production --auto-submit

Submit de binário local (sem rebuild):

bash
eas submit --platform ios --path ./app.ipa --profile production
eas submit --platform android --path ./app.aab --profile production

Checklist pós-publicação

  • [ ] URLs storeUrl registradas no backend (iOS + Android).
  • [ ] Registro app_versions para 1.0.0 em ambas plataformas.
  • [ ] Master key de revisão rotacionada (se exposta).
  • [ ] TestFlight / teste interno validado por QA.
  • [ ] Push notifications testadas em produção.
  • [ ] Login QR testado com painel web de produção.
  • [ ] Credenciais EAS Submit configuradas para releases futuras.
  • [ ] eas.json track Android ajustado (internalproduction quando pronto).
  • [ ] Site contrasync.com menciona links das lojas (marketing).

Troubleshooting

Google Play: "You need to upload an APK or Android App Bundle"

Crie uma versão na faixa correta (Produção ou Teste interno) e faça upload do .aab assinado.

Google Play: rejeição por login

Forneça master key válida em Acesso ao app e repita submissão. Confirme que POST /app/exchange-token responde 200 em produção.

Apple: build não aparece na versão

Aguarde processamento (até 30 min). Verifique e-mail de "Invalid Binary" da Apple.

Apple: Missing Compliance

Na versão, responda export compliance: No (non-exempt encryption).

Apple: Guideline 2.1 — App Completeness

Inclua credenciais funcionais nas notas de revisão. Teste a master key antes de enviar.

Apple: 403 PLA / Access forbidden

Account Holder deve aceitar Program License Agreement em https://developer.apple.com/account. Detalhes: eas-pipeline.

Versão/build duplicada

Incremente versionCode (Android) ou buildNumber (iOS). Com EAS, autoIncrement: true no perfil production faz isso automaticamente.

Keystore Android perdido

Impossível atualizar o app existente na Play Store. Contate Google support em casos extremos; sempre faça backup do keystore do EAS: eas credentials → Android → download keystore.


Documentos relacionados