Missing Compliance ב-TestFlight: איך לתקן את זה לתמיד
מאת Mehdi Azizi
פורסם ב-, 9 דק׳
Missing Compliance אומר ש-Apple מחכה להצהרת ההצפנה שלך. משחררים את ה-build ב-App Store Connect, ואז מגדירים את המפתח כדי שזה לא יחזור.
Missing Compliance זו לא שגיאה: זה build שמחכה לתשובה שלך לגבי הצפנה. כל עוד לא ענית, ה-build נשאר חסום לבודקים שלך. בשביל ה-build הזה, עונים על השאלות בלשונית TestFlight ב-App Store Connect. בשביל ה-builds הבאים, שמים את המפתח ITSAppUsesNonExemptEncryption ב-Info.plist, או ios.config.usesNonExemptEncryption ב-app.json אם עובדים עם Expo, והסטטוס לא חוזר.
את אפליקציות ה-iOS שלי אני בונה עם Expo. ב-app.json של Solys המפתח מוגדר ל-false, ומופיע פעמיים: ב-ios.config וב-ios.infoPlist. המדריך הזה מבוסס על הדפים של Apple על סטטוסי build ועל תאימות ייצוא של builds בטא, שקראתי שוב ב-6 בנובמבר 2026.
מה זה אומר Missing Compliance
רשימת סטטוסי ה-build של Apple מגדירה את זה במשפט אחד: חסר תיעוד של תאימות ייצוא, ומצופה ממך לפעול. Apple מציגה אותו בצהוב, הצבע של תהליך פתוח שתלוי בך או ב-Apple, והתיאור שלו מבהיר שמצופה ממך לפעול.
למה Apple שואלת? הדף על כללי ייצוא הצפנה מסביר: כשאתה שולח build ל-TestFlight או ל-App Store, אתה שולח אותו לשרת בארצות הברית. אם האפליקציה שלך מופצת מחוץ לארצות הברית ולקנדה, היא כפופה לחוקי הייצוא האמריקאיים, לא משנה באיזו מדינה רשומה החברה שלך. וברגע שאפליקציה משתמשת בהצפנה, מכילה אותה או משלבת אותה, Apple רואה בזה ייצוא של תוכנת הצפנה.
השורה התחתונה: בכל גרסה חדשה App Store Connect שואל אותך את שאלות התאימות, אלא אם ה-Info.plist שלך כבר עונה עליהן. בגלל זה build ראשון של Expo מגיע כמעט תמיד במצב Missing Compliance.
לשחרר את ה-build שמחכה
השלבים לקוחים מהדף של Apple על תאימות ייצוא של builds בטא. צריך תפקיד Account Holder, Admin או App Manager.
- ב-Apps, פותחים את האפליקציה ואז את הלשונית TestFlight.
- בסרגל הצד, תחת Builds, בוחרים את הפלטפורמה.
- בעמודה Build, לוחצים על האייקון או על המספר של ה-build הרלוונטי.
- לוחצים על Provide Export Compliance Information ועונים על השאלות.
- אם Apple מבקשת תיעוד, לוחצים על Go to App Encryption Page כדי לשלוח אותו. אחרת, לוחצים על Save.
Apple מתארת גם קיצור דרך: ליד ה-build, הקישור Manage פותח את אותן שאלות, ו-Choose File מאפשר לצרף תיעוד שכבר אושר. אחרי השמירה, ה-build עובר ל-Ready to Submit, או ישר ל-Testing אם הוא הולך לקבוצה פנימית. Ready to Test מגיע רק אחרי בדיקת הבטא של הבודקים החיצוניים.
הקישור Manage לא לחיץ? קודם כול תבדוק את התפקיד שלך בצוות: Apple שומרת את התשובה לתפקידים Account Holder, Admin ו-App Manager, וחשבון Developer או Marketing לא יכול לענות. Apple לא מתעדת סיבה אחרת. אם ה-build נשלח הרגע, חכה למייל על סיום העיבוד, שמוסבר במדריך על מספר ה-build והגרסה, ואז רענן את הדף.
לא לענות יותר אף פעם: המפתח בפרויקט
Apple אומרת את זה בדף של builds הבטא: אפשר לציין ב-Info.plist שהאפליקציה לא משתמשת בהצפנה, או שהיא פטורה, ואז לא צריך לענות בכל הגשה. המפתח נקרא ITSAppUsesNonExemptEncryption. ב-Xcode הוא מוצג בשם App Uses Non-Exempt Encryption.
| הכלי שלך | קובץ | איפה | ערך |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo, דרך אחרת | app.json | expo.ios.infoPlist | false |
| React Native נקי | Info.plist | App Uses Non-Exempt Encryption | NO |
| Xcode, Swift | Info.plist | App Uses Non-Exempt Encryption | NO |
ב-Expo המפתח נקרא usesNonExemptEncryption, ומדריך ההגדרות מבהיר שהוא כותב את המפתח של Apple ל-Info.plist של ה-build, ושה-ios.config משמש רק ל-build: הוא לא מופיע במניפסט של הפרודקשן.
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
ב-Expo, גם ios.infoPlist מקבל את המפתח בשם של Apple, עם אותו ערך: זו השורה השנייה ב-app.json של Solys. בפרויקט נייטיב, אותה הצהרה היא שורה אחת ב-Info.plist: המפתח App Uses Non-Exempt Encryption, השם ש-Xcode מציג, עם הערך NO. הערך הוא בוליאני, לא מחרוזת.
המפתח נכנס לתוקף ב-build הבא. ה-build שכבר נשלח נשאר ב-Missing Compliance עד שתענה ב-App Store Connect: שתי הפעולות לא מחליפות זו את זו, הן משלימות.
false או true: איך מחליטים
Apple מגדירה את הערך NO כך: האפליקציה שלך, כולל ספריות צד שלישי, לא משתמשת בשום הצפנה, או משתמשת רק בהצפנה שפטורה מחובות תיעוד. אחרת, זה YES.
מה בדרך כלל פטור, לפי הדף על כללי הייצוא: הצפנה שמובנית במערכת, כמו חיבורי HTTPS דרך URLSession. מה לא פטור: הצפנה קניינית, שכתבת בעצמך או שהטמעת. הסקירה הכללית של תאימות ייצוא מוסיפה תזכורת חשובה: האחריות על הפרשנות היא שלך, וגם על ההשלכות, אם תטען לפטור בטעות.
לאפליקציית Expo שקוראת ל-API ב-HTTPS, שומרת העדפות ומוכרת מנוי, false היא התשובה הרגילה. לאפליקציה שמצפינה בעצמה הודעות, קבצים או כספת, התשובה היא true, ו-Apple מצפה לתיעוד.
אל תשים
falseמתוך רפלקס. תעבור על התלויות שלך: ספריית הצפנה מקצה לקצה או אחסון מוצפן שבנית בעצמך מעבירים אותך לצד של התיעוד.
אם האפליקציה שלך משתמשת בהצפנה לא פטורה
הדף על תיעוד ההצפנה מתאר את התהליך. ב-App Information, ליד App Encryption Documentation, כפתור ההוספה פותח את השאלות, אחר כך Choose File למסמך, ואז Save. Apple מבקשת למלא קודם את תיאור האפליקציה ולהגדיר את הזמינות שלה, כדי להעריך אם התיעוד מספיק. היעד שלהם הוא בערך שני ימי עסקים כשהתיק מלא.
אחרי שהתיעוד אושר, Apple נותנת ערך לשים במפתח ITSEncryptionExportComplianceCode ב-Info.plist. איתו, אין יותר שאלות בכל שליחה. בזמן הבדיקה, ה-build מציג Waiting for Export Compliance Review או In Compliance Review: לא מצופה ממך שום פעולה.
שתי נקודות ש-Apple מציינת, אחת בדף כללי הייצוא והשנייה בסקירה הכללית של התאימות:
- גם עם הצפנה פטורה, ייתכן שיידרש דוח סיווג עצמי שנתי לממשלת ארצות הברית. הוא לא נדרש אם אתה משתמש בהצפנה לא פטורה ומסרת את התיעוד ל-Apple.
- גם צרפת מפקחת על יבוא ויצוא של אפליקציות הצפנה. הסקירה של Apple מזכירה אחסון מאובטח, תקשורת מאובטחת ואנטי-וירוס כתחומים רלוונטיים, עם פטורים לאפליקציות בנקאות ורפואה, ומפנה ל-ANSSI.
מה קורה אחר כך ב-TestFlight
ה-build ששוחרר ממשיך את החיים הרגילים של build ב-TestFlight, שמתוארים במדריך TestFlight לבדיקת אפליקציית iPhone: בודקים פנימיים מיד, בודקים חיצוניים אחרי בדיקת הבטא, ותפוגה אחרי 90 יום, לפי רשימת סטטוסי ה-build. שאר העצירות האפשריות בשליחה מ-Expo, כמו מספר build שכבר בשימוש או קובץ שנדחה, נמצאות בשגיאות שליחה של EAS ל-App Store Connect, והתהליך המלא בפרסום אפליקציית Expo ב-App Store עם EAS.
ה-iOS & Android Kit כולל את קוד הפתיחה שלי ל-Expo, עם המפתח הזה כבר מוגדר, ואת המסלול מה-build הראשון ועד דף האפליקציה ב-App Store. אם אתה רוצה לדעת מה עוד חוסם את הפרסום שלך, האבחון החינמי נותן לך תשובה בכמה שאלות ושולח לך את הצ'קליסט שלי נגד דחיות של Apple. השלבים המלאים נמצאים בפרסום אפליקציה ב-App Store.
שאלות נפוצות
מה זה אומר Missing Compliance ב-TestFlight?
ה-build מחכה להצהרת תאימות הייצוא שלך, כלומר לתשובה שלך לגבי השימוש בהצפנה. Apple מסווגת אותו בין הסטטוסים שדורשים ממך פעולה. ה-build לא יוצא לבודקים עד שתענה.
למה הקישור Manage של Missing Compliance לא לחיץ?
תבדוק את התפקיד שלך: Apple שומרת את התשובה לתפקידים Account Holder, Admin ו-App Manager. Apple לא מתעדת סיבה אחרת. אם ה-build הגיע הרגע, רענן את הדף אחרי המייל על סיום העיבוד.
האפליקציה שלי משתמשת רק ב-HTTPS, אני צריך לענות כן על הצפנה?
Apple מציינת שהצפנה מובנית במערכת, כמו חיבורי HTTPS דרך URLSession, בדרך כלל פטורה מחובות תיעוד. במקרה כזה, המפתח ITSAppUsesNonExemptEncryption מקבל NO, בתנאי שאף ספריית צד שלישי לא מוסיפה הצפנה קניינית.
צריך לענות על שאלות ההצפנה בכל build?
כן, כל עוד ה-Info.plist שלך לא מכיל את המפתח ITSAppUsesNonExemptEncryption. איתו, App Store Connect כבר לא שואל. ב-Expo מגדירים אותו ב-app.json דרך ios.config.usesNonExemptEncryption.
איפה מצהירים על הצפנה ב-app.json עם Expo?
ב-app.json, תחת expo.ios.config, עם "usesNonExemptEncryption": false אם האפליקציה לא משתמשת בשום הצפנה לא פטורה. EAS Build כותב את המפתח ל-Info.plist של ה-build. הוא נכנס לתוקף ב-build הבא, לא ב-build שכבר נשלח.
Missing Compliance חוסם גם את ההגשה ל-App Store?
שאלות תאימות הייצוא נשאלות על כל גרסה חדשה, בטא או App Store. build שלא ענה עליהן לא יכול להיות מופץ. המפתח ב-Info.plist פותר את שני המקרים בבת אחת.
אני צריך להגיש דוח סיווג עצמי שנתי?
Apple מציינת ששימוש בהצפנה פטורה עדיין עלול לחייב דוח סיווג עצמי שנתי לממשלת ארצות הברית, ומפנה לנוהל הרשמי. אם האפליקציה שלך משתמשת בהצפנה לא פטורה ומסרת את התיעוד ל-Apple, הדוח הזה לא נדרש.

