שגיאות eas submit ב-iOS: הסיבות והתיקונים
מאת Mehdi Azizi
פורסם ב-, 10 דק׳
eas submit נכשל? ההודעות האמיתיות של EAS ושל App Store Connect, הסיבה והתיקון: ascAppId, מפתח API, הסכם Apple וקודי ITMS.
כש-eas submit --platform ios נכשל, ההודעה כמעט תמיד אומרת לך איפה לחפש. או שהגדרות ה-EAS שלך לא שלמות, או שחשבון ה-Apple שלך חוסם, או ש-Apple דוחה את הבינארי. שני המקרים הראשונים מתוקנים בכמה דקות, בלי build חדש. את השלישי מזהים לפי קוד ITMS, והוא כמעט תמיד דורש build חדש.
אני מפרסם את אפליקציות ה-iOS שלי, ביניהן Solys, TradaZen ו-Nolera, עם Expo ו-EAS. ההודעות שמופיעות כאן הועתקו מקוד המקור של EAS CLI, במאגר ה-GitHub הרשמי של Expo, שנבדק שוב ב-3 בנובמבר 2026. הפורום הישן של Expo מפנה היום ל-Discord, אז הקוד נשאר המקור הכי אמין. למסלול המלא, מקובץ eas.json ועד השליחה לבדיקה, קרא קודם את EAS Submit iOS: לפרסם אפליקציית Expo ב-App Store. כאן אנחנו מתקנים.
מה eas submit עושה, ומה הוא צריך
לפי התיעוד של Expo, הפקודה שולחת את קובץ ה-.ipa שלך ל-App Store Connect. ה-build מופיע ב-TestFlight אחרי ש-Apple מעבדת אותו, בדרך כלל תוך 10 עד 15 דקות. היא לא שולחת את האפליקציה שלך לבדיקה: את הצעד הזה עדיין צריך לעשות ב-App Store Connect.
הדף של Expo על שליחה ל-iOS מונה שלושה תנאים מוקדמים:
- חשבון Apple Developer בתשלום, שנדרש לכל שליחה ל-App Store;
- מזהה ה-bundle ב-
ios.bundleIdentifier; - EAS CLI מותקן ומחובר לחשבון ה-Expo שלך.
כדי לשלוח בלי אינטראקציה, אותו דף מוסיף שתי הגדרות:
ascAppIdבפרופיל ה-submitשלeas.json, המספר של דף האפליקציה שלך ב-App Store Connect;- מפתח API של App Store Connect, מנוהל על ידי EAS או שאתה מספק אותו. היצירה שלו, התפקיד שלו והביטול שלו מוסברים במפתח API של App Store Connect (.p8).
הפרופיל המינימלי נכנס בכמה שורות. הערך פיקטיבי:
{
"submit": {
"production": {
"ios": {
"ascAppId": "1234567890"
}
}
}
}
אם EAS כבר שומר את מפתח ה-API שלך, הפרופיל הזה מספיק. ככה זה ברוב האפליקציות שלי.
לקרוא את ההודעה: שלוש משפחות של שגיאות
לפני שאתה מחפש תיקון, תזהה את הרגע שבו הפקודה נעצרת. הטבלה הזו היא הרשת שאני מפעיל על כל כישלון.
| רגע הכישלון | משפחה | build חדש? |
|---|---|---|
| לפני כל שליחה | הגדרות EAS | לא |
| התחברות ל-Apple, יצירת דף האפליקציה | חשבון Apple | לא |
| אחרי השליחה, קוד ITMS-90xxx | בינארי נדחה | כמעט תמיד |
את הפירוט קוראים בדף ההגשה, בלוח הבקרה של Expo. Expo ממליצה לקרוא שם את הלוגים ולחפש את הבועה "Build Annotations", שמסמנת סיבות כישלון נפוצות. בטרמינל, האפשרות --verbose תמיד מציגה את הלוגים של EAS Submit, לפי ה-reference של EAS CLI.
שגיאות הגדרה של EAS
"Set ascAppId in the submit profile (eas.json) or re-run this command in interactive mode."
הרצת את הפקודה עם --non-interactive, למשל ב-CI, והפרופיל שלך לא מכיל ascAppId. הקוד של EAS CLI נעצר אז: הוא לא יכול לשאול אותך שאלה, וגם לא ליצור את דף האפליקציה במקומך.
תיקון: תעתיק את המספר של דף האפליקציה ל-ascAppId. Expo מסבירה איפה למצוא אותו: ב-App Store Connect, פתח את האפליקציה שלך, ואז App Information. זה השדה Apple ID, תחת General Information, מספר של בערך עשר ספרות. זה לא כתובת המייל שלך ב-Apple, וגם לא מזהה ה-bundle.
ב-Nolera, בלי ascAppId, הפקודה דרשה ממני session של Apple Developer, שפג תוקף. מאז שהמספר נמצא ב-eas.json, השליחה לא מבקשת כלום.
תוסיף את
ascAppIdלפני ה-build, לא אחריו. עד SDK 57, טביעת האצבע ש-Expo מחשבת תמיד כוללת אתeas.json. ב-Vigie, שגרסת ה-runtime שלה עובדת לפי המדיניותfingerprint, הוספת המספר הזה אחרי build שינתה את טביעת האצבע: עדכון שפורסם אחר כך לא היה מגיע אף פעם ל-build המותקן. מאז SDK 58, הפריסט ברירת המחדל של טביעת האצבע,balanced, מתעלם מ-eas.json, לפי יומן הגרסאות של Expo.
"App Store Connect API Keys cannot be set up in --non-interactive mode."
הפרופיל שלך לא מכיל מפתח, ול-EAS אין אף מפתח שמקושר לאפליקציה שלך. Expo מבהירה: במצב לא אינטראקטיבי, הפקודה לא יכולה לבקש ממך מפתח, והיא נכשלת עם ההודעה הזו.
שני תיקונים אפשריים:
- תן ל-EAS ליצור ולשמור את המפתח. הרץ פעם אחת
eas credentials --platform iosבמצב אינטראקטיבי, על המחשב שלך, ותן לו להגדיר מפתח API של App Store Connect לאפליקציה שלך. - הבא מפתח משלך ב-
ascApiKeyPath, ascApiKeyIssuerIdו-ascApiKeyId. לפי ה-reference של eas.json, שלושת השדות האלה מקבלים משתני סביבה, כמו$ASC_API_KEY_PATH.
באפליקציה האחרונה שלי, האפשרות --auto-submit רצתה Apple ID כדי ליצור את מפתח השליחה שלה. שמתי את שלושת השדות של המפתח שלי בפרופיל של עותק העבודה שלי, שאף פעם לא נכנס ל-commit. ואז שלחתי את ה-build הגמור עם --id ו---non-interactive.
"EXPO_APPLE_APP_SPECIFIC_PASSWORD must be in the format xxxx-xxxx-xxxx-xxxx, where x is a lowercase letter."
המשתנה מכיל משהו אחר מסיסמה ספציפית לאפליקציה, לרוב את סיסמת ה-Apple שלך עצמה. EAS CLI בודק את הפורמט הזה לפני כל שליחה.
לפי העזרה של Apple, סיסמה ספציפית לאפליקציה נוצרת ב-account.apple.com, בקטע App-Specific Passwords, כשאימות דו-שלבי מופעל. היא מבוטלת ברגע שאתה משנה את הסיסמה של חשבון ה-Apple שלך. Expo רואה בשיטה הזו פחות בטוחה ממפתח ה-API, שהוא שיטת ברירת המחדל והמומלצת שלה.
שגיאות של חשבון Apple
"… agree to the latest Program License Agreement in your developer account."
ההודעה המלאה מתחילה ב-"You currently don't have access to this membership resource". בצד של Apple, התשובה הגולמית יכולה להכיל "Unable to process request - PLA Update available". שלבי השליחה החדשים של EAS מציגים דווקא "A required Apple agreement is missing or has expired".
הסיבה זהה: Apple עדכנה הסכם, ואף אחד לא אישר אותו. רק בעל החשבון, ה-Account Holder, יכול לאשר הסכמים, לפי טבלת התפקידים של Apple. הקוד של EAS מבקש ממנו לעבור בדף Business של App Store Connect, ואז, אם Apple מציעה את זה, בחשבון שלו ב-developer.apple.com. אחר כך הרץ שוב את הפקודה. להסכם של אפליקציות בתשלום יש מדריך משלו: Paid Apps Agreement ב-App Store Connect.
"App Store Connect rejected the API authentication credentials."
Apple ענתה בשגיאה 401, NOT_AUTHORIZED. EAS מציין שלוש סיבות: מפתח שכבר לא פעיל, מפתח של חשבון App Store Connect אחר, או Key ID, תוכן מפתח או Issuer ID שגויים.
בדוק את שני המזהים ב-App Store Connect, בתפריט Users and Access, בלשונית Integrations. לפי Apple, ה-Issuer ID מוצג בראש הדף, וה-Key ID ברשימת המפתחות הפעילים. מפתח שבוטל לא חוזר לפעול אף פעם. Apple מציגה אותו 30 יום תחת Revoked: צריך ליצור מפתח חדש.
"App Store Connect app for application identifier … was not found."
דף האפליקציה ש-ascAppId מצביע עליו לא נמצא עם המפתח שלך. EAS מבקש ממך לבדוק את המספר הזה, ושלמפתח באמת יש גישה לאפליקציה בחשבון הנכון. הוא אפילו מציג כמה אפליקציות שנראות עם המפתח הזה. בכלי השליחה של Apple, אותה בעיה מופיעה בצורה "No suitable application records were found".
שלוש סיבות חוזרות, שתיים מהן עלו בשרשור הזה בפורומים של Apple:
- דף האפליקציה לא קיים. צור אותו ב-App Store Connect, או הסר את
ascAppIdכדי שהפקודה תיצור אותו. - המספר שייך לחשבון אחר. העתקת את ה-
ascAppIdשל צוות אחר, או של פרויקט אחר. - למשתמש אין גישה לאפליקציה. App Manager או Developer יכולים להיות מוגבלים לאפליקציות מסוימות. מפתח צוות, לעומת זאת, ניגש לכל האפליקציות בחשבון.
"… is not available to team" או "… is not available to provider"
ההודעה הזו מופיעה כש-EAS יוצר את דף האפליקציה במקומך, כי אין ascAppId. מזהה ה-bundle כבר תפוס על ידי צוות אחר. EAS מבקש ממך לשנות אותו בהגדרות האפליקציה, ואז להריץ שוב.
"App name "…" is already taken. Using generated name "…""
זה לא כישלון. כשהשם כבר תפוס ב-App Store, EAS מוסיף שישה תווים אקראיים ומנסה שוב, עד חמש פעמים. תשנה את שם הדף אחר כך ב-App Store Connect. כדי להימנע מזה, מלא את appName ו-language בפרופיל לפני השליחה הראשונה: בלי language, השפה הראשית היא en-US.
שגיאות של הבינארי: קודי ITMS
אחרי השליחה, Apple מעבדת את ה-build. אם היא דוחה אותו, הלוג מציין קוד ITMS אחד או יותר. אלה הקודים ששלב השליחה של EAS מזהה ומתרגם:
| קוד ITMS | מה Apple דוחה | תיקון |
|---|---|---|
| 90189 | מספר build שכבר תפוס | autoIncrement |
| 90062, 90186, 90478 | גרסה סגורה או שכבר עברו אותה | להעלות את version |
| 90683 | חסר משפט הרשאה | ios.infoPlist |
| 90725 | SDK של iOS ישן מדי | אימג' iOS או SDK של Expo |
| 90054, 90055 | bundle שונה מדף האפליקציה שמכוונים אליו | לתקן את ascAppId |
| 90022, 90023, 90391, 90713 | אייקונים חסרים או מוצהרים לא נכון | לבדוק את האייקונים |
| 90771 | מזהי משימות רקע חסרים | ios.infoPlist |
שלוש הבהרות מתוך ההודעות האלה:
- מספר ה-build ייחודי לכל גרסה. עבור 90189, EAS ממליץ על
"autoIncrement": trueב-eas.json. הכל מוסבר במספר build וגרסה. - עבור 90725, EAS ממליץ לבחור אימג' iOS חדש יותר ב-
eas.json, ואם צריך לעבור ל-SDK של Expo שנתמך. - עבור 90771, ה-Info.plist שלך מצהיר על מצב הרקע
processing, אבל לא על המפתחBGTaskSchedulerPermittedIdentifiers.
חוץ מ-90054 ו-90055, שבהם מספיק לכוון לדף האפליקציה הנכון או ל-build אחר, התיקון נוגע בבינארי: תעשה build מחדש, ואז תשלח שוב. לשני קודים יש מדריך משלהם: ITMS-90683 עם Expo ו-ITMS-90725.
בסוף ספטמבר 2026, build של Solys נדחה במסירה בגלל ITMS-90683. הסרתי משפט הרשאה על התמונות בזמן ניקוי של קובץ ההגדרות. Solys לא משתמשת בתמונות, אבל ספרייה בפרויקט קוראת ל-API של Photos ב-iOS. Apple מנתחת את הבינארי, לא את השימוש בפועל: מאז, אני אף פעם לא מסיר את המשפטים האלה.
הסטטוס Missing Compliance, לעומת זאת, הוא לא שגיאת שליחה. חסרה ההצהרה שלך על הצפנה, שמוסברת במדריך הפרסום עם EAS.
הצ'קליסט שלי לפני כל שליחה
ascAppIdנמצא בפרופיל ה-submit, ונוסף לפני ה-build.- מפתח ה-API מנוהל על ידי EAS, או ששלושת השדות שלו מצביעים על
.p8ששמור מחוץ למאגר. - ה-Account Holder אישר את ההסכמים האחרונים ב-App Store Connect.
autoIncrementפעיל, עם"appVersionSource": "remote", שExpo ממליצה עליו מאז EAS CLI 12.- ה-
versionגבוהה מהגרסה האחרונה שאושרה. - לכל API רגיש שנמצא בבינארי יש משפט הרשאה.
- באפליקציה חדשה,
appNameו-languageמולאו לפני השליחה הראשונה.
לשלוח את האפליקציה הראשונה שלך בלי להיתקע
הפקודה היא רק שלב אחד. ה-iOS & Android Kit מתחיל מקוד הבסיס של האפליקציות שלי, כולל מנויים, ועובר ארבעה שלבים עד ה-App Store, בקצב שלך.
אם אתה מכין את ההשקה הראשונה שלך, תעשה את האבחון החינמי שלך: הוא אומר לך מה באמת תוקע אותך ושולח לך את הצ'קליסט שלי נגד דחיות של Apple. לדף האפליקציה, לצילומי המסך ולאישור, הדף לפרסם אפליקציה ב-App Store עובר על כל שלב.
שאלות נפוצות
למה eas submit נכשל רק ב-CI?
במצב --non-interactive, הפקודה לא יכולה לשאול אותך כלום. היא צריכה ascAppId בפרופיל ומפתח API שכבר מקושר לאפליקציה, או את שלושת השדות שלו ב-eas.json. על המחשב שלך, היא הייתה שואלת אותך את השאלות האלה.
צריך לעשות build מחדש אחרי שגיאה של eas submit?
רק אם Apple דוחה את הבינארי, עם קוד ITMS. יוצא מן הכלל: ב-ITMS-90054 ו-90055, ה-build כוון לדף האפליקציה הלא נכון, ומספיק לשלוח אותו שוב לדף הנכון. שגיאות הגדרה ושגיאות חשבון מתקנים ב-eas.json, ב-App Store Connect או בחשבון ה-Apple שלך. אחר כך שולחים שוב את אותו build, למשל עם --latest או --id.
איפה רואים את הלוגים של שליחה ב-EAS Submit?
בדף ההגשה, בלוח הבקרה של Expo. Expo ממליצה לקרוא שם את הלוגים ואת הבועה "Build Annotations". בטרמינל, הוסף --verbose כדי להציג תמיד את הלוגים.
אפשר להשתמש ב-eas submit עם חשבון Apple חינמי?
לא. Expo דורשת חשבון Apple Developer בתשלום כדי לשלוח אפליקציה ל-App Store. החשבון החינמי מאפשר לבדוק על האייפון שלך, לא להשתמש ב-App Store Connect.
איזה תפקיד לתת למפתח ה-API בשביל eas submit?
המדריך של Expo נותן למפתח את התפקיד Admin. לפי טבלת התפקידים של Apple, שליחת builds פתוחה גם לתפקידים App Manager ו-Developer. ה-builds שלי ב-Expo רצים עם מפתח צוות בתפקיד App Manager. רק ה-Account Holder וה-Admins יכולים ליצור מפתח צוות.
מה המשמעות של "Increment Build Number" ב-EAS?
Apple דחתה את ה-build עם הקוד ITMS-90189: מספר ה-build הזה כבר קיים לגרסה הזו. הפעל "autoIncrement": true ב-eas.json, או העלה את ios.buildNumber, ואז תעשה build מחדש.

