הגדרת ה-AppCenter שלנו מספקת אינטגרציית CI/CD מוכנה לשימוש עבור אפליקציות מובייל, כולל בניות iOS ו-Android אוטומטיות, צינורות YAML, בדיקות Device Farm, וסקריפטים לאחר בנייה באמצעות משתני סביבה. כאשר מפתחים אפליקציית מובייל עם SwiftUI, אינטגרציית Firebase והתראות push, בנייה ידנית של כל גרסה עבור iOS ו-Android אורכת עד 4 שעות ביום. שבועיים לתוך הפרויקט, הצוות מבזבז 30% מזמנו על פעולות חוזרות: חתימת קוד, הגדרת סביבה והעלאה ל-TestFlight. הגדרנו CI/CD ב-Microsoft AppCenter כך שכל בנייה רצה אוטומטית: על push ל-Git, עם בדיקות UI על מכשירים אמיתיים ומסירה לבודקים. התהליך כולו אורך 2–5 ימים, לא שבועות. בזמן הזה, אתה מקבל צינור אמין שמפחית את זמן השחרור ב-70% וחותך עלויות תשתית בדיקות בעד 50%. עלות הגדרה טיפוסית היא $500–$1500, עם חיסכון שנתי של עד $20,000 בעבודה ידנית.
למה AppCenter היא בחירה נוחה ל-CI/CD?
AppCenter פותרת שלוש משימות מרכזיות: בנייה, בדיקות על מכשירים אמיתיים (Device Farm) והפצה. בניגוד ל-Jenkins או GitLab CI, אין צורך לנהל תשתית — השירות מספק מכונות וירטואליות של macOS ו-Windows, כמו גם מכשירי iOS/Android. לפי תיעוד Microsoft, AppCenter תומכת בכל המסגרות הפופולריות: SwiftUI, Jetpack Compose, Flutter ו-React Native. המגבלה היחידה היא בניות מטריצה מורכבות ותמונות מותאמות אישית, אותן אנו פותרים על ידי שילוב עם CI חיצוני (למשל, GitHub Actions).
הגדרת בנייה באמצעות YAML
AppCenter תומכת ב-appcenter.yml — הדרך הגמישה ביותר לתאר צינור. בצע את השלבים הבאים עבור אפליקציית iOS עם חתימה ידנית:
- הגדר ענפי טריגר (למשל, main, release/*).
- ציין את תמונת ה-VM (macos-latest).
- הוסף משימות להתקנת תעודת Apple ופרופיל provisioning.
- הרץ התקנת CocoaPods.
- השתמש במשימת בניית Xcode עם אפשרויות חתימה.
דוגמת YAML:
---
trigger:
branches:
include:
- main
- release/*
pool:
vmImage: macos-latest
steps:
- task: InstallAppleCertificate@2
inputs:
certSecureFile: distribution.p12
certPwd: $(P12_PASSWORD)
- task: InstallAppleProvisioningProfile@1
inputs:
provisioningProfileLocation: secureFiles
provProfileSecureFile: MyApp_AppStore.mobileprovision
- script: |
cd ios && pod install --repo-update
displayName: 'Install CocoaPods'
- task: Xcode@5
inputs:
actions: 'build'
scheme: 'MyApp'
xcWorkspacePath: 'ios/MyApp.xcworkspace'
exportPath: '$(Build.ArtifactStagingDirectory)'
exportOptions: 'plist'
exportOptionsPlist: 'ios/ExportOptions.plist'
signingOption: 'manual'
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
אם YAML אינו זמין, אנו משתמשים ב-trigger: branches: include: - main - release/* pool: vmImage: macos-latest steps: - task: InstallAppleCertificate@2 inputs: certSecureFile: distribution.p12 certPwd: $(P12_PASSWORD) - task: InstallAppleProvisioningProfile@1 inputs: provisioningProfileLocation: secureFiles provProfileSecureFile: MyApp_AppStore.mobileprovision - script: | cd ios && pod install --repo-update displayName: 'Install CocoaPods' - task: Xcode@5 inputs: actions: 'build' scheme: 'MyApp' xcWorkspacePath: 'ios/MyApp.xcworkspace' exportPath: '$(Build.ArtifactStagingDirectory)' exportOptions: 'plist' exportOptionsPlist: 'ios/ExportOptions.plist' signingOption: 'manual' signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)' provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)' — הוא רץ לאחר בנייה מוצלחת. לדוגמה, לשליחת הבנייה לקבוצת QA:
#!/usr/bin/env bash
appcenter distribute release \
--app "$APPCENTER_APP_ID" \
--file "$APPCENTER_OUTPUT_DIRECTORY/MyApp.ipa" \
--group "QA Team" \
--release-notes "Build $APPCENTER_BUILD_ID"
curl -X POST "$SLACK_WEBHOOK_URL" \
-H 'Content-type: application/json' \
--data "{\"text\":\"New build $APPCENTER_BUILD_ID is available\"}"המשתנים appcenter-post-build.sh הם משתני סביבה מובנים הזמינים בשלב הבנייה.
הגנה על סודות וניהול סביבות
בתצורת בנייה → משתני סביבה, מוסיפים מפתחות. ערכים רגישים מסומנים כ"Secret" — הם מוצפנים ואינם מוצגים בלוגים. סט סטנדרטי:
| משתנה | מטרה |
|---|---|
#!/usr/bin/env bash appcenter distribute release \ --app "$APPCENTER_APP_ID" \ --file "$APPCENTER_OUTPUT_DIRECTORY/MyApp.ipa" \ --group "QA Team" \ --release-notes "Build $APPCENTER_BUILD_ID" curl -X POST "$SLACK_WEBHOOK_URL" \ -H 'Content-type: application/json' \ --data "{\"text\":\"New build $APPCENTER_BUILD_ID is available\"}" |
סיסמה לתעודת iOS |
APPCENTER_* |
סיסמה ל-keystore של Android |
P12_PASSWORD |
מזהה אפליקציה ב-Firebase |
KEYSTORE_PASSWORD |
URL להתראות Slack |
AppCenter מבטיחה שסודות לא יופיעו בלוגי בנייה.
בדיקות על מכשירים אמיתיים
Device Farm מריצה XCUITest ו-Espresso על מכשירי iPhone וסמארטפוני Android פיזיים. פקודה להעלאת בדיקות:
appcenter test run xcuitest \
--app "MyOrg/MyApp-iOS" \
--devices "MyOrg/top-ios-devices" \
--test-series "main" \
--locale "ru_RU" \
--build-dir DerivedData/Build/Products/Debug-iphoneos פרטי Device Farm
המכשירים נבחרים בממשק המשתמש — ניתן לתעדף דגמים וגרסאות מערכת הפעלה ספציפיים. זה מהיר יותר מהקמת חווה משלך: חיסכון של עד 30% בתקציב הבדיקות.
| פלטפורמה | מכשירים זמינים | מגבלות |
|---|---|---|
| iOS | iPhone 12-14, iPad Pro | מקסימום 30 דקות לבדיקה |
| Android | Samsung Galaxy S21-S24, Pixel 5-7 | עד 5 מכשירים במקביל |
בעיות שהגדרת AppCenter פותרת
הבעיה הראשונה היא חתימת קוד ידנית עבור iOS. כל שחרור דורש עדכון פרופילי provisioning ותעודות. אנו הופכים תהליך זה לאוטומטי עם FIREBASE_APP_ID ו-SLACK_WEBHOOK_URL, ומבטלים שגיאות בנייה.
הבעיה השנייה היא חוסר בבדיקות על מכשירים אמיתיים. סימולטורים לא תמיד משחזרים באגים הקשורים לזיכרון או לרשת. Device Farm מריצה בדיקות על 5+ מכשירים פיזיים, ומגדילה את הכיסוי ב-40%.
הבעיה השלישית היא עיכובים בהפצה. שליחה ידנית של בנייה לבודקים דרך TestFlight אורכת עד שעה. סקריפט לאחר בנייה שולח את ה-IPA/APK ישירות לקבוצות AppCenter, ומודיע לצוות ב-Slack תוך דקה.
מבנה פרויקט ב-AppCenter
כל אפליקציה מקבלת "אפליקציה" משלה בתוך הארגון. היררכיה טיפוסית:
MyCompany (Organization)
├── MyApp-iOS (App)
│ ├── Build (CI)
│ ├── Test (Device Farm)
│ ├── Distribute
│ └── Diagnostics (Crashes)
└── MyApp-Android (App)
├── Build (CI)
├── Distribute
└── Diagnosticsמבנה זה מפשט את ניהול הגישה — בודקים רואים רק את האפליקציות שלהם.
מגבלות CI של AppCenter וכיצד אנו מתמודדים איתן
AppCenter אינה תומכת בבניות מטריצה (תצורות מרובות במשימה אחת) או בתמונות Docker מותאמות אישית עבור Android. במקרים כאלה, אנו משאירים רק הפצה וניתוח קריסות ב-AppCenter, ומיישמים את הצינור המורכב דרך GitHub Actions. אתה מקבל את הטוב משני העולמות: הגמישות של CI חיצוני והנוחות של AppCenter למסירה לבודקים.
מה כלול בהגדרת CI/CD?
עם סיום, אתה מקבל:
- צינור AppCenter עובד עם טריגרים על ענפי main/release
- חתימת iOS מוגדרת (תעודות ופרופילי provisioning)
- בדיקות UI על Device Farm (עד 5 מכשירים לכל פלטפורמה)
- הפצה אוטומטית לקבוצות בודקים (TestFlight/Google Play לפי בקשה)
- משתני סביבה לסודות (מפתחות API, תעודות)
- סקריפטים לאחר בנייה להתראות והפצה
- תיעוד התהליך ואנשי קשר לתמיכה
- שעת הדרכה אחת לצוות שלך
לוח זמנים ותמחור
לוח הזמנים המשוער הוא 2 עד 5 ימים, תלוי במורכבות הפרויקט. התמחור מחושב באופן אישי לאחר הערכה. לצוות שלנו יש ניסיון של 5+ שנים בפיתוח מובייל והוא יישם CI/CD עבור 20+ פרויקטים. הזמינו את ההגדרה — קבלו ייעוץ להגדרת CI/CD עוד היום.







