Missing Compliance no TestFlight: como resolver de vez
Por Mehdi Azizi
Publicado em , 9 min
Missing Compliance significa que a Apple espera sua declaração de criptografia. Responda no App Store Connect e defina a chave no projeto.
Missing Compliance não é um erro: é um build esperando sua resposta sobre criptografia. Enquanto você não responder, o build fica bloqueado para os seus testadores. Para esse build, você responde às perguntas na aba TestFlight do App Store Connect. Para os próximos, você coloca a chave ITSAppUsesNonExemptEncryption no seu Info.plist, ou ios.config.usesNonExemptEncryption no seu app.json com Expo, e o status não volta mais.
Meus apps iOS são feitos com Expo. No app.json do Solys, a chave está como false, definida duas vezes: em ios.config e em ios.infoPlist. Este guia segue as páginas da Apple sobre os status de build e sobre a conformidade de exportação dos builds beta, relidas em 6 de novembro de 2026.
O que significa Missing Compliance
A lista de status de build da Apple define isso em uma frase: falta a documentação de conformidade de exportação, e uma ação é esperada da sua parte. A Apple mostra o status em amarelo, a cor de um processo em andamento que depende de você ou da Apple, e a descrição dele diz que uma ação é esperada da sua parte.
Por que a Apple faz essa pergunta? A página sobre as regras de exportação de criptografia explica: quando você envia um build para o TestFlight ou para a App Store, você o envia para um servidor nos Estados Unidos. Se o seu app é distribuído fora dos Estados Unidos e do Canadá, ele está sujeito à lei americana de exportação, seja qual for o país da sua empresa. E assim que um app usa, contém ou incorpora criptografia, a Apple considera que se trata de uma exportação de software de criptografia.
Resultado: a cada nova versão, o App Store Connect te faz as perguntas de conformidade, a não ser que o seu Info.plist já responda a elas. É por isso que um primeiro build Expo quase sempre chega em Missing Compliance.
Desbloquear o build que está esperando
Os passos vêm da página da Apple sobre a conformidade de exportação dos builds beta. Você precisa da função Account Holder, Admin ou App Manager.
- Em Apps, abra o seu app e depois a aba TestFlight.
- Na barra lateral, em Builds, escolha a plataforma.
- Na coluna Build, clique no ícone ou no número do build em questão.
- Clique em Provide Export Compliance Information e responda às perguntas.
- Se a Apple pedir uma documentação, clique em Go to App Encryption Page para enviá-la. Senão, clique em Save.
A Apple também descreve o atalho: ao lado do build, o link Manage abre as mesmas perguntas, e Choose File permite anexar uma documentação já aprovada. Depois de salvar, o build passa para Ready to Submit, ou direto para Testing se for para um grupo interno. Ready to Test só aparece depois da revisão beta dos testadores externos.
O link Manage não está clicável? Primeiro confira sua função na equipe: a Apple reserva a resposta às funções Account Holder, Admin e App Manager, e uma conta Developer ou Marketing não pode responder. A Apple não documenta outra causa. Se o build acabou de ser enviado, espere o e-mail de fim de processamento, explicado no guia sobre o número de build e a versão, e recarregue a página.
Nunca mais responder: a chave no seu projeto
A Apple diz na página dos builds beta: você pode indicar no Info.plist que o seu app não usa criptografia, ou que está isento, e não precisa mais responder a cada envio. A chave se chama ITSAppUsesNonExemptEncryption. O Xcode a mostra com o nome App Uses Non-Exempt Encryption.
| Sua ferramenta | Arquivo | Onde | Valor |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo, outro caminho | app.json | expo.ios.infoPlist | false |
| React Native puro | Info.plist | App Uses Non-Exempt Encryption | NO |
| Xcode, Swift | Info.plist | App Uses Non-Exempt Encryption | NO |
Com Expo, a chave se chama usesNonExemptEncryption, e a referência de configuração explica que ela escreve a chave da Apple no Info.plist do build, e que ios.config serve só para o build: ele não aparece no manifesto de produção.
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Com Expo, ios.infoPlist também aceita a chave com o nome da Apple, com o mesmo valor: é a segunda linha do app.json do Solys. Num projeto nativo, a mesma declaração cabe em uma linha do Info.plist: a chave App Uses Non-Exempt Encryption, que é o nome que o Xcode mostra, com o valor NO. O valor é um booleano, não uma string.
A chave vale a partir do próximo build. O build já enviado continua em Missing Compliance enquanto você não responder no App Store Connect: as duas ações não se substituem, elas se complementam.
false ou true: como decidir
A Apple define o valor NO assim: o seu app, incluindo bibliotecas de terceiros, não usa nenhuma criptografia, ou usa apenas criptografia isenta das obrigações de documentação. Caso contrário, é YES.
O que costuma ser isento, segundo a página sobre as regras de exportação: a criptografia embutida no sistema, como as conexões HTTPS via URLSession. O que não é: uma criptografia proprietária, que você escreveu ou incluiu no app. A visão geral da conformidade de exportação traz um lembrete importante: você é o responsável pela interpretação, e pelas consequências, se alegar uma isenção indevidamente.
Para um app Expo que chama uma API em HTTPS, guarda preferências e vende uma assinatura, false é a resposta comum. Para um app que criptografa por conta própria mensagens, arquivos ou um cofre, a resposta é true, e a Apple espera uma documentação.
Não coloque
falseno automático. Revise suas dependências: uma biblioteca de criptografia de ponta a ponta ou um armazenamento criptografado caseiro te joga para o lado da documentação.
Se o seu app usa criptografia não isenta
A página sobre a documentação de criptografia descreve o processo. Em App Information, ao lado de App Encryption Documentation, o botão de adicionar abre as perguntas, depois Choose File para o documento, depois Save. A Apple pede que você tenha preenchido a descrição do app e configurado a disponibilidade antes, para avaliar se a documentação é suficiente. O prazo previsto é de cerca de dois dias úteis quando o dossiê está completo.
Depois que a documentação é aprovada, a Apple fornece um valor para colocar na chave ITSEncryptionExportComplianceCode do seu Info.plist. Com ele, acabam as perguntas a cada envio. Durante a análise, seu build mostra Waiting for Export Compliance Review ou In Compliance Review: nenhuma ação é esperada de você.
Dois pontos apontados pela Apple, um na página das regras de exportação, o outro na visão geral da conformidade:
- Mesmo com criptografia isenta, pode ser exigido um relatório anual de autoclassificação ao governo americano. Ele não é exigido se você usa criptografia não isenta e forneceu a documentação à Apple.
- A França também controla a importação e a exportação de apps de criptografia. A visão geral da Apple cita o armazenamento seguro, as comunicações seguras e os antivírus como áreas afetadas, com isenções para apps bancários e médicos, e remete à ANSSI.
O que acontece depois no TestFlight
O build desbloqueado segue a vida normal de um build TestFlight, descrita no guia TestFlight para testar seu app de iPhone: testadores internos na hora, testadores externos depois da revisão beta, e expiração após 90 dias, segundo a lista de status de build. Os outros bloqueios possíveis de um envio Expo, como um número de build já usado ou um arquivo recusado, estão em os erros de envio do EAS para o App Store Connect, e o fluxo completo em publicar um app Expo na App Store com EAS.
O iOS & Android Kit traz meu código inicial Expo, com essa chave já definida, e o caminho do primeiro build até a página na App Store. Se você quer saber o que ainda trava a sua publicação, o diagnóstico gratuito responde em poucas perguntas e te envia meu checklist anti-rejeição da Apple. Os passos completos estão em publicar um aplicativo na App Store.
Perguntas frequentes
O que significa Missing Compliance no TestFlight?
O build está esperando sua declaração de conformidade de exportação, ou seja, sua resposta sobre o uso de criptografia. A Apple o classifica entre os status que pedem uma ação sua. O build não vai para os testadores enquanto você não responder.
Por que o link Manage do Missing Compliance não está clicável?
Confira sua função: a Apple reserva a resposta às funções Account Holder, Admin e App Manager. A Apple não documenta outra causa. Se o build acabou de chegar, recarregue a página depois do e-mail de fim de processamento.
Meu app só usa HTTPS, preciso responder sim sobre criptografia?
A Apple indica que a criptografia embutida no sistema, como as conexões HTTPS via URLSession, costuma ser isenta das obrigações de documentação. Nesse caso, a chave ITSAppUsesNonExemptEncryption fica como NO, desde que nenhuma biblioteca de terceiros adicione criptografia proprietária.
Preciso responder às perguntas de criptografia a cada build?
Sim, enquanto o seu Info.plist não tiver a chave ITSAppUsesNonExemptEncryption. Com ela, o App Store Connect não faz mais as perguntas. Com Expo, ela é definida no app.json por ios.config.usesNonExemptEncryption.
Onde declarar a criptografia no app.json com Expo?
No app.json, em expo.ios.config, com "usesNonExemptEncryption": false se o seu app não usa nenhuma criptografia não isenta. O EAS Build escreve a chave no Info.plist do build. Ela vale a partir do próximo build, não para o que já foi enviado.
Missing Compliance também bloqueia o envio para a App Store?
As perguntas de conformidade de exportação aparecem para toda nova versão, beta ou App Store. Um build sem resposta não pode ser distribuído. A chave no Info.plist resolve os dois casos de uma vez.
Preciso fazer um relatório anual de autoclassificação?
A Apple avisa que o uso de criptografia isenta ainda pode exigir um relatório anual de autoclassificação ao governo americano, e remete ao procedimento oficial. Se o seu app usa criptografia não isenta e você forneceu a documentação à Apple, esse relatório não é necessário.

