# מפתח API של App Store Connect (.p8): יצירה ושימוש

> את מפתח ה-API של App Store Connect (.p8) אפשר להוריד פעם אחת בלבד. תפקיד, Issuer ID, Key ID, ביטול ושימוש עם Expo, fastlane או סקריפט.

עמוד מקורי: [מפתח API של App Store Connect (.p8): יצירה ושימוש](https://devoria.fr/he/blog/app-store-connect-api-key-p8)
כותב: [Mehdi Azizi](https://devoria.fr/he/mehdi-azizi)
פרסום: 2026-11-04
עדכון תוכן אחרון: 2026-11-04


מפתח API של App Store Connect מאפשר לכלי כמו EAS, fastlane, RevenueCat או סקריפט שכתבת בעצמך לפעול בחשבון שלך בלי הסיסמה ובלי אימות דו-שלבי. **Apple שומרת את החצי הציבורי של המפתח, ואתה מוריד את החצי הפרטי, קובץ `.p8`, פעם אחת בלבד.** עם הקובץ הזה, ה-Issuer ID וה-Key ID אתה חותם על טוקנים שתקפים עד 20 דקות לרוב הבקשות.

אני מפרסם את אפליקציות ה-iOS שלי, ביניהן TradaZen ו-Nolera, עם Expo. מפתח צוות בתפקיד App Manager משמש אותי ל-RevenueCat, ל-builds של Expo ולכלי שורת פקודה שעורך את דפי האפליקציות שלי. המדריך הזה מבוסס על הדפים של Apple, Expo ו-fastlane שקראתי שוב ב-3 בנובמבר 2026. אל תבלבל אותו עם מפתחות של שירותים שמוטמעים בקוד של אפליקציה: עליהם כתבתי ב[מפתח API סודי באפליקציית Expo](https://devoria.fr/he/blog/secret-api-key-expo-app-what-to-protect).

## מה מפתח API של App Store Connect עושה

לפי [התיעוד של Apple](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api), ה-API של App Store Connect דורש טוקן JWT לכל בקשה. אתה יוצר אותו וחותם עליו עם המפתח הפרטי שלך. המפתח משמש רק ל-API הזה: אי אפשר להשתמש בו לשירותים אחרים של Apple.

היתרון שלו נכנס במשפט אחד: **אף אדם לא צריך לאשר את ההתחברות.** ה-Apple ID שלך נתקע באימות הדו-שלבי, וזה חוסם כל אוטומציה. המדריך [EAS Submit ל-iOS](https://devoria.fr/he/blog/eas-submit-ios-expo-app-store) מראה מה זה משנה בשליחה של אפליקציית Expo.

## לפני הכול: לבקש גישה ל-API

את המפתח הראשון אי אפשר ליצור מיד. [העזרה של App Store Connect](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-api) ברורה: **ה-Account Holder צריך קודם לבקש גישה ל-API.** הוא פותח את Users and Access, לוחץ על Integrations ואז על Request Access. Apple בודקת כל בקשה לגופה.

ה-Account Holder הוא מי שרשם את החשבון. אם אתה מתחיל, זה אתה: המדריך [חשבון מפתח של Apple](https://devoria.fr/he/blog/apple-developer-account-price-free-or-99) מפרט את ההרשמה.

## מפתח צוות או מפתח אישי

Apple מציעה שני סוגי מפתחות. הנה ההבדלים, לפי [התיעוד](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api) ו[העזרה של App Store Connect](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-api):

| קריטריון                  | מפתח צוות               | מפתח אישי        |
| ------------------------- | ----------------------- | ---------------- |
| מי יכול ליצור אותו        | Account Holder או Admin | כמעט כל משתמש    |
| אפליקציות נגישות          | כולן, בלי יוצא מן הכלל  | אלה של המשתמש    |
| הרשאות                    | התפקיד שנבחר            | אלה של המשתמש    |
| מספר מפתחות               | כמה                     | אחד פעיל לכל אדם |
| תעודות ופרופילים          | כן, לפי התפקיד          | לא               |
| מכירות, כספים, notaryTool | לפי התפקיד              | לא               |
| שדה בטוקן                 | `iss` = Issuer ID       | `sub` = `user`   |

"כמעט כל משתמש" פירושו, לפי Apple: Account Holder, Admin, App Manager, Customer Support, Developer ו-Marketing, אלא אם Admin או ה-Account Holder שללו מהם את ההרשאה ליצור מפתח אישי.

**ל-Expo או ל-fastlane, תבחר מפתח צוות.** למפתח אישי אין גישה לנקודות הקצה של ה-provisioning, אלה שיוצרות תעודות ופרופילים. [התיעוד של fastlane](https://docs.fastlane.tools/app-store-connect-api/) מאשר: מפתחות צוות נדרשים לכל גישה שקשורה ל-provisioning.

## איזה תפקיד לתת למפתח

מפתח צוות ניגש לכל האפליקציות בחשבון, לא משנה מה התפקיד שלו. התפקיד קובע מה הוא יכול לעשות. **Apple מזהירה שמפתח Admin יכול ליצור ולמחוק משתמשים**: תן את התפקיד הכי מצומצם שמכסה את השימוש שלך. ההרשאות כאן למטה לקוחות מ[טבלת התפקידים של Apple](https://developer.apple.com/help/account/access/roles/).

| שימוש במפתח                       | תפקידים שמאפשרים אותו         |
| --------------------------------- | ----------------------------- |
| שליחת builds                      | Admin, App Manager, Developer |
| ניהול builds ב-TestFlight         | Admin, App Manager            |
| יצירת תעודות ופרופילים            | Admin, App Manager            |
| שליחת אפליקציה לבדיקה             | Admin, App Manager            |
| ייבוא מוצרים ומחירים (RevenueCat) | לפחות App Manager             |
| יצירת מפתחות צוות נוספים          | Admin                         |

השורה של RevenueCat לקוחה מ[התיעוד שלה](https://www.revenuecat.com/docs/service-credentials/itunesconnect-app-specific-shared-secret/app-store-connect-api-key-configuration). המדריך של Expo, לעומת זאת, [נותן למפתח את התפקיד Admin](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md). באפליקציות שלי App Manager מספיק: EAS יוצר איתו את פרופילי ההפצה, ו-RevenueCat מייבא את המוצרים.

אחרי שהמפתח נוצר, [אי אפשר לשנות לא את השם ולא את התפקיד שלו](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-api). כדי לשנות, צריך לבטל אותו וליצור חדש.

## יצירת מפתח צוות, צעד אחר צעד

צריך חשבון Admin או Account Holder. לפי [Apple](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api):

1. **פתח את Users and Access**, ואז את הלשונית Integrations.
2. **בחר App Store Connect API** בעמודה השמאלית, ואז את הלשונית Team Keys.
3. **לחץ על Generate API Key**, או על כפתור ה-+.
4. **תן שם למפתח.** הוא רק בשבילך, הוא לא חלק מהמפתח. תקרא לו על שם הכלי שישתמש בו.
5. **בחר את התפקיד** תחת Access, ואז לחץ על Generate.
6. **הורד את המפתח הפרטי** עם הקישור Download API Key.

> קישור ההורדה נעלם ברגע שהורדת את הקובץ, ו-Apple לא שומרת שום עותק. תשמור את ה-`.p8` לפני שאתה סוגר את הדף.

אחר כך רשום את שני המזהים. לפי [הדף של Apple על טוקנים](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests), **ה-Issuer ID מוצג בראש הדף Integrations**, עם כפתור Copy. ה-Key ID מופיע ברשימת המפתחות הפעילים: עבור עליו עם העכבר כדי שיופיע Copy Key ID. ה-Issuer ID זהה לכל מפתחות הצוות בחשבון. ה-Key ID ייחודי לכל מפתח.

למפתח אישי זה קצר יותר: פתח את פרופיל המשתמש שלך, גלול עד Individual API Key ולחץ על Generate API Key. גם כאן ההורדה חד-פעמית.

## איפה לשמור את קובץ ה-.p8

Apple מבקשת להתייחס למפתח כמו לסיסמה: **אל תשתף אותו, אל תשמור אותו במאגר קוד, ולעולם אל תשלב אותו בקוד של אפליקציה.** השגרה שלי:

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

את הנקודה האחרונה לא יישמתי בהתחלה. מפתח ה-App Manager שלי משמש גם את RevenueCat, גם את ה-builds וגם את כלי עריכת הדפים. אם אצטרך לבטל אותו, שלושה כלים ייפלו ביחד. **אם הייתי מתחיל מחדש, הייתי יוצר מפתח לכל כלי**, כדי שאוכל לנתק אחד בלי לגעת באחרים.

## שימוש עם Expo

שלוש דרכים לתת את המפתח ל-EAS:

- **לתת ל-EAS לנהל אותו.** `eas credentials --platform ios` יכול ליצור מפתח ולשמור אותו בשרתים של Expo. זו הדרך הכי פשוטה.
- **להגדיר אותו ב-`eas.json`.** פרופיל ה-`submit` מקבל `ascApiKeyPath`, `ascApiKeyIssuerId` ו-`ascApiKeyId`. לפי [התיעוד של eas.json](https://docs.expo.dev/eas/json/), השדות האלה מקבלים משתני סביבה, כמו `$ASC_API_KEY_PATH`.
- **להעביר אותו דרך הסביבה.** [המאגר של EAS CLI](https://github.com/expo/eas-cli/blob/main/packages/eas-cli/README.md) מתעד את `EXPO_ASC_API_KEY_PATH`, `EXPO_ASC_KEY_ID` ו-`EXPO_ASC_ISSUER_ID`. למפתח אישי משמיטים את ה-Issuer ID.

מגבלה שכדאי להכיר ב-builds: [Expo מבהירה](https://docs.expo.dev/build-reference/ios-capabilities/) שה-API הרשמי לא יודע לשייך App Group, Merchant ID או קונטיינר CloudKit. במקרה כזה צריך התחברות עם ה-Apple ID שלך, מקומית. נתקלתי בזה ב-Nolera עם ה-App Group של הווידג'ט: המפתח הפעיל את היכולת, אבל לא שייך את הקבוצה. את השיוך עשיתי בפורטל המפתחים של Apple. **אם סנכרון היכולות נתקע, `EXPO_NO_CAPABILITY_SYNC=1` מבטל אותו**, ואתה מפעיל את היכולת בעצמך על מזהה האפליקציה. החתימה של builds מפורטת ב[תעודה ו-provisioning profile ב-iOS](https://devoria.fr/he/blog/ios-certificate-provisioning-profile-expo).

## שימוש עם fastlane

[fastlane](https://docs.fastlane.tools/app-store-connect-api/) קורא את המפתח מקובץ JSON. השדות `key_id`, `issuer_id` ו-`key`, התוכן של ה-`.p8`, הם חובה. `duration` ו-`in_house` אופציונליים. ערכים לדוגמה:

```json
{
  "key_id": "XXXXXXXXXX",
  "issuer_id": "your-issuer-id",
  "key": "-----BEGIN PRIVATE KEY-----\nMIGT...\n-----END PRIVATE KEY-----",
  "duration": 1200,
  "in_house": false
}
```

אחר כך אתה מעביר את הקובץ לפעולה, למשל `fastlane pilot distribute --api_key_path fastlane/cle.json`. ב-Fastfile, הפעולה `app_store_connect_api_key` מקבלת `key_id`, `issuer_id` ו-`key_filepath`. משך הסשן לא עובר 1,200 שניות, כלומר 20 דקות. לא כל הפעולות תומכות בזה: fastlane מציין למשל ש-`produce` ו-`pem` לא עובדות עם מפתח API.

## שימוש בסקריפט משלך

בלי כלי, אתה מייצר את הטוקן בעצמך. [Apple קובעת את המתכון](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests):

- **Header**: `alg` שווה `ES256`, `kid` שווה ל-Key ID שלך, `typ` שווה `JWT`.
- **Payload, מפתח צוות**: `iss`, ה-Issuer ID שלך; `iat`, זמן היצירה; `exp`, זמן התפוגה; `aud`, ששווה `appstoreconnect-v1`.
- **Payload, מפתח אישי**: `sub` שווה `user` במקום `iss`.
- **משך**: מעבר ל-20 דקות, Apple דוחה את הטוקן לרוב הבקשות.

ב-Python, עם הספרייה PyJWT והתלות הקריפטוגרפית שלה, שמותקנת עם `pip install pyjwt[crypto]` לפי [התיעוד שלה](https://pyjwt.readthedocs.io/en/stable/installation.html). בטרמינל של ה-Mac, שים מירכאות: `pip install "pyjwt[crypto]"`, אחרת zsh לא מקבל את הסוגריים המרובעים.

```python
import time
import jwt

KEY_ID = "XXXXXXXXXX"
ISSUER_ID = "your-issuer-id"

with open("AuthKey_XXXXXXXXXX.p8") as f:
    private_key = f.read()

now = int(time.time())
token = jwt.encode(
    {"iss": ISSUER_ID, "iat": now, "exp": now + 20 * 60, "aud": "appstoreconnect-v1"},
    private_key,
    algorithm="ES256",
    headers={"kid": KEY_ID, "typ": "JWT"},
)
print(token)
```

ואז אתה שולח אותו ב-header של `Authorization`, כמו בדוגמה של Apple:

```bash
curl -H "Authorization: Bearer $TOKEN" "https://api.appstoreconnect.apple.com/v1/apps"
```

הרצתי את הסקריפט הזה ב-3 בנובמבר 2026 עם מפתח חד-פעמי שיצרתי על המחשב שלי: ה-header וה-payload של הטוקן תואמים לדף של Apple, וחתימת ה-ES256 מאומתת. לא שלחתי אותו ל-API של Apple עם מפתח הבדיקה הזה, שלא קיים אצל Apple. **השתמש באותו טוקן כל עוד הוא תקף**: Apple ממליצה על זה לביצועים טובים יותר.

## ביטול מפתח

בטל מפתח ברגע שהוא אבד, נפרץ, או שכלי כבר לא משתמש בו. לפי [העזרה של App Store Connect](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-api), עם חשבון Account Holder או Admin:

1. פתח את Users and Access, ואז Integrations.
2. בחר Team Keys, או Individual Keys, ואז לחץ על Edit.
3. סמן את המפתחות לביטול, ואז Revoke Key.
4. אשר עם Revoke.

**מפתח שבוטל לא חוזר לפעול לעולם.** [Apple מציגה אותו](https://developer.apple.com/documentation/appstoreconnectapi/revoking-api-keys) 30 יום תחת Revoked. כל כלי שהשתמש בו ייכשל אז באימות. עם Expo ההודעה היא "[App Store Connect rejected the API authentication credentials](https://github.com/expo/eas-cli/blob/main/packages/build-tools/src/steps/utils/ios/AscApiClient.ts)". ההודעה הזו ושאר כשלי השליחה מוסברים ב[שגיאות שליחה עם EAS ואיך לתקן אותן](https://devoria.fr/he/blog/eas-submit-ios-errors-fixes). אם המפתח לא נפרץ, הכן את החדש לפני שאתה מנתק את הישן. אם הוא נפרץ, Apple מבקשת לבטל אותו מיד.

למפתח האישי שלך: הפרופיל שלך, Individual API Key, ואז Revoke.

## הצ'ק-ליסט שלי למפתח ה-.p8

- ה-Account Holder ביקש גישה ל-API.
- המפתח הוא מפתח צוות אם הוא משמש ל-builds או לפרופילים.
- התפקיד שלו הוא המצומצם ביותר שמכסה את השימוש, והשם שלו אומר איזה כלי משתמש בו.
- ה-`.p8` שמור מחוץ למאגר, עם הרשאות קפדניות ועותק גיבוי מוצפן.
- ה-Issuer ID וה-Key ID רשומים בצד, בלי הקובץ.
- לכל כלי יש מפתח משלו, כדי שאפשר יהיה לבטל רק אחד.

## אוטומציה של הפרסום בלי להשאיר שם את המפתח

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

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

## שאלות נפוצות

### איך יוצרים מפתח API של App Store Connect?

ה-Account Holder מבקש קודם גישה ל-API. אחר כך Admin פותח את Users and Access, לשונית Integrations, App Store Connect API, Team Keys. הוא לוחץ על Generate API Key, בוחר שם ותפקיד, יוצר את המפתח ומוריד את קובץ ה-`.p8`.

### אפשר להוריד שוב מפתח .p8 שאבד?

לא. הקובץ יורד פעם אחת בלבד, ו-Apple לא שומרת עותק. בטל את המפתח שאבד, צור חדש ועדכן כל כלי שהשתמש בו.

### איפה מוצאים את ה-Issuer ID וה-Key ID?

ב-App Store Connect, תפריט Users and Access, לשונית Integrations. ה-Issuer ID מוצג בראש הדף. ה-Key ID מופיע ברשימת המפתחות הפעילים. מפתח אישי לא משתמש ב-Issuer ID.

### איזה תפקיד לתת למפתח ש-Expo משתמש בו?

המדריך של Expo נותן את התפקיד Admin. לפי טבלת התפקידים של Apple, App Manager מספיק כדי לשלוח builds וליצור תעודות ופרופילים. זה התפקיד של המפתח שלי, שמשמש ל-builds של Expo.

### אפשר לשנות את התפקיד של מפתח API?

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

### האם מפתח API של App Store Connect פג תוקף?

הדפים של Apple לא מזכירים שום תפוגה של המפתח, רק ביטול. מה שפג תוקף הם הטוקנים שנחתמים איתו, אחרי 20 דקות לכל היותר לרוב הבקשות.


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

[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 שלבים ואת הקיט שמתאים לך.
