TestFlight Missing Compliance hatası: kalıcı çözüm
Yazan: Mehdi Azizi
tarihinde yayınlandı, 9 dk.
Missing Compliance, Apple'ın şifreleme beyanını beklediği anlamına gelir. Build'i App Store Connect'te aç, sonra anahtarı ekleyip bir daha görme.
Missing Compliance bir hata değil: şifreleme konusunda cevabını bekleyen bir build. Cevap verene kadar build test kullanıcıların için kilitli kalır. Bu build için soruları App Store Connect'teki TestFlight sekmesinde cevaplarsın. Sonrakiler için Info.plist dosyana ITSAppUsesNonExemptEncryption anahtarını, Expo kullanıyorsan app.json'a ios.config.usesNonExemptEncryption ekle; bu durum bir daha gelmez.
iOS uygulamalarımı Expo ile yapıyorum. Solys'in app.json dosyasında bu anahtar false değerinde ve iki yerde tanımlı: ios.config ve ios.infoPlist içinde. Bu rehber Apple'ın build durumları ve beta build'lerin ihracat uyumluluğu sayfalarını takip ediyor, 6 Kasım 2026'da tekrar okundu.
Missing Compliance ne demek
Apple'ın build durumları listesi bunu tek cümleyle tanımlıyor: ihracat uyumluluğu belgeleri eksik ve senden bir işlem bekleniyor. Apple bunu sarı renkte gösteriyor; bu renk, sana ya da Apple'a bağlı, devam eden bir süreci ifade ediyor. Açıklamasında da senden bir işlem beklendiği belirtiliyor.
Apple bu soruyu neden soruyor? Şifreleme ihracat kurallarıyla ilgili sayfa bunu açıklıyor: TestFlight'a ya da App Store'a bir build gönderdiğinde, onu ABD'deki bir sunucuya göndermiş olursun. Uygulaman ABD ve Kanada dışında dağıtılıyorsa, şirketin hangi ülkede olursa olsun ABD ihracat hukukuna tabidir. Ve bir uygulama şifreleme kullandığı, içerdiği ya da entegre ettiği anda Apple bunu şifreleme yazılımı ihracatı olarak kabul eder.
Sonuç: her yeni sürümde App Store Connect sana uyumluluk sorularını sorar, Info.plist dosyan bunları zaten cevaplamıyorsa. İlk Expo build'inin neredeyse her zaman Missing Compliance ile gelmesinin sebebi bu.
Bekleyen build'in kilidini açmak
Adımlar Apple'ın beta build'lerin ihracat uyumluluğu sayfasından geliyor. Account Holder, Admin ya da App Manager rolüne sahip olman gerekiyor.
- Apps bölümünde uygulamanı aç, ardından TestFlight sekmesine geç.
- Kenar çubuğunda, Builds altında platformu seç.
- Build sütununda ilgili build'in simgesine ya da numarasına tıkla.
- Provide Export Compliance Information'a tıkla ve soruları cevapla.
- Apple senden belge isterse, göndermek için Go to App Encryption Page'e tıkla. Aksi halde Save'e tıkla.
Apple kısayolu da anlatıyor: build'in yanındaki Manage bağlantısı aynı soruları açar, Choose File ise önceden onaylanmış bir belgeyi eklemeni sağlar. Kaydettikten sonra build Ready to Submit durumuna geçer, dahili bir gruba gidiyorsa doğrudan Testing durumuna. Ready to Test ise ancak harici test kullanıcıları için yapılan beta incelemesinden sonra gelir.
Manage bağlantısı tıklanamıyor mu? Önce ekipteki rolünü kontrol et: Apple cevap verme yetkisini Account Holder, Admin ve App Manager rollerine ayırıyor, Developer ya da Marketing hesabı cevap veremez. Apple başka bir sebep belgelemiyor. Build az önce gönderildiyse, build numarası ve sürüm rehberinde anlatılan işlem tamamlandı e-postasını bekle, sonra sayfayı yenile.
Bir daha hiç cevaplamamak: projendeki anahtar
Apple bunu beta build'ler sayfasında söylüyor: uygulamanın şifreleme kullanmadığını ya da muaf olduğunu Info.plist'te belirtebilirsin ve artık her gönderimde cevap vermen gerekmez. Anahtarın adı ITSAppUsesNonExemptEncryption. Xcode bunu App Uses Non-Exempt Encryption adıyla gösteriyor.
| Aracın | Dosya | Nerede | Değer |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo, diğer yol | app.json | expo.ios.infoPlist | false |
| Saf React Native | Info.plist | App Uses Non-Exempt Encryption | NO |
| Xcode, Swift | Info.plist | App Uses Non-Exempt Encryption | NO |
Expo'da anahtarın adı usesNonExemptEncryption. Yapılandırma referansı, bunun Apple anahtarını build'in Info.plist dosyasına yazdığını ve ios.config'in yalnızca build için kullanıldığını belirtiyor: production manifest'inde görünmez.
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Expo'da ios.infoPlist de anahtarı Apple'daki adıyla, aynı değerle kabul ediyor: Solys'in app.json dosyasındaki ikinci satır bu. Native bir projede aynı beyan Info.plist'te tek satırdır: Xcode'un gösterdiği adla App Uses Non-Exempt Encryption anahtarı, değeri NO. Değer bir boolean, string değil.
Anahtar bir sonraki build'de etkili olur. Önceden gönderilmiş build, App Store Connect'te cevap verene kadar Missing Compliance'ta kalır: bu iki işlem birbirinin yerine geçmez, birbirini tamamlar.
false mı true mu: nasıl karar verilir
Apple NO değerini şöyle tanımlıyor: uygulaman, üçüncü taraf kütüphaneler dahil, hiç şifreleme kullanmıyor ya da yalnızca belge yükümlülüklerinden muaf şifreleme kullanıyor. Değilse YES.
İhracat kuralları sayfasına göre genellikle muaf olan: sisteme entegre şifreleme, örneğin URLSession ile yapılan HTTPS bağlantıları. Muaf olmayan: senin yazdığın ya da uygulamaya gömdüğün özel (proprietary) şifreleme. İhracat uyumluluğuna genel bakış önemli bir hatırlatma ekliyor: yorumdan sen sorumlusun, haksız yere muafiyet iddia edersen sonuçlarından da.
HTTPS üzerinden bir API çağıran, tercihleri saklayan ve abonelik satan bir Expo uygulaması için olağan cevap false. Mesajları, dosyaları ya da bir kasayı kendisi şifreleyen bir uygulama için cevap true, ve Apple belge bekler.
Refleksle
falseyazma. Bağımlılıklarını tekrar gözden geçir: uçtan uca şifreleme yapan bir kütüphane ya da kendi yazdığın şifreli bir depolama seni belge tarafına geçirir.
Uygulaman muaf olmayan şifreleme kullanıyorsa
Şifreleme belgeleri sayfası süreci anlatıyor. App Information'da, App Encryption Documentation'ın yanındaki ekleme butonu soruları açar, ardından belge için Choose File, sonra Save. Apple, belgenin yeterli olup olmadığına karar verebilmek için önceden uygulama açıklamasını doldurmuş ve uygunluğunu ayarlamış olmanı istiyor. Dosya eksiksizse yaklaşık iki iş günü hedefliyor.
Belge onaylandıktan sonra Apple, Info.plist'indeki ITSEncryptionExportComplianceCode anahtarına girmen için bir değer verir. Bununla artık her gönderimde soru gelmez. İnceleme sırasında build'in Waiting for Export Compliance Review ya da In Compliance Review gösterir: senden bir işlem beklenmez.
Apple'ın belirttiği iki nokta, biri ihracat kuralları sayfasında, diğeri uyumluluğa genel bakışta:
- Muaf şifreleme kullansan bile, ABD hükümetine yıllık bir öz sınıflandırma raporu (annual self-classification report) gerekebilir. Muaf olmayan şifreleme kullanıyor ve belgeyi Apple'a vermişsen gerekmez.
- Fransa da şifreleme uygulamalarının ithalat ve ihracatını denetliyor. Apple'ın genel bakışı ilgili alanlar olarak güvenli depolama, güvenli iletişim ve antivirüsleri sayıyor, bankacılık ve tıbbi uygulamalar için muafiyetler olduğunu belirtiyor ve ANSSI'ye yönlendiriyor.
Sonra TestFlight'ta ne olur
Kilidi açılan build, iPhone uygulamanı test etmek için TestFlight rehberinde anlatılan normal TestFlight build hayatını izler: dahili test kullanıcıları hemen, harici test kullanıcıları beta incelemesinden sonra, ve build durumları listesine göre 90 gün sonra süre dolumu. Bir Expo gönderiminin takılabileceği diğer noktalar, örneğin zaten kullanılmış bir build numarası ya da reddedilen bir dosya, EAS'tan App Store Connect'e gönderim hataları yazısında; tüm zincir ise EAS ile bir Expo uygulamasını App Store'da yayınlamak yazısında.
iOS & Android Kit, bu anahtarın zaten eklendiği Expo başlangıç kodumu ve ilk build'den App Store sayfasına kadar giden yolu içeriyor. Yayınını hâlâ neyin engellediğini öğrenmek istiyorsan, ücretsiz teşhis birkaç soruda cevap veriyor ve sana Apple reddine karşı kontrol listemi gönderiyor. Tüm adımlar App Store'da uygulama yayınlamak sayfasında.
Sık sorulan sorular
TestFlight'ta Missing Compliance ne demek?
Build, ihracat uyumluluğu beyanını, yani şifreleme kullanımı konusundaki cevabını bekliyor. Apple bunu senden işlem bekleyen durumlar arasında sınıflandırıyor. Cevap verene kadar build test kullanıcılarına gitmez.
Missing Compliance'taki Manage bağlantısı neden tıklanamıyor?
Rolünü kontrol et: Apple cevap verme yetkisini Account Holder, Admin ve App Manager rollerine ayırıyor. Apple başka bir sebep belgelemiyor. Build yeni geldiyse, işlem tamamlandı e-postasından sonra sayfayı yenile.
Uygulamam sadece HTTPS kullanıyor, şifrelemeye evet mi demeliyim?
Apple, URLSession ile yapılan HTTPS bağlantıları gibi sisteme entegre şifrelemenin genellikle belge yükümlülüklerinden muaf olduğunu belirtiyor. Bu durumda ITSAppUsesNonExemptEncryption anahtarı NO olur, yeter ki hiçbir üçüncü taraf kütüphane özel bir şifreleme eklemesin.
Şifreleme sorularını her build'de cevaplamak gerekiyor mu?
Evet, Info.plist dosyan ITSAppUsesNonExemptEncryption anahtarını içermediği sürece. Bu anahtarla App Store Connect artık soruları sormaz. Expo'da bu, app.json'da ios.config.usesNonExemptEncryption ile ayarlanır.
Expo'da şifrelemeyi app.json'da nerede beyan etmeliyim?
app.json'da, expo.ios.config altında, uygulaman muaf olmayan hiçbir şifreleme kullanmıyorsa "usesNonExemptEncryption": false ile. EAS Build anahtarı build'in Info.plist dosyasına yazar. Önceden gönderilmiş build'de değil, bir sonraki build'de etkili olur.
Missing Compliance App Store gönderimini de engelliyor mu?
İhracat uyumluluğu soruları beta ya da App Store fark etmeksizin her yeni sürüm için sorulur. Bunlara cevap vermemiş bir build dağıtılamaz. Info.plist'teki anahtar iki durumu birden çözer.
Yıllık öz sınıflandırma raporu hazırlamam gerekiyor mu?
Apple, muaf şifreleme kullanımının yine de ABD hükümetine yıllık bir öz sınıflandırma raporu gerektirebileceğini belirtiyor ve resmi prosedüre yönlendiriyor. Uygulaman muaf olmayan şifreleme kullanıyor ve belgeyi Apple'a vermişsen bu rapor gerekmez.

