Missing Compliance TestFlight: cara membetulkannya
Oleh Mehdi Azizi
Diterbitkan pada , 9 min
Missing Compliance bermaksud Apple menunggu pengisytiharan penyulitan anda. Jawab di App Store Connect, kemudian tetapkan kunci dalam projek.
Missing Compliance bukan ralat: ia ialah build yang menunggu jawapan anda tentang penyulitan. Selagi anda belum menjawab, build itu kekal tersekat untuk penguji anda. Untuk build ini, anda jawab soalan dalam tab TestFlight di App Store Connect. Untuk build seterusnya, anda letakkan kunci ITSAppUsesNonExemptEncryption dalam Info.plist anda, atau ios.config.usesNonExemptEncryption dalam app.json anda jika guna Expo, dan status itu tidak akan muncul lagi.
App iOS saya dibina dengan Expo. Dalam app.json Solys, kunci ini bernilai false, diletakkan dua kali: dalam ios.config dan dalam ios.infoPlist. Panduan ini mengikut halaman Apple tentang status build dan tentang pematuhan eksport untuk build beta, yang saya baca semula pada 6 November 2026.
Apa maksud Missing Compliance
Senarai status build Apple mentakrifkannya dalam satu ayat: dokumentasi pematuhan eksport tiada, dan tindakan diperlukan daripada anda. Apple memaparkannya dalam warna kuning, warna untuk proses yang sedang berjalan yang bergantung pada anda atau Apple, dan penerangannya menyatakan bahawa tindakan diperlukan daripada anda.
Kenapa Apple bertanya? Halaman tentang peraturan eksport penyulitan menjelaskannya: apabila anda menghantar build ke TestFlight atau App Store, anda menghantarnya ke pelayan di Amerika Syarikat. Jika app anda diedarkan di luar Amerika Syarikat dan Kanada, ia tertakluk pada undang-undang eksport Amerika, tidak kira di negara mana syarikat anda berada. Dan sebaik sahaja app menggunakan, mengandungi atau menyepadukan penyulitan, Apple menganggapnya sebagai eksport perisian penyulitan.
Hasilnya: untuk setiap versi baharu, App Store Connect akan bertanya soalan pematuhan, kecuali jika Info.plist anda sudah menjawabnya. Sebab itulah build Expo pertama hampir selalu tiba dalam status Missing Compliance.
Membuka sekatan build yang sedang menunggu
Langkah-langkah ini datang daripada halaman Apple tentang pematuhan eksport build beta. Anda perlukan peranan Account Holder, Admin atau App Manager.
- Dalam Apps, buka app anda, kemudian tab TestFlight.
- Dalam bar sisi, di bawah Builds, pilih platform.
- Dalam lajur Build, klik ikon atau nombor build berkenaan.
- Klik Provide Export Compliance Information, kemudian jawab soalan.
- Jika Apple meminta dokumentasi, klik Go to App Encryption Page untuk menghantarnya. Jika tidak, klik Save.
Apple juga menerangkan jalan pintas: di sebelah build, pautan Manage membuka soalan yang sama, dan Choose File membolehkan anda melampirkan dokumentasi yang sudah diluluskan. Setelah disimpan, build bertukar ke Ready to Submit, atau terus ke Testing jika ia dihantar kepada kumpulan dalaman. Ready to Test hanya muncul selepas semakan beta untuk penguji luaran.
Pautan Manage tidak boleh diklik? Semak dahulu peranan anda dalam pasukan: Apple hanya membenarkan peranan Account Holder, Admin dan App Manager menjawab, akaun Developer atau Marketing tidak boleh menjawab. Apple tidak mendokumentasikan sebab lain. Jika build baru sahaja dihantar, tunggu e-mel tamat pemprosesan, yang diterangkan dalam panduan tentang nombor build dan versi, kemudian muat semula halaman.
Tidak perlu menjawab lagi: kunci dalam projek anda
Apple menyatakannya di halaman build beta: anda boleh nyatakan dalam Info.plist bahawa app anda tidak menggunakan penyulitan, atau dikecualikan, dan anda tidak perlu menjawab lagi pada setiap penghantaran. Kunci ini bernama ITSAppUsesNonExemptEncryption. Xcode memaparkannya dengan nama App Uses Non-Exempt Encryption.
| Alat anda | Fail | Di mana | Nilai |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo, cara lain | app.json | expo.ios.infoPlist | false |
| React Native asas | Info.plist | App Uses Non-Exempt Encryption | NO |
| Xcode, Swift | Info.plist | App Uses Non-Exempt Encryption | NO |
Dengan Expo, kunci ini bernama usesNonExemptEncryption, dan rujukan konfigurasi menyatakan bahawa ia menulis kunci Apple ke dalam Info.plist build, dan ios.config hanya digunakan untuk build: ia tidak muncul dalam manifest produksi.
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Dengan Expo, ios.infoPlist juga menerima kunci ini dengan nama Apple, dengan nilai yang sama: itulah baris kedua dalam app.json Solys. Dalam projek native, pengisytiharan yang sama hanya satu baris dalam Info.plist: kunci App Uses Non-Exempt Encryption, iaitu nama yang dipaparkan Xcode, dengan nilai NO. Nilainya boolean, bukan string.
Kunci ini berkuat kuasa pada build seterusnya. Build yang sudah dihantar kekal dalam Missing Compliance selagi anda belum menjawab di App Store Connect: kedua-dua tindakan ini tidak menggantikan satu sama lain, ia saling melengkapi.
false atau true: cara membuat keputusan
Apple mentakrifkan nilai NO begini: app anda, termasuk pustaka pihak ketiga, tidak menggunakan sebarang penyulitan, atau hanya penyulitan yang dikecualikan daripada keperluan dokumentasi. Jika tidak, nilainya YES.
Apa yang biasanya dikecualikan, menurut halaman tentang peraturan eksport: penyulitan yang terbina dalam sistem, seperti sambungan HTTPS melalui URLSession. Apa yang tidak dikecualikan: penyulitan proprietari, yang anda tulis sendiri atau sertakan. Gambaran keseluruhan pematuhan eksport menambah peringatan penting: andalah yang bertanggungjawab atas tafsiran itu, dan akibatnya, jika anda menuntut pengecualian secara salah.
Untuk app Expo yang memanggil API melalui HTTPS, menyimpan tetapan dan menjual langganan, false ialah jawapan biasa. Untuk app yang menyulitkan sendiri mesej, fail atau peti simpanan, jawapannya true, dan Apple menunggu dokumentasi.
Jangan letak
falsesecara refleks. Semak semula dependency anda: pustaka penyulitan hujung ke hujung atau storan tersulit buatan sendiri akan membawa anda ke pihak yang memerlukan dokumentasi.
Jika app anda menggunakan penyulitan yang tidak dikecualikan
Halaman tentang dokumentasi penyulitan menerangkan prosesnya. Dalam App Information, di sebelah App Encryption Documentation, butang tambah membuka soalan, kemudian Choose File untuk dokumen, kemudian Save. Apple meminta anda mengisi penerangan app dan menetapkan ketersediaannya terlebih dahulu, supaya mereka boleh menilai sama ada dokumentasi itu mencukupi. Apple menyasarkan kira-kira dua hari bekerja apabila fail lengkap.
Setelah dokumentasi diluluskan, Apple memberikan nilai untuk diletakkan dalam kunci ITSEncryptionExportComplianceCode dalam Info.plist anda. Dengannya, tiada lagi soalan pada setiap penghantaran. Semasa semakan, build anda memaparkan Waiting for Export Compliance Review atau In Compliance Review: tiada tindakan diperlukan daripada anda.
Dua perkara yang ditekankan oleh Apple, satu di halaman peraturan eksport, satu lagi dalam gambaran keseluruhan pematuhan:
- Walaupun dengan penyulitan yang dikecualikan, laporan klasifikasi kendiri tahunan kepada kerajaan Amerika mungkin diperlukan. Ia tidak diperlukan jika anda menggunakan penyulitan yang tidak dikecualikan dan telah memberikan dokumentasi kepada Apple.
- Perancis juga mengawal import dan eksport app penyulitan. Gambaran keseluruhan Apple menyebut storan selamat, komunikasi selamat dan antivirus sebagai bidang yang terlibat, dengan pengecualian untuk app perbankan dan perubatan, dan merujuk kepada ANSSI.
Apa yang berlaku seterusnya dalam TestFlight
Build yang telah dibuka sekatannya mengikut kitaran biasa build TestFlight, yang diterangkan dalam panduan TestFlight untuk menguji app iPhone anda: penguji dalaman serta-merta, penguji luaran selepas semakan beta, dan tamat tempoh selepas 90 hari, menurut senarai status build. Halangan lain yang mungkin berlaku semasa penghantaran Expo, seperti nombor build yang sudah digunakan atau fail yang ditolak, ada dalam ralat penghantaran EAS ke App Store Connect, dan keseluruhan prosesnya dalam menerbitkan app Expo di App Store dengan EAS.
iOS & Android Kit mengandungi kod permulaan Expo saya, dengan kunci ini sudah ditetapkan, dan laluan dari build pertama hingga ke halaman App Store. Jika anda mahu tahu apa yang masih menyekat penerbitan anda, diagnostik percuma menjawabnya dalam beberapa soalan dan menghantar senarai semak anti-penolakan Apple saya. Langkah lengkap ada dalam menerbitkan aplikasi di App Store.
Soalan lazim
Apa maksud Missing Compliance di TestFlight?
Build itu menunggu pengisytiharan pematuhan eksport anda, iaitu jawapan anda tentang penggunaan penyulitan. Apple mengelaskannya antara status yang memerlukan tindakan daripada anda. Build tidak akan sampai kepada penguji selagi anda belum menjawab.
Kenapa pautan Manage untuk Missing Compliance tidak boleh diklik?
Semak peranan anda: Apple hanya membenarkan peranan Account Holder, Admin dan App Manager menjawab. Apple tidak mendokumentasikan sebab lain. Jika build baru tiba, muat semula halaman selepas e-mel tamat pemprosesan.
App saya hanya guna HTTPS, perlukah saya jawab ya untuk penyulitan?
Apple menyatakan bahawa penyulitan yang terbina dalam sistem, seperti sambungan HTTPS melalui URLSession, biasanya dikecualikan daripada keperluan dokumentasi. Dalam kes ini, kunci ITSAppUsesNonExemptEncryption bernilai NO, dengan syarat tiada pustaka pihak ketiga yang menambah penyulitan proprietari.
Perlukah saya menjawab soalan penyulitan untuk setiap build?
Ya, selagi Info.plist anda tidak mengandungi kunci ITSAppUsesNonExemptEncryption. Dengan kunci itu, App Store Connect tidak akan bertanya lagi. Dengan Expo, ia ditetapkan dalam app.json melalui ios.config.usesNonExemptEncryption.
Di mana hendak mengisytiharkan penyulitan dalam app.json dengan Expo?
Dalam app.json, di bawah expo.ios.config, dengan "usesNonExemptEncryption": false jika app anda tidak menggunakan sebarang penyulitan yang tidak dikecualikan. EAS Build menulis kunci itu ke dalam Info.plist build. Ia berkuat kuasa pada build seterusnya, bukan pada build yang sudah dihantar.
Adakah Missing Compliance juga menyekat penghantaran ke App Store?
Soalan pematuhan eksport ditanya untuk setiap versi baharu, sama ada beta atau App Store. Build yang belum menjawabnya tidak boleh diedarkan. Kunci dalam Info.plist menyelesaikan kedua-dua kes sekali gus.
Perlukah saya membuat laporan klasifikasi kendiri tahunan?
Apple menyatakan bahawa penggunaan penyulitan yang dikecualikan masih boleh mewajibkan laporan klasifikasi kendiri tahunan kepada kerajaan Amerika, dan merujuk kepada prosedur rasmi. Jika app anda menggunakan penyulitan yang tidak dikecualikan dan anda telah memberikan dokumentasi kepada Apple, laporan ini tidak diperlukan.

