האפליקציה שוקלת 180 מגה-בייט בעת הורדה באייפון 13 מיני, אך באותו גודל באייפד פרו, למרות שהטאבלט לא צריך נכסי @2x. תרחיש זה אופייני לפרויקטים שבהם משאבים נאספים לתוך חבילה אוניברסלית אחת מבלי להתחשב ברזולוציות ובארכיטקטורות. כתוצאה מכך, משתמשים עם מכשירים קטנים יותר מבזבזים תעבורה על נתונים מיותרים, וההתקנה מואטת.
App Thinning פותר בעיה זו: ה-App Store מרכיב אוטומטית גרסה המותאמת למכשיר הספציפי, ומספק רק את המשאבים הדרושים. אנו מגדירים את מחזור ה-App Thinning המלא — Slicing, Bitcode ו-On-Demand Resources — כדי להשיג חבילת הורדה קטנה ככל האפשר. החיסכון המשולב יכול להגיע עד 50%, אשר עבור 100,000 התקנות חוסך כ-$5,000 בתעבורה סלולרית. עלות אספקת האפליקציה יורדת בכ-$0.02 בערך לכל הורדה.
תיעוד המפתחים של Apple ממליץ להשתמש ב-Asset Catalog עבור כל המשאבים כדי ש-Slicing יפעל כראוי.
כיצד App Thinning מקטין את גודל ה-IPA
| מכשיר | גודל ללא Thinning | גודל עם Thinning | חיסכון |
|---|---|---|---|
| iPhone SE (דור 2) | 180 מגה-בייט | 110 מגה-בייט | ~39% |
| iPhone 14 Pro | 180 מגה-בייט | 130 מגה-בייט | ~28% |
| iPad Pro 12.9" | 180 מגה-בייט | 95 מגה-בייט | ~47% |
נתונים עבור אפליקציה עם פריסות @2x ו-@3x, תגי ODR והסרת Bitcode.
Slicing
ה-App Store יוצר קובצי IPA נפרדים עבור כל מכשיר. iPhone 8 מקבל רק משאבי @2x ו-slice מסוג ARMv8, iPad Pro מקבל @3x ו-ARM64e. הדרישה המרכזית: Asset Catalog. משאבים מחוץ ל-.xcassets אינם נחתכים — הם נכללים בכל הגרסאות. אנו מוודאים שכל התמונות נמצאות בקטלוג עם גדלי slot נכונים (@1x/@2x/@3x) ווריאציות trait (iPhone/iPad/Mac).
אנו מאמתים את התוצאה דרך Xcode → Product → Archive → Distribute → Ad Hoc/Development → Export → App Thinning: All compatible device variants. לאחר הייצוא, אנו בוחנים את App Thinning Size Report.txt — הטבלה מציגה גדלים עבור כל מכשיר.
On-Demand Resources (ODR)
תוכן שאינו נדרש מיד (רמות משחק, מדריכים, פילטרים) מתויג ונטען לפי בקשה. הוא מאוחסן בשרתי Apple, ואינו מגדיל את ה-IPA.
תצורה:
- ב-Xcode: Target → Build Phases → Copy Bundle Resources → הגדר On Demand Resource Tags עבור המשאב ב-Asset Catalog.
- בקוד, השתמש ב-NSBundleResourceRequest:
let request = NSBundleResourceRequest(tags: ["level_5"])
request.conditionallyBeginAccessingResources { available in
if available {
// ресурс уже загружен
} else {
request.beginAccessingResources { error in
guard error == nil else { return }
// ресурс загружен, можно использовать
}
}
}מגבלות ODR:
| פרמטר | מגבלה |
|---|---|
| חבילת התקנה ראשונית | עד 200 מגה-בייט |
| משאבי On-Demand | עד 20 ג'יגה-בייט |
| ODR שנטען בו-זמנית | עד 2 ג'יגה-בייט |
עבור משחקים עם תוכן גדול, ODR משנה מהותית את גודל המתקין — אנו מבטיחים אופטימיזציה ללא פגיעה בחוויית המשתמש.
Bitcode
Bitcode הוא ייצוג ביניים של LLVM ש-Apple יכולה להדר מחדש עבור ארכיטקטורות חדשות. בגרסאות Xcode מודרניות, Bitcode אינו נדרש עבור אפליקציות iOS — הדרישה הוסרה. עבור watchOS ו-tvOS, Bitcode עשוי עדיין להיות נחוץ אם משתמשים ב-Xcode ישן או בספריות ישנות. אם אתה תומך בספריות ישנות הדורשות Bitcode, אנו מגדירים let request = NSBundleResourceRequest(tags: ["level_5"]) request.conditionallyBeginAccessingResources { available in if available { // ресурс уже загружен } else { request.beginAccessingResources { error in guard error == nil else { return } // ресурс загружен, можно использовать } } } ב-Build Settings. כל המסגרות חייבות להכיל Bitcode, אחרת כל הבנייה מאבדת יכולת זו.
Bitcode הפך לאופציונלי עבור iOS עם עדכון Xcode. עם זאת, עבור watchOS ו-tvOS הוא עשוי עדיין להידרש עם Xcode או ספריות ישנות. אם אתה תומך בספריות ישנות, בדוק תאימות.
למה ODR חשוב למשחקים ולאפליקציות גדולות
ODR מאפשר לדחות את טעינת התוכן שאינו נדרש בעת ההפעלה. ללא ODR, המשתמש מוריד הכל בבת אחת, מה שמגדיל את הזמן עד להפעלה ראשונה ומפחית המרות. עם ODR מוגדר, האפליקציה נטענת מהר יותר, והתוכן נשלף לפי הצורך. השוואה: ללא ODR, משחק יכול לשקול 2 ג'יגה-בייט בהתקנה; עם ODR, רק 200 מגה-בייט בתוספת טעינת רמות.
טעויות נפוצות בתצורת App Thinning
- משאבים שנוספו דרך
ENABLE_BITCODE = YESבמקום Asset Catalog → אין Slicing. - תגי ODR הוקצו אך
File → Add Filesאינו קורא ל-NSBundleResourceRequest→ המשאב לעולם לא משוחרר. - בדיקת ODR לא בוצעה במצב לא מקוון → אצל משתמשים אמיתיים, ההורדה לא מתמודדת עם שגיאות רשת.
איך אנחנו עושים זאת: תהליך עבודה
- אנליטיקה: ביקורת על Asset Catalog הנוכחי, זיהוי משאבים מחוץ לקטלוג, הערכת נפח תוכן ODR.
- עיצוב: חלוקת משאבים ל-slotים @1x/@2x/@3x, הקצאת תגי ODR, החלטה על Bitcode.
- יישום: מעבר ל-Asset Catalog, יישום
endAccessingResources()בקוד, הפעלת Bitcode אם נדרש. - בדיקות: בנייה עם App Thinning על All compatible device variants, בדיקת Size Report, בדיקת ODR במצב לא מקוון.
- פריסה: העלאה ל-App Store Connect, אימות גדלים ב-TestFlight.
מה כלול
- ביקורת על משאבים קיימים ו-Asset Catalog
- העברת תמונות ל-
.xcassets(אם נדרש) - תצורת Slicing ואימות Size Report
- הגדרת On-Demand Resources עם תגים וקוד
- בדיקות על מכשירים אמיתיים בתנאי רשת שונים
- תיעוד הגדרות והמלצות
לוח זמנים ועלות
תצורת App Thinning עבור פרויקט קיים אורכת 1 עד 3 ימים. אם נדרשת העברת משאבים מתיקיות ל-Asset Catalog, הוסף 2–5 ימים בהתאם לנפח. התמחור מחושב באופן אישי. ניסיון של 7+ שנים בפיתוח iOS מבטיח הפחתת גודל IPA של 30–50% ללא אובדן פונקציונליות. כדי להעריך את הפוטנציאל של App Thinning עבור הפרויקט שלך, צור איתנו קשר. אנו נערוך ביקורת ונציע תצורה אופטימלית. הזמן את ההתקנה וקבל אפליקציה מותאמת.







