# Guideline 2.5.1: API ציבוריים ו-SDK מעודכן ב-Expo

> Guideline 2.5.1: רק API ציבוריים, אפליקציה שרצה על iOS הנוכחי ו-frameworks לשימוש המיועד שלהם. ב-Expo, תבדוק קודם את המודולים הנייטיב.

עמוד מקורי: [Guideline 2.5.1: API ציבוריים ו-SDK מעודכן ב-Expo](https://devoria.fr/he/blog/guideline-2-5-1-public-api-sdk-expo)
כותב: [Mehdi Azizi](https://devoria.fr/he/mehdi-azizi)
פרסום: 2026-11-04
עדכון תוכן אחרון: 2026-11-04


ה-guideline 2.5.1 מציבה ארבע דרישות: להשתמש רק ב-API ציבוריים, לרוץ על גרסת iOS הנוכחית, לוותר על מה ש-Apple מוציאה משימוש ולהשתמש בכל framework למטרה שהוא נועד לה. **ב-Expo, הסיכון כמעט אף פעם לא מגיע מקוד ה-JavaScript שלך: הוא מגיע מהמודולים הנייטיב שאתה מתקין ומה-SDK שאיתו אתה מקמפל.**

אני מפרסם את Solys, TradaZen ו-Nolera עם Expo SDK 57. ‏Solys נשענת על ה-API של Screen Time של Apple, framework שהשימוש בו מוגבל. המדריך הזה עוסק בכלל של הבדיקה. לשגיאה שמקבלים בזמן שליחת ה-build, תקרא את המדריך [ITMS-90338](https://devoria.fr/he/blog/itms-90338-non-public-api-usage-expo). למצבי רקע, שנמצאים באותו חלק, תקרא את המדריך על [guideline 2.5.4](https://devoria.fr/he/blog/guideline-2-5-4-background-mode-rejected).

## מה אומרת guideline 2.5.1?

הכלל נמצא בחלק 2.5, "Software Requirements", של ה-[App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#2.5.1): "Apps may only use public APIs and must run on the currently shipping OS. Keep your apps up-to-date and make sure you phase out any deprecated features, frameworks or technologies that will no longer be supported in future versions of an OS. Apps should use APIs and frameworks for their intended purposes and indicate that integration in their app description."

בפשטות, ארבע חובות:

1. **רק API ציבוריים**, כלומר כאלה ש-Apple מתעדת.
2. **אפליקציה שרצה על גרסת iOS הנוכחית**, iOS 27 מאז ספטמבר 2026.
3. **שום דבר מיושן שעומד להיעלם**: אתה מחליף את מה ש-Apple מכריזה עליו כסוף חיים.
4. **כל framework במקום שלו, ומוזכר בתיאור**: HomeKit לבית חכם, HealthKit לבריאות ולכושר, מחובר לאפליקציית Health.

מכאן הכותרת של הדחייה: "Guideline 2.5.1 - Performance - Software Requirements".

## API ציבוריים: איפה מסתתר הסיכון באפליקציית Expo

API פרטי הוא פונקציה של המערכת ש-Apple לא מתעדת. ‏Apple לא מבטיחה לא את ההתנהגות שלה ולא שהיא תהיה בגרסת iOS הבאה, ולכן היא אסורה.

קוד ה-JavaScript שלך אף פעם לא נוגע ב-iOS ישירות: הוא עובר דרך מודולים נייטיב. את אלה של Expo SDK מתחזק הצוות של Expo. **האחרים מכילים קוד שלא אתה כתבת, ו-Apple בודקת אותו כאילו הוא שלך.** המדריך [ITMS-90683](https://devoria.fr/he/blog/itms-90683-missing-purpose-string-expo) מראה את אותו מנגנון עם משפטי ההרשאה: Apple שופטת את הקוד שנמצא ב-build, לא את מה שהאפליקציה עושה.

ב-Solys, נכון ל-15 באוקטובר 2026, יש 42 תלויות ישירות עם קוד iOS נייטיב, ו-14 מהן מחוץ ל-Expo SDK. ביניהן RevenueCat, ‏Sentry, ‏AppsFlyer ו-`react-native-device-activity`, הגשר ל-API של Screen Time.

אפשר לתפוס API פרטי בשני שלבים. בשליחה, הסריקה האוטומטית של App Store Connect יכולה להחזיר את השגיאה ITMS-90338. במהלך הבדיקה, ה-reviewer מצטט את 2.5.1.

## API מיושנים: מ-UIWebView ל-UIScene

הדוגמה הכי מוכרת היא UIWebView, הרכיב הישן להצגת תוכן web. ‏Apple [הפסיקה לקבל אותו](https://developer.apple.com/news/?id=12232019b) באפליקציות חדשות באפריל 2020, ואז בעדכונים בדצמבר 2020. ספרייה ישנה שעוד הפנתה אליו חסמה את השליחה. ב-Solys, החיפוש מהצ'קליסט למטה לא מוצא שום הפניה.

השינוי הבא כבר הוכרז. ההערה הטכנית [TN3187](https://developer.apple.com/documentation/technotes/tn3187-migrating-to-the-uikit-scene-based-life-cycle) של Apple כותבת: "In the next major release following iOS 26, UIScene lifecycle will be required when building with the latest SDK; otherwise, your app won't launch." בפשטות, אפליקציה שמקומפלת עם ה-SDK של iOS 27 בלי מחזור החיים מבוסס הסצנות לא עולה.

שלושה תאריכים שצריך לחבר:

- **מאז אפריל 2026**, Apple דורשת Xcode 26: זה הנושא של המדריך [ITMS-90725](https://devoria.fr/he/blog/itms-90725-sdk-version-issue-expo).
- **באפריל 2027**, [עמוד השליחה של Apple](https://developer.apple.com/app-store/submitting/) מודיע שה-SDK של iOS 27 יהיה חובה.
- **Expo SDK 58**, בבטא מאז 15 בספטמבר 2026, כבר מייצר את ניהול הסצנות, לפי ה-[הודעה של Expo](https://expo.dev/changelog/sdk-58-beta).

עם Expo SDK 57 ו-Xcode 26, אתה עדיין מקמפל עם ה-SDK של iOS 26: שום דבר לא נשבר היום. **המודולים שמשנים את ה-AppDelegate יצטרכו להתעדכן לפני אפריל 2027.**

## Frameworks שמשמשים לא למטרה שלהם

ה-reviewer בודק ש-framework רגיש משרת פונקציה גלויה, ושהעמוד שלך בחנות מזכיר אותה.

- **HealthKit** משמש לבריאות ולכושר. ה-[הנחיות הממשק של Apple](https://developer.apple.com/design/human-interface-guidelines/healthkit) אומרות: "If your app doesn't provide health and fitness functionality, don't request access to people's private health data."
- **HomeKit** משמש לבית חכם, ולשום דבר אחר.
- **PushKit** משמש לשיחות קול על IP. ה-[תיעוד של PushKit](https://developer.apple.com/documentation/pushkit/responding-to-voip-notifications-from-pushkit) חד: "If you are unable to support CallKit in your app, you cannot use PushKit to handle push notifications." התראת VoIP שמעירה את האפליקציה בלי שיחה היא שימוש לרעה.
- **Family Controls**, ה-API של Screen Time, דורש הרשאה מיוחדת. ה-[תיעוד](https://developer.apple.com/documentation/familycontrols) שלו מציין: "Before submitting your app to the App Store, you must request permission to use the entitlement."

בשביל Solys ביקשתי את הרשאת ההפצה הזאת ב-23 בספטמבר 2026, ו-Apple אישרה אותה באותו יום. השימוש תואם את ה-framework: המשתמש בוחר את האפליקציות שיושהו, ו-Solys חוסמת אותן ל-30, 45 או 60 דקות אחרי ההשכמה. התיאור בעמוד האפליקציה אומר את זה במשפט אחד: "Solys משתמשת בהרשאת Screen Time של Apple כדי להשהות את האפליקציות שנבחרו." **זה מה שהסוף של 2.5.1 דורש: לציין את האינטגרציה בתיאור.**

## גרסאות בטא: TestFlight כן, App Store לא

ה-[release notes של App Store Connect](https://developer.apple.com/help/app-store-connect/release-notes/) מראים את הכלל בפועל. ב-14 באוקטובר 2026, builds שנבנו עם Xcode 27.2 beta 3 מתקבלים "for internal and external testing", כלומר ל-TestFlight. ב-5 באוקטובר, אלה של Xcode 27.1 RC מתקבלים "for the App Store".

**build שקומפל עם בטא של Xcode הולך ל-TestFlight, אף פעם לא לבדיקה.** כדי להגיש, אתה צריך גרסה סופית, או RC ש-Apple פתחה ל-App Store.

שתי הבהרות לאפליקציית Expo:

- **בטא של Expo היא לא בטא של Apple.** ‏Apple בודקת את גרסת Xcode וה-SDK של iOS, לא את זו של Expo. ההודעה על SDK 58 הוסיפה שתמונות EAS עם Xcode 27 יגיעו בקרוב.
- **לבדוק על iOS הנוכחי עדיין חובה**, גם אם אתה מקמפל עם ה-SDK של iOS 26. תפעיל את האפליקציה מהתחלה (cold start) על iPhone או סימולטור מעודכן.

## צ'קליסט: תלויות נייטיב לפני הגשה

תעבור עליו לפני כל build של production. את הפקודות מריצים בשורש פרויקט ה-Expo:

```bash
npx expo-doctor
npx expo install --check
grep -rlw "UIWebView" node_modules --include='*.m' --include='*.mm' --include='*.swift' --include='*.h'
```

1. **`npx expo-doctor` לא מדווח על שום כישלון.** ב-Solys, ב-15 באוקטובר 2026: 20 מתוך 21 בדיקות עברו. הכישלון הגיע מ-13 חבילות Expo שפיגרו בתיקון אחד, ש-`npx expo install --check` מיישר.
2. **כל מודול מחוץ ל-Expo SDK מופיע ב-React Native Directory.** ‏Expo Doctor עושה את הבדיקה הזאת כברירת מחדל, כמו שכתוב ב-[תיעוד של Expo](https://docs.expo.dev/versions/latest/config/package-json/). חבילה לא מוכרת שווה קריאה של קוד ה-iOS שלה.
3. **כל מודול נייטיב תואם לגרסת React Native שלך.** ‏[טבלת הגרסאות של Expo](https://docs.expo.dev/versions/latest/) משייכת את SDK 57 ל-React Native 0.86. מודול שלא פורסם כבר כמה גרסאות הוא סימן אזהרה.
4. **החיפוש של UIWebView לא מחזיר כלום.** תעשה אותו דבר לכל API ש-Apple מכריזה עליו כסוף חיים.
5. **לכל framework רגיש יש פונקציה גלויה**: בריאות, Screen Time, שיחות, בית. התיאור מזכיר אותה, וההרשאה המיוחדת אושרה.
6. **ה-build יוצא מ-Xcode סופי.** תבדוק את הגרסה בלוגים של EAS Build.
7. **האפליקציה עולה מהתחלה על גרסת iOS הנוכחית**, עם חשבון חדש.
8. **המודולים שנוגעים ב-AppDelegate מכריזים על תמיכה ב-UIScene** לפני שאתה עובר ל-SDK של iOS 27.

## איך עונים לדחייה של 2.5.1?

ההודעה בדרך כלל מציינת את ה-API או ה-framework הבעייתי. שני מקרים:

- **ה-framework לא משרת שום דבר גלוי**: תסיר את המודול או את ה-capability, תבנה build חדש, ואז תענה בשני משפטים.
- **ה-framework משרת פונקציה אמיתית**: תן את המסלול המדויק, צילום מסך או סרטון קצר, ותציין את האינטגרציה בתיאור של עמוד האפליקציה.

**הסרה של מודול נייטיב משנה את הבינארי: עדכון מרחוק לא מספיק.** המדריך על [guideline 2.1](https://devoria.fr/he/blog/guideline-2-1-app-store-rejection-fix) מסביר למה ה-reviewer רואה רק את הקוד שבתוך ה-build. אחר כך השיחה מתנהלת ב-App Store Connect, כמו במדריך [איך עונים ל-App Review](https://devoria.fr/he/blog/apple-resolution-center-reply-app-review-rejection).

## לבדוק את הפרויקט שלך לפני השליחה

ה-[Review Kit](https://devoria.fr/he/kits/app-review) כולל את הצ'קליסט שלי לפני שליחה, הדחיות שתיקנתי ו-skills של Claude Code שעוברים על פרויקט ה-Expo שלך. בשביל עין אנושית, [תקבע איתי שעה](https://devoria.fr/he/coaching): נקרא ביחד את ההודעה של Apple ואת התלויות שלך. התהליך המלא נמצא בעמוד [אפליקציה שנדחתה על ידי Apple](https://devoria.fr/he/expertise/app-rejected-by-apple).

מכין את ההשקה הראשונה שלך? [תעשה את האבחון החינמי](https://devoria.fr/he/diagnostic): הוא ישלח לך את הצ'קליסט שלי נגד דחיות של Apple.

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

### מה פירוש "Guideline 2.5.1 - Performance - Software Requirements"?

זו הכותרת של הדחייה כש-Apple חושבת שהאפליקציה שלך משתמשת ב-API לא ציבורי, בטכנולוגיה מיושנת או ב-framework שלא למטרה שלו. ההודעה בדרך כלל מציינת את הרכיב הבעייתי.

### מה ההבדל בין guideline 2.5.1 לשגיאה ITMS-90338?

ITMS-90338 היא שגיאה אוטומטית שמקבלים בשליחת ה-build, כשהסריקה מזהה סמל לא ציבורי. ‏2.5.1 היא כלל בדיקה שאדם מיישם, והוא מכסה גם frameworks שמשמשים לא כמו שצריך וטכנולוגיות מיושנות.

### אפשר להגיש אפליקציה שקומפלה עם בטא של Xcode?

לא. ‏App Store Connect מקבל builds כאלה רק ל-TestFlight. לבדיקה, תקמפל עם גרסה סופית של Xcode, או RC ש-Apple פתחה ל-App Store ב-release notes שלה.

### אפליקציית Expo יכולה להשתמש ב-API פרטי בלי לדעת?

כן, דרך מודול נייטיב של צד שלישי. קוד ה-JavaScript שלך לא קורא ל-iOS בעצמו, אבל כל חבילה נייטיב מכילה קוד Objective-C או Swift. תעבור על רשימת המודולים שמחוץ ל-Expo SDK לפני כל גרסה.

### צריך לעבור ל-Expo SDK 58 עכשיו?

לא בשביל 2.5.1, נכון ל-15 באוקטובר 2026: ‏SDK 57 מקמפל עם ה-SDK של iOS 26, שעדיין מתקבל. תתכנן את המעבר לפני אפריל 2027, כש-Apple תדרוש את ה-SDK של iOS 27 ואת מחזור החיים מבוסס הסצנות.


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

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