Missing Compliance a TestFlight: com solucionar-ho
Per Mehdi Azizi
Publicat el , 9 min
Missing Compliance vol dir que Apple espera la teva declaració de xifratge. Desbloqueja el build i configura la clau perquè no torni.
Missing Compliance no és un error: és un build que espera la teva resposta sobre el xifratge. Mentre no responguis, el build queda bloquejat per als teus testers. Per a aquest build, respons les preguntes a la pestanya TestFlight d'App Store Connect. Per als següents, poses la clau ITSAppUsesNonExemptEncryption al teu Info.plist, o ios.config.usesNonExemptEncryption al teu app.json amb Expo, i l'estat ja no torna.
Les meves apps iOS estan fetes amb Expo. A l'app.json de Solys, la clau val false, posada dues vegades: a ios.config i a ios.infoPlist. Aquesta guia segueix les pàgines d'Apple sobre els estats de build i sobre la conformitat d'exportació dels builds beta, rellegides el 6 de novembre de 2026.
Què vol dir Missing Compliance
La llista d'estats de build d'Apple ho defineix en una frase: falta la documentació de conformitat d'exportació, i s'espera una acció per part teva. Apple el mostra en groc, el color d'un procés en curs que depèn de tu o d'Apple, i la seva descripció precisa que s'espera una acció per part teva.
Per què Apple fa la pregunta? La pàgina sobre les normes d'exportació del xifratge ho explica: quan envies un build a TestFlight o a l'App Store, l'envies a un servidor dels Estats Units. Si la teva app es distribueix fora dels Estats Units i el Canadà, queda subjecta al dret d'exportació nord-americà, sigui quin sigui el país de la teva empresa. I tan bon punt una app utilitza, conté o integra xifratge, Apple considera que es tracta d'una exportació de programari de xifratge.
Resultat: a cada nova versió, App Store Connect et fa les preguntes de conformitat, tret que el teu Info.plist ja les respongui. Per això un primer build d'Expo arriba gairebé sempre en Missing Compliance.
Desbloquejar el build que espera
Els passos vénen de la pàgina d'Apple sobre la conformitat d'exportació dels builds beta. Necessites el rol Account Holder, Admin o App Manager.
- A Apps, obre la teva app i després la pestanya TestFlight.
- A la barra lateral, sota Builds, tria la plataforma.
- A la columna Build, fes clic a la icona o al número del build afectat.
- Fes clic a Provide Export Compliance Information i respon les preguntes.
- Si Apple et demana documentació, fes clic a Go to App Encryption Page per enviar-la. Si no, fes clic a Save.
Apple també descriu la drecera: al costat del build, l'enllaç Manage obre les mateixes preguntes, i Choose File permet adjuntar una documentació ja aprovada. Un cop desat, el build passa a Ready to Submit, o directament a Testing si va a un grup intern. Ready to Test només arriba després de la revisió beta dels testers externs.
L'enllaç Manage no es pot clicar? Comprova primer el teu rol a l'equip: Apple reserva la resposta als rols Account Holder, Admin i App Manager, un compte Developer o Marketing no pot respondre. Apple no documenta cap altra causa. Si el build s'acaba d'enviar, espera el correu de fi de processament, detallat a la guia sobre el número de build i la versió, i després recarrega la pàgina.
No respondre mai més: la clau al teu projecte
Apple ho diu a la pàgina dels builds beta: pots indicar a l'Info.plist que la teva app no utilitza xifratge, o que n'està exempta, i ja no has de respondre a cada enviament. La clau es diu ITSAppUsesNonExemptEncryption. Xcode la mostra amb el nom App Uses Non-Exempt Encryption.
| La teva eina | Fitxer | On | Valor |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo, altra via | app.json | expo.ios.infoPlist | false |
| React Native pur | Info.plist | App Uses Non-Exempt Encryption | NO |
| Xcode, Swift | Info.plist | App Uses Non-Exempt Encryption | NO |
Amb Expo, la clau es diu usesNonExemptEncryption, i la referència de configuració precisa que escriu la clau d'Apple a l'Info.plist del build, i que ios.config només serveix per al build: no apareix al manifest de producció.
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Amb Expo, ios.infoPlist també accepta la clau amb el seu nom d'Apple, amb el mateix valor: és la segona línia de l'app.json de Solys. En un projecte natiu, la mateixa declaració cap en una línia de l'Info.plist: la clau App Uses Non-Exempt Encryption, que és el nom que mostra Xcode, amb el valor NO. El valor és un booleà, no una cadena.
La clau té efecte al següent build. El build ja enviat continua en Missing Compliance mentre no hagis respost a App Store Connect: les dues accions no se substitueixen, es complementen.
false o true: com decidir
Apple defineix el valor NO així: la teva app, biblioteques de tercers incloses, no utilitza cap xifratge, o només un xifratge exempt de les obligacions de documentació. Si no, és YES.
El que en general està exempt, segons la pàgina sobre les normes d'exportació: el xifratge integrat al sistema, com les connexions HTTPS per URLSession. El que no ho està: un xifratge propietari, que has escrit o incorporat tu. La visió general de la conformitat d'exportació afegeix un recordatori important: ets tu el responsable de la interpretació, i de les seves conseqüències, si reivindiques una exempció per error.
Per a una app d'Expo que crida una API en HTTPS, desa preferències i ven una subscripció, false és la resposta habitual. Per a una app que xifra ella mateixa missatges, fitxers o una caixa forta, la resposta és true, i Apple espera documentació.
No posis
falseper reflex. Revisa les teves dependències: una biblioteca de xifratge d'extrem a extrem o un emmagatzematge xifrat fet a mà et fa passar al costat de la documentació.
Si la teva app utilitza un xifratge no exempt
La pàgina sobre la documentació de xifratge descriu el circuit. A App Information, al costat d'App Encryption Documentation, el botó d'afegir obre les preguntes, després Choose File per al document i després Save. Apple demana haver omplert abans la descripció de l'app i configurat la seva disponibilitat, per jutjar si la documentació és suficient. Apunta a uns dos dies laborables quan l'expedient és complet.
Un cop aprovada la documentació, Apple et dona un valor per posar a la clau ITSEncryptionExportComplianceCode del teu Info.plist. Amb ell, s'han acabat les preguntes a cada enviament. Durant la revisió, el teu build mostra Waiting for Export Compliance Review o In Compliance Review: no s'espera cap acció per part teva.
Dos punts que assenyala Apple, l'un a la pàgina de les normes d'exportació, l'altre a la visió general de la conformitat:
- Fins i tot amb un xifratge exempt, se't pot exigir un informe anual d'autoclassificació davant el govern dels Estats Units. No cal si utilitzes un xifratge no exempt i has proporcionat la documentació a Apple.
- França també controla la importació i l'exportació de les apps de xifratge. La visió general d'Apple cita l'emmagatzematge segur, les comunicacions segures i els antivirus com a àmbits afectats, amb exempcions per a les apps bancàries i mèdiques, i remet a l'ANSSI.
Què passa després a TestFlight
El build desbloquejat segueix la vida normal d'un build de TestFlight, descrita a la guia TestFlight per provar la teva app d'iPhone: testers interns de seguida, testers externs després de la revisió beta, i caducitat al cap de 90 dies, segons la llista d'estats de build. Les altres aturades possibles d'un enviament d'Expo, com un número de build ja utilitzat o un fitxer rebutjat, són a els errors d'enviament d'EAS a App Store Connect, i la cadena completa a publicar una app d'Expo a l'App Store amb EAS.
L'iOS & Android Kit conté el meu codi de partida d'Expo, amb aquesta clau ja posada, i el recorregut que porta del primer build a la fitxa de l'App Store. Si vols saber què bloqueja encara la teva publicació, el diagnòstic gratuït et respon en poques preguntes i t'envia la meva checklist antirebuig d'Apple. Els passos complets són a publicar una aplicació a l'App Store.
Preguntes freqüents
Què vol dir Missing Compliance a TestFlight?
El build espera la teva declaració de conformitat d'exportació, és a dir, la teva resposta sobre l'ús del xifratge. Apple el classifica entre els estats que demanen una acció per part teva. El build no arriba als testers mentre no hagis respost.
Per què l'enllaç Manage de Missing Compliance no es pot clicar?
Comprova el teu rol: Apple reserva la resposta als rols Account Holder, Admin i App Manager. Apple no documenta cap altra causa. Si el build acaba d'arribar, recarrega la pàgina després del correu de fi de processament.
La meva app només utilitza HTTPS, he de respondre que sí al xifratge?
Apple indica que el xifratge integrat al sistema, com les connexions HTTPS per URLSession, en general està exempt de les obligacions de documentació. En aquest cas, la clau ITSAppUsesNonExemptEncryption val NO, sempre que cap biblioteca de tercers no afegeixi un xifratge propietari.
Cal respondre les preguntes de xifratge a cada build?
Sí, mentre el teu Info.plist no contingui la clau ITSAppUsesNonExemptEncryption. Amb ella, App Store Connect ja no fa les preguntes. Amb Expo, es configura a app.json amb ios.config.usesNonExemptEncryption.
On es declara el xifratge a app.json amb Expo?
A app.json, sota expo.ios.config, amb "usesNonExemptEncryption": false si la teva app no utilitza cap xifratge no exempt. EAS Build escriu la clau a l'Info.plist del build. Té efecte al següent build, no al que ja s'ha enviat.
Missing Compliance també bloqueja l'enviament a l'App Store?
Les preguntes de conformitat d'exportació es fan per a tota nova versió, beta o App Store. Un build que no les ha respost no es pot distribuir. La clau a l'Info.plist resol els dos casos alhora.
He de fer un informe anual d'autoclassificació?
Apple assenyala que l'ús d'un xifratge exempt pot igualment exigir un informe anual d'autoclassificació davant el govern dels Estats Units, i remet al procediment oficial. Si la teva app utilitza un xifratge no exempt i has proporcionat la documentació a Apple, aquest informe no cal.

