React Native CodePush: עדכוני OTA מהירים
תארו לעצמכם: אתם מוצאים באג קריטי בגרסת production — חישוב ההנחה מעוגל לא נכון. התיקון מוכן, אבל כדי להגיע למשתמשים, הוא חייב לעבור בדיקה של App Store, מה שלוקח 24 שעות עד שבוע. כל שעת השבתה עולה כסף ועצבים. CodePush פותר את זה: ה-JavaScript bundle והמשאבים מתעדכנים ישירות, תוך עקיפת החנויות. אנו משלבים את CodePush באפליקציות React Native, ומבטיחים הגדרה נכונה, פריסה בטוחה וחזרה לגרסה קודמת במקרה של שגיאות.
איך CodePush עוקף את בדיקת החנויות
אפליקציית React Native מורכבת ממארח native (Objective-C/Swift / Java/Kotlin) ומקובץ JS bundle. CodePush מחליף את ה-JS bundle והמשאבים (images/, fonts/) מבלי לשנות את הקוד ה-native. אפל וגוגל מאפשרות עדכונים כאלה — בתנאי שהעדכון לא משנה מהותית את התנהגות האפליקציה (למשל, הוספת הרשאות native או שינוי מודל ההפצה). הניסיון שלנו מראה שהגדרה נכונה של CodePush חוסכת לצוותים שבועות במסירת תיקונים.
למה לבחור ב-CodePush על פני עדכונים רגילים
השוואה: עדכון רגיל ב-App Store לוקח 1–3 ימים, בעוד ש-CodePush מספק תיקון תוך דקות — הבדל של פי 100. בנוסף, CodePush מאפשר לבדוק עדכונים על קבוצת משתמשים קטנה לפני פריסה מלאה, מה שמפחית את הסיכון לרגרסיות.
| קריטריון | App Store / Google Play | CodePush |
|---|---|---|
| זמן אספקה | 1–3 ימים | 2–5 דקות |
| נדרשת בדיקה | כן | לא (עבור JS) |
| חזרה לגרסה קודמת | רק בגרסה חדשה | אוטומטית במקרה של קריסה |
| בקרת קהל | 100% בבת אחת | הדרגתי (10% → 50% → 100%) |
איך אנחנו מגדירים CodePush: מקרה אמיתי
התקנה ואינטגרציה לפרויקט טיפוסי:
npm install react-native-code-push npx pod-install # iOS ב-npm install react-native-code-push npx pod-install # iOS (iOS):
#import <CodePush/CodePush.h>
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge {
#if DEBUG
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
#else
return [CodePush bundleURL];
#endif
}ברכיב הראשי:
import CodePush from 'react-native-code-push';
const App = () => {
// ... компонент
};
const codePushOptions = {
checkFrequency: CodePush.CheckFrequency.ON_APP_RESUME,
installMode: CodePush.InstallMode.ON_NEXT_RESUME,
mandatoryInstallMode: CodePush.InstallMode.IMMEDIATE,
};
export default CodePush(codePushOptions)(App);AppDelegate.mm מחיל את העדכון בכניסה הבאה לאפליקציה, מבלי להפריע למשתמש. #import <CodePush/CodePush.h> - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { #if DEBUG return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; #else return [CodePush bundleURL]; #endif } מיועד רק לעדכונים קריטיים וחובה.
פריסה באמצעות Fastlane
lane :codepush_staging do
sh("appcenter codepush release-react \
-a MyOrg/MyApp-iOS \
-d Staging \
--description '#{ENV["CHANGELOG"]}' \
--target-binary-version '~1.2'")
sh("appcenter codepush release-react \
-a MyOrg/MyApp-Android \
-d Staging \
--description '#{ENV["CHANGELOG"]}' \
--target-binary-version '~1.2'")
endimport CodePush from 'react-native-code-push'; const App = () => { // ... компонент }; const codePushOptions = { checkFrequency: CodePush.CheckFrequency.ON_APP_RESUME, installMode: CodePush.InstallMode.ON_NEXT_RESUME, mandatoryInstallMode: CodePush.InstallMode.IMMEDIATE, }; export default CodePush(codePushOptions)(App); הוא ביטוי semver. רק משתמשים עם גרסת native 1.2.x יקבלו את העדכון. אם קובץ JS bundle חדש משתמש במודול native מגרסה 1.3, לא ניתן לדחוף אותו לגרסה 1.2.
אסטרטגיית פריסה: איך להימנע מבעיות
לעולם אל תדחפו CodePush ל-100% מהקהל מיד. AppCenter תומך ב-InstallMode.ON_NEXT_RESUME:
appcenter codepush release-react \ -a MyOrg/MyApp-iOS \ -d Production \ --rollout 10 10% מהמשתמשים מקבלים את העדכון. לאחר 30 דקות, בדקו את Firebase Crashlytics — אם שיעור הקריסות לא עלה, הרחיבו דרך ממשק AppCenter ל-50% → 100%.
מה כלול: תוצרים
הגדרת CodePush כוללת:
| מה אנחנו עושים | תוצאה |
|---|---|
| ניתוח ארכיטקטורה והכנת סביבת פיתוח | דוח תאימות, תוכנית יישום |
| אינטגרציית SDK והגדרת AppCenter | Build עובד עם CodePush ב-Staging |
| אוטומציה באמצעות Fastlane ו-CI | סקריפטי שחרור, pipeline ב-GitLab CI / GitHub Actions |
| הגדרת ניטור והתראות | לוח מחוונים ב-AppCenter, אינטגרציית Crashlytics |
| תיעוד והדרכת צוות | מדריך שחרור עדכונים, רשימת בדיקה לפריסה |
שלבי עבודה
- ניתוח (2–4 שעות): ביקורת על הארכיטקטורה הנוכחית, בדיקת תאימות ל-CodePush, קביעת גרסאות binary יעד.
- עיצוב (2–4 שעות): בחירת תדירות בדיקת עדכונים, תכנון פריסה ומנגנון חזרה.
- אינטגרציה (4–8 שעות): התקנת SDK, הגדרת AppCenter, שינויי קוד לתמיכה ב-CodePush.
- אוטומציה (4–8 שעות): סקריפטי Fastlane, pipeline ב-CI.
- בדיקות (2–4 שעות): פריסה ב-Staging, ניטור קריסות, בדיקת חזרה לגרסה קודמת.
- השקה (1–2 שעות): פריסה ל-Production עם הרחבה הדרגתית.
מגבלות ומה לא עובד
CodePush לא יכול לעדכן:
- קוד native (Swift/ObjC/Kotlin/Java)
- תלויות native (הוספת pod או aar חדש)
- AndroidManifest.xml ו-Info.plist
- מסך פתיחה ואייקון האפליקציה
אם PR נוגע בקוד native, נדרש שחרור רגיל בחנות. CodePush מ-Microsoft AppCenter מופסק בהדרגה לטובת EAS Update (Expo). עבור פרויקטים שאינם Expo, אנו שוקלים מעבר ל-IMMEDIATE מותאם אישית כדי לשמור על עצמאות מ-AppCenter.
ניטור עדכונים
AppCenter Deployments מציג סטטיסטיקות: כמה מכשירים קיבלו את העדכון, כמה חזרו לגרסה קודמת. חזרה אוטומטית מופעלת במקרה של קריסה מיד לאחר העדכון — CodePush מחזיר את ה-bundle הקודם.
לפי תיעוד AppCenter, CodePush משתמש בפריסה הדרגתית כדי למזער סיכונים.
נוסף: מה זה בעצם CodePush
CodePush הוא שירות ענן שמאפשר למפתחים לפרוס עדכוני אפליקציה ניידת ישירות למכשירי המשתמשים. הוא עובד עם React Native ו-Cordova, ומחליף רק משאבי web (JS, HTML, CSS, תמונות).ניסיון ואחריות
יש לנו 6 שנות ניסיון בפיתוח React Native. יישמנו CodePush בעשרות פרויקטים: פינטק, מרקטplaces, רשתות חברתיות. אנו מבטיחים עדכונים יציבים, חזרה מהירה לגרסה קודמת ותיעוד מלא. צרו קשר לייעוץ — נעריך את הפרויקט שלכם ונציע את אסטרטגיית CodePush האופטימלית. הזמינו הגדרה turnkey ושכחו מהמתנה ארוכה לבדיקות.







