# שגיאות eas submit ב-iOS: הסיבות והתיקונים

> eas submit נכשל? ההודעות האמיתיות של EAS ושל App Store Connect, הסיבה והתיקון: ascAppId, מפתח API, הסכם Apple וקודי ITMS.

עמוד מקורי: [שגיאות eas submit ב-iOS: הסיבות והתיקונים](https://devoria.fr/he/blog/eas-submit-ios-errors-fixes)
כותב: [Mehdi Azizi](https://devoria.fr/he/mehdi-azizi)
פרסום: 2026-11-04
עדכון תוכן אחרון: 2026-11-04


כש-`eas submit --platform ios` נכשל, ההודעה כמעט תמיד אומרת לך איפה לחפש. **או שהגדרות ה-EAS שלך לא שלמות, או שחשבון ה-Apple שלך חוסם, או ש-Apple דוחה את הבינארי.** שני המקרים הראשונים מתוקנים בכמה דקות, בלי build חדש. את השלישי מזהים לפי קוד ITMS, והוא כמעט תמיד דורש build חדש.

אני מפרסם את אפליקציות ה-iOS שלי, ביניהן Solys, ‏TradaZen ו-Nolera, עם Expo ו-EAS. ההודעות שמופיעות כאן הועתקו מקוד המקור של EAS CLI, ב[מאגר ה-GitHub הרשמי של Expo](https://github.com/expo/eas-cli), שנבדק שוב ב-3 בנובמבר 2026. הפורום הישן של Expo מפנה היום ל-Discord, אז הקוד נשאר המקור הכי אמין. למסלול המלא, מקובץ `eas.json` ועד השליחה לבדיקה, קרא קודם את [EAS Submit iOS: לפרסם אפליקציית Expo ב-App Store](https://devoria.fr/he/blog/eas-submit-ios-expo-app-store). כאן אנחנו מתקנים.

## מה eas submit עושה, ומה הוא צריך

לפי [התיעוד של Expo](https://docs.expo.dev/deploy/submit-to-app-stores/), הפקודה שולחת את קובץ ה-`.ipa` שלך ל-App Store Connect. ה-build מופיע ב-TestFlight אחרי ש-Apple מעבדת אותו, בדרך כלל תוך 10 עד 15 דקות. **היא לא שולחת את האפליקציה שלך לבדיקה**: את הצעד הזה עדיין צריך לעשות ב-App Store Connect.

[הדף של Expo על שליחה ל-iOS](https://docs.expo.dev/submit/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)](https://devoria.fr/he/blog/app-store-connect-api-key-p8).

הפרופיל המינימלי נכנס בכמה שורות. הערך פיקטיבי:

```json
{
  "submit": {
    "production": {
      "ios": {
        "ascAppId": "1234567890"
      }
    }
  }
}
```

אם EAS כבר שומר את מפתח ה-API שלך, הפרופיל הזה מספיק. ככה זה ברוב האפליקציות שלי.

## לקרוא את ההודעה: שלוש משפחות של שגיאות

לפני שאתה מחפש תיקון, תזהה את הרגע שבו הפקודה נעצרת. הטבלה הזו היא הרשת שאני מפעיל על כל כישלון.

| רגע הכישלון                         | משפחה       | build חדש? |
| ----------------------------------- | ----------- | ---------- |
| לפני כל שליחה                       | הגדרות EAS  | לא         |
| התחברות ל-Apple, יצירת דף האפליקציה | חשבון Apple | לא         |
| אחרי השליחה, קוד ITMS-90xxx         | בינארי נדחה | כמעט תמיד  |

את הפירוט קוראים בדף ההגשה, בלוח הבקרה של Expo. [Expo ממליצה](https://docs.expo.dev/deploy/submit-to-app-stores/) לקרוא שם את הלוגים ולחפש את הבועה "Build Annotations", שמסמנת סיבות כישלון נפוצות. בטרמינל, האפשרות `--verbose` תמיד מציגה את הלוגים של EAS Submit, לפי [ה-reference של EAS CLI](https://docs.expo.dev/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](https://github.com/expo/eas-cli/blob/main/packages/eas-cli/src/submit/ios/IosSubmitCommand.ts) נעצר אז: הוא לא יכול לשאול אותך שאלה, וגם לא ליצור את דף האפליקציה במקומך.

**תיקון: תעתיק את המספר של דף האפליקציה ל-`ascAppId`.** [Expo מסבירה איפה למצוא אותו](https://github.com/expo/fyi/blob/main/asc-app-id.md): ב-App Store Connect, פתח את האפליקציה שלך, ואז App Information. זה השדה Apple ID, תחת General Information, מספר של בערך עשר ספרות. זה לא כתובת המייל שלך ב-Apple, וגם לא מזהה ה-bundle.

ב-Nolera, בלי `ascAppId`, הפקודה דרשה ממני session של Apple Developer, שפג תוקף. מאז שהמספר נמצא ב-`eas.json`, השליחה לא מבקשת כלום.

> תוסיף את `ascAppId` לפני ה-build, לא אחריו. עד SDK 57, [טביעת האצבע ש-Expo מחשבת](https://github.com/expo/expo/blob/main/packages/@expo/fingerprint/src/sourcer/Expo.ts) תמיד כוללת את `eas.json`. ב-Vigie, שגרסת ה-runtime שלה עובדת לפי המדיניות `fingerprint`, הוספת המספר הזה אחרי build שינתה את טביעת האצבע: עדכון שפורסם אחר כך לא היה מגיע אף פעם ל-build המותקן. מאז SDK 58, הפריסט ברירת המחדל של טביעת האצבע, `balanced`, מתעלם מ-`eas.json`, לפי [יומן הגרסאות של Expo](https://github.com/expo/expo/blob/main/packages/@expo/fingerprint/CHANGELOG.md).

### "App Store Connect API Keys cannot be set up in --non-interactive mode."

הפרופיל שלך לא מכיל מפתח, ול-EAS אין אף מפתח שמקושר לאפליקציה שלך. [Expo מבהירה](https://docs.expo.dev/submit/ios/): במצב לא אינטראקטיבי, הפקודה לא יכולה לבקש ממך מפתח, והיא נכשלת עם ההודעה הזו.

שני תיקונים אפשריים:

- **תן ל-EAS ליצור ולשמור את המפתח.** הרץ פעם אחת `eas credentials --platform ios` במצב אינטראקטיבי, על המחשב שלך, ותן לו להגדיר מפתח API של App Store Connect לאפליקציה שלך.
- **הבא מפתח משלך** ב-`ascApiKeyPath`, ‏`ascApiKeyIssuerId` ו-`ascApiKeyId`. לפי [ה-reference של eas.json](https://docs.expo.dev/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](https://github.com/expo/eas-cli/blob/main/packages/eas-cli/src/submit/ios/IosSubmitCommand.ts) בודק את הפורמט הזה לפני כל שליחה.

לפי [העזרה של Apple](https://support.apple.com/en-us/102654), סיסמה ספציפית לאפליקציה נוצרת ב-account.apple.com, בקטע App-Specific Passwords, כשאימות דו-שלבי מופעל. היא מבוטלת ברגע שאתה משנה את הסיסמה של חשבון ה-Apple שלך. **Expo רואה בשיטה הזו [פחות בטוחה ממפתח ה-API](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md), שהוא שיטת ברירת המחדל והמומלצת שלה.**

## שגיאות של חשבון 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](https://developer.apple.com/help/account/access/roles/). [הקוד של EAS](https://github.com/expo/eas-cli/blob/main/packages/build-tools/src/steps/utils/ios/AscApiClient.ts) מבקש ממנו לעבור בדף Business של App Store Connect, ואז, אם Apple מציעה את זה, בחשבון שלו ב-developer.apple.com. אחר כך הרץ שוב את הפקודה. להסכם של אפליקציות בתשלום יש מדריך משלו: [Paid Apps Agreement ב-App Store Connect](https://devoria.fr/he/blog/paid-apps-agreement-status-w-8ben-first-payment).

### "App Store Connect rejected the API authentication credentials."

Apple ענתה בשגיאה 401, ‏`NOT_AUTHORIZED`. [EAS](https://github.com/expo/eas-cli/blob/main/packages/build-tools/src/steps/utils/ios/AscApiClient.ts) מציין שלוש סיבות: מפתח שכבר לא פעיל, מפתח של חשבון App Store Connect אחר, או Key ID, תוכן מפתח או Issuer ID שגויים.

בדוק את שני המזהים ב-App Store Connect, בתפריט Users and Access, בלשונית Integrations. לפי [Apple](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests), ה-Issuer ID מוצג בראש הדף, וה-Key ID ברשימת המפתחות הפעילים. **מפתח שבוטל לא חוזר לפעול אף פעם.** [Apple מציגה אותו](https://developer.apple.com/documentation/appstoreconnectapi/revoking-api-keys) 30 יום תחת Revoked: צריך ליצור מפתח חדש.

### "App Store Connect app for application identifier … was not found."

דף האפליקציה ש-`ascAppId` מצביע עליו לא נמצא עם המפתח שלך. [EAS](https://github.com/expo/eas-cli/blob/main/packages/build-tools/src/steps/utils/ios/AscApiUtils.ts) מבקש ממך לבדוק את המספר הזה, ושלמפתח באמת יש גישה לאפליקציה בחשבון הנכון. הוא אפילו מציג כמה אפליקציות שנראות עם המפתח הזה. בכלי השליחה של Apple, אותה בעיה מופיעה בצורה "No suitable application records were found".

שלוש סיבות חוזרות, שתיים מהן עלו ב[שרשור הזה בפורומים של Apple](https://developer.apple.com/forums/thread/106806):

- **דף האפליקציה לא קיים.** צור אותו ב-App Store Connect, או הסר את `ascAppId` כדי שהפקודה תיצור אותו.
- **המספר שייך לחשבון אחר.** העתקת את ה-`ascAppId` של צוות אחר, או של פרויקט אחר.
- **למשתמש אין גישה לאפליקציה.** App Manager או Developer יכולים להיות מוגבלים לאפליקציות מסוימות. מפתח צוות, לעומת זאת, [ניגש לכל האפליקציות](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api) בחשבון.

### "… is not available to team" או "… is not available to provider"

ההודעה הזו מופיעה כש-EAS יוצר את דף האפליקציה במקומך, כי אין `ascAppId`. מזהה ה-bundle כבר תפוס על ידי צוות אחר. [EAS מבקש ממך](https://github.com/expo/eas-cli/blob/main/packages/eas-cli/src/credentials/ios/appstore/ensureAppExists.ts) לשנות אותו בהגדרות האפליקציה, ואז להריץ שוב.

### "App name "…" is already taken. Using generated name "…""

זה לא כישלון. כשהשם כבר תפוס ב-App Store, ‏EAS מוסיף שישה תווים אקראיים ומנסה שוב, עד חמש פעמים. תשנה את שם הדף אחר כך ב-App Store Connect. כדי להימנע מזה, מלא את `appName` ו-`language` בפרופיל לפני השליחה הראשונה: בלי `language`, [השפה הראשית היא `en-US`](https://docs.expo.dev/eas/json/).

## שגיאות של הבינארי: קודי ITMS

אחרי השליחה, Apple מעבדת את ה-build. אם היא דוחה אותו, הלוג מציין קוד ITMS אחד או יותר. אלה הקודים ש[שלב השליחה של EAS](https://github.com/expo/eas-cli/blob/main/packages/build-tools/src/steps/functions/uploadToAsc.ts) מזהה ומתרגם:

| קוד 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 וגרסה](https://devoria.fr/he/blog/app-store-connect-build-number-version).
- **עבור 90725**, ‏EAS ממליץ לבחור אימג' iOS חדש יותר ב-`eas.json`, ואם צריך לעבור ל-SDK של Expo שנתמך.
- **עבור 90771**, ה-Info.plist שלך מצהיר על מצב הרקע `processing`, אבל לא על המפתח `BGTaskSchedulerPermittedIdentifiers`.

חוץ מ-90054 ו-90055, שבהם מספיק לכוון לדף האפליקציה הנכון או ל-build אחר, **התיקון נוגע בבינארי: תעשה build מחדש, ואז תשלח שוב.** לשני קודים יש מדריך משלהם: [ITMS-90683 עם Expo](https://devoria.fr/he/blog/itms-90683-missing-purpose-string-expo) ו-[ITMS-90725](https://devoria.fr/he/blog/itms-90725-sdk-version-issue-expo).

בסוף ספטמבר 2026, build של Solys נדחה במסירה בגלל ITMS-90683. הסרתי משפט הרשאה על התמונות בזמן ניקוי של קובץ ההגדרות. Solys לא משתמשת בתמונות, אבל ספרייה בפרויקט קוראת ל-API של Photos ב-iOS. **Apple מנתחת את הבינארי, לא את השימוש בפועל:** מאז, אני אף פעם לא מסיר את המשפטים האלה.

הסטטוס Missing Compliance, לעומת זאת, הוא לא שגיאת שליחה. חסרה ההצהרה שלך על הצפנה, שמוסברת ב[מדריך הפרסום עם EAS](https://devoria.fr/he/blog/eas-submit-ios-expo-app-store).

## הצ'קליסט שלי לפני כל שליחה

- `ascAppId` נמצא בפרופיל ה-`submit`, ונוסף לפני ה-build.
- מפתח ה-API מנוהל על ידי EAS, או ששלושת השדות שלו מצביעים על `.p8` ששמור מחוץ למאגר.
- ה-Account Holder אישר את ההסכמים האחרונים ב-App Store Connect.
- `autoIncrement` פעיל, עם `"appVersionSource": "remote"`, ש[Expo ממליצה עליו](https://docs.expo.dev/build-reference/app-versions/) מאז EAS CLI 12.
- ה-`version` גבוהה מהגרסה האחרונה שאושרה.
- לכל API רגיש שנמצא בבינארי יש משפט הרשאה.
- באפליקציה חדשה, `appName` ו-`language` מולאו לפני השליחה הראשונה.

## לשלוח את האפליקציה הראשונה שלך בלי להיתקע

הפקודה היא רק שלב אחד. ה-[iOS & Android Kit](https://devoria.fr/he/kits/ios) מתחיל מקוד הבסיס של האפליקציות שלי, כולל מנויים, ועובר ארבעה שלבים עד ה-App Store, בקצב שלך.

אם אתה מכין את ההשקה הראשונה שלך, [תעשה את האבחון החינמי שלך](https://devoria.fr/he/diagnostic): הוא אומר לך מה באמת תוקע אותך ושולח לך את הצ'קליסט שלי נגד דחיות של Apple. לדף האפליקציה, לצילומי המסך ולאישור, הדף [לפרסם אפליקציה ב-App Store](https://devoria.fr/he/expertise/publish-an-app-on-the-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 מחדש.


## הפרויקט שלך

[Review Kit](https://devoria.fr/he/kits/app-review): הצ'קליסט שלי לבדיקת App Store, הדחיות שקיבלתי מ-Apple ואיך תיקנתי אותן, הצ'קליסט ל-Google Play ושלושה skills ל-Claude Code. ‏169 ‏⁦₪⁩.

[iOS & Android Kit](https://devoria.fr/he/kits/ios): תבנה אפליקציה לאייפון ולאנדרואיד עם Claude Code: קוד ההתחלה של האפליקציות שלי, כל הדרך עד החנויות וכל הקיטים. ‏349 ‏⁦₪⁩.

[אבחון: מה מפריד בינך לבין אפליקציית האייפון שלך](https://devoria.fr/he/diagnostic): 7 שאלות, 60 שניות: תדע מה באמת חוסם אותך מלפרסם את אפליקציית האייפון שלך, תקבל מסלול ב-4 שלבים ואת הקיט שמתאים לך.
