מדריך Bazel: בניית אפליקציה ל-iOS

המדריך הזה מסביר איך לבנות אפליקציה פשוטה ל-iOS באמצעות Bazel.

מה תלמדו

במדריך הזה לומדים איך:

  • הגדרת הסביבה על ידי התקנת Bazel ו-Xcode והורדת הפרויקט לדוגמה
  • הגדרת סביבת עבודה של Bazel שהכילה את קוד המקור של האפליקציה, וקובץ WORKSPACE המזהה את הרמה העליונה של הספרייה בסביבת העבודה
  • יש לעדכן את הקובץ WORKSPACE כך שיכלול הפניות לתלויות החיצוניות הנדרשות
  • יצירת קובץ BUILD
  • אפשר להריץ את Bazel כדי לבנות את האפליקציה לסימולטור ולמכשיר iOS
  • אפשר להפעיל את האפליקציה בסימולטור ובמכשיר iOS

הגדרת הסביבה שלך

כדי להתחיל, יש להתקין את Bazel ו-Xcode ולקבל את הפרויקט לדוגמה.

התקנת בזל

פועלים לפי הוראות ההתקנה כדי להתקין את Bazel ואת יחסי התלות שלו.

התקנת Xcode

מורידים ומתקינים את ה-Xcode. Xcode מכיל את מהדרים, ערכות SDK וכלים אחרים ש-Bazel זקוקה להם לצורך בניית אפליקציות של Apple.

קבל את הפרויקט לדוגמה

כמו כן, צריך לקבל את הפרויקט לדוגמה של המדריך מ-GitHub. במאגר GitHub יש שני סניפים: source-only ו-main. הסניף של source-only מכיל את קובצי המקור של הפרויקט בלבד. הקובץ הזה ישמש את הסניף שלך במדריך זה. הסניף של main מכיל גם את קובצי המקור וגם את קובצי Bazel WORKSPACE ו-BUILD שהושלמו. ניתן להשתמש בקבצים שבסניף הזה כדי לבדוק את העבודה לאחר השלמת שלבי המדריך.

הזינו את הפרטים הבאים בשורת הפקודה כדי לקבל את הקבצים בsource-only סניף:

cd $HOME
git clone -b source-only https://github.com/bazelbuild/examples

הפקודה git clone יוצרת ספרייה בשם $HOME/examples/. הספרייה הזו מכילה כמה פרויקטים לדוגמה של Bazel. קובצי הפרויקט של המדריך הזה נמצאים ב$HOME/examples/tutorial/ios-app.

הגדרה של סביבת עבודה

סביבת עבודה היא ספרייה שמכילה את קובצי המקור עבור פרויקט תוכנה אחד או יותר, וכן קובץ WORKSPACE ו-BUILD קבצים שמכילים את ההוראות. בזל משתמשת בבניית התוכנה. סביבת העבודה עשויה גם לכלול קישורים סמליים לספריות פלט.

ניתן למצוא ספרייה של סביבת עבודה בכל מקום במערכת הקבצים, והוא נקבע על ידי נוכחות הקובץ WORKSPACE בשורשו. במדריך הזה ספריית סביבת העבודה שלך היא $HOME/examples/tutorial/, שמכילה את קובצי הפרויקט לדוגמה ששכפלת ממאגר GitHub בשלב הקודם.

לנוחיותך, עליך להגדיר את משתנה הסביבה $WORKSPACE עכשיו כדי לעיין בספרייה של סביבת העבודה. בשורת הפקודה מזינים:

export WORKSPACE=$HOME/examples/tutorial

יצירת קובץ WORKSPACE

לכל סביבת עבודה חייב להיות קובץ טקסט בשם WORKSPACE, הממוקם בספרייה של סביבת העבודה ברמה העליונה. הקובץ הזה יכול להיות ריק או שהוא כולל הפניות ליחסי תלות חיצוניים הנדרשים ליצירת התוכנה.

בשלב זה, יוצרים קובץ WORKSPACE ריק שבעזרתו אפשר לזהות את הספרייה של סביבת העבודה. מאוחר יותר, הקובץ יעודכן במידע על תלות חיצונית.

מזינים את הפקודה הבאה בשורת הפקודה:

touch $WORKSPACE/WORKSPACE
open -a Xcode $WORKSPACE/WORKSPACE

פעולה זו יוצרת ופותחת את קובץ ה-WORKSPACE הריק.

עדכון קובץ WORKSPACE

כדי לבנות אפליקציות למכשירי Apple, חברת Bazel צריכה לשלוף את כללי ה-build האחרונים של Apple ממאגר הנתונים שלה ב-GitHub. כדי לעשות זאת, יש להוסיף את הכללים git_repository הבאים לקובץ WORKSPACE:

load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")

git_repository(
    name = "build_bazel_rules_apple",
    remote = "https://github.com/bazelbuild/rules_apple.git",
    tag = "0.19.0",
)

git_repository(
    name = "build_bazel_rules_swift",
    remote = "https://github.com/bazelbuild/rules_swift.git",
    tag = "0.13.0",
)

git_repository(
    name = "build_bazel_apple_support",
    remote = "https://github.com/bazelbuild/apple_support.git",
    tag = "0.7.2",
)

git_repository(
    name = "bazel_skylib",
    remote = "https://github.com/bazelbuild/bazel-skylib.git",
    tag = "0.9.0",
)

בדיקת קובצי המקור

עיין בקובצי המקור של האפליקציה הממוקמים ב-$WORKSPACE/ios-app/UrlGet. גם עכשיו, אתם בוחנים את הקבצים עכשיו כדי להכיר את המבנה של האפליקציה. אין צורך לערוך אף אחד מקובצי המקור כדי להשלים את המדריך.

יצירת קובץ BUILD

בשורת פקודה, פותחים קובץ BUILD חדש לעריכה:

touch $WORKSPACE/ios-app/BUILD
open -a Xcode $WORKSPACE/ios-app/BUILD

הוספה של הצהרת הטעינה של הכלל

כדי לבנות יעדי iOS, ב-Bazel צריכים לטעון כללי build ממאגר הנתונים של GitHub בכל פעם ש-build פועל. כדי שהכללים האלה יהיו זמינים לפרויקט שלך, יש להוסיף את הצהרת הטעינה הבאה בתחילת הקובץ BUILD:

load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")

עליך לטעון רק את הכלל ios_application מפני שהכלל objc_library מוכלל בחבילה של Bazel.

הוספה של כלל objc_library

Bazel מספקת כמה כללי בנייה שבהם תוכל להשתמש כדי לבנות אפליקציה לפלטפורמת iOS. במדריך הזה עליך להשתמש תחילה בכלל objc_library כדי לספר ל-Bazel איך לבנות ספרייה סטטית מקוד המקור של האפליקציה וקובצי Xib. לאחר מכן, צריך להשתמש בכלל ios_application כדי לציין איך לבנות את הקובץ הבינארי של האפליקציה ואת חבילת .ipa.

יש להוסיף את הפרטים הבאים לקובץ BUILD:

objc_library(
    name = "UrlGetClasses",
    srcs = [
         "UrlGet/AppDelegate.m",
         "UrlGet/UrlGetViewController.m",
         "UrlGet/main.m",
    ],
    hdrs = glob(["UrlGet/*.h"]),
    data = ["UrlGet/UrlGetViewController.xib"],
)

חשוב לשים לב לשם של הכלל UrlGetClasses.

צריך להוסיף כלל ios_application

הכלל של ios_application יוצר את הקובץ הבינארי של האפליקציה ויוצר את קובץ ה-.ipa של החבילה.

יש להוסיף את הפרטים הבאים לקובץ BUILD:

ios_application(
    name = "ios-app",
    bundle_id = "Google.UrlGet",
    families = [
        "iphone",
        "ipad",
    ],
    minimum_os_version = "9.0",
    infoplists = [":UrlGet/UrlGet-Info.plist"],
    visibility = ["//visibility:public"],
    deps = [":UrlGetClasses"],
)

שים לב כיצד המאפיין deps מתייחס לפלט של הכלל UrlGetClasses שהוספת לקובץ BUILD שלמעלה.

עכשיו שומרים את הקובץ וסוגרים אותו. אפשר להשוות את הקובץ BUILD אל הדוגמה שהושלמה בסניף main של GitHub.

בנייה ופריסה של האפליקציה

עכשיו אתם מוכנים לבנות את האפליקציה שלכם ולפרוס אותה בסימולטור וגם במכשיר iOS.

האפליקציה המובנית ממוקמת בספרייה $WORKSPACE/bazel-bin.

קובצי WORKSPACE ו-BUILD שהושלמו עבור המדריך הזה נמצאים בסניף הראשי של GitHub. תוכלו להשוות את העבודה שלכם לקבצים שהושלמו כדי לקבל עזרה נוספת או לפתור בעיות.

פיתוח האפליקציה של הסימולטור

חשוב לוודא שספריית העבודה הנוכחית נמצאת בסביבת העבודה של Bazel:

cd $WORKSPACE

כדי ליצור אפליקציה לדוגמה, מזינים את הפרטים הבאים:

bazel build //ios-app:ios-app

Bazel פותחת ובונה את האפליקציה לדוגמה. במהלך ה-build, הפלט שלו יוצג באופן הבא:

INFO: Found 1 target...
Target //ios-app:ios-app up-to-date:
  bazel-bin/ios-app/ios-app.ipa
INFO: Elapsed time: 0.565s, Critical Path: 0.44s

איך למצוא את פלטי ה-build

הקובץ .ipa ופלטים אחרים נמצאים בספרייה של $WORKSPACE/bazel-bin/ios-app.

הפעלה וניפוי באגים באפליקציה בסימולטור

מעכשיו אפשר להריץ את האפליקציה מ-Xcode באמצעות הסימולטור של iOS. ראשית, יוצרים פרויקט Xcode באמצעות Tulsi.

לאחר מכן, פותחים את הפרויקט ב-Xcode, בוחרים סימולטור של iOS כסכימה של זמן ריצה ולוחצים על הפעלה.

פיתוח האפליקציה למכשיר

כדי לבנות את האפליקציה כך שתותקן ותושק במכשיר iOS, ל-Bazel נדרשת פרופיל ניהול תצורה מתאים לדגם המכשיר הזה. בצע את הפעולות הבאות:

  1. עוברים אל חשבון המפתח ב-Apple ומורידים את פרופיל ניהול ההקצאות המתאים למכשיר שלכם. מידע נוסף זמין בתיעוד של Apple.

  2. העברת הפרופיל שלך אל $WORKSPACE.

  3. (אופציונלי) מוסיפים את הפרופיל לקובץ .gitignore.

  4. הוסף את השורה הבאה ליעד ios_application בקובץ BUILD שלך:

    provisioning_profile = "<your_profile_name>.mobileprovision",
    

עכשיו צריך לבנות את האפליקציה למכשיר:

bazel build //ios-app:ios-app --ios_multi_cpus=armv7,arm64

ה אפליקציה הזו יוצרת בינארית של שומן. כדי לבנות ארכיטקטורת מכשיר ספציפית, יש להקצות אותה באפשרויות ה-build.

כדי ליצור גרסת Xcode ספציפית, יש להשתמש באפשרות --xcode_version. כדי לבנות גרסת SDK ספציפית, יש להשתמש באפשרות --ios_sdk_version. האפשרות --xcode_version מספיקה ברוב התרחישים.

כדי לציין גרסה מינימלית הנדרשת ל-iOS, יש להוסיף את הפרמטר minimum_os_version לכלל הבנייה ios_application בקובץ BUILD.

אפשר גם להשתמש בכלי Tulsi כדי לבנות את האפליקציה באמצעות GUI במקום בשורת הפקודה.

התקנת האפליקציה במכשיר

הדרך הקלה ביותר להתקין את האפליקציה במכשיר היא להפעיל את Xcode ולהשתמש בפקודה Windows > Devices. בחרו את המכשיר המחובר שלכם מהרשימה מימין, ולאחר מכן הוסיפו את האפליקציה על ידי לחיצה עלהוספה (סימן חיבור) בקטע "אפליקציות מותקנות" ובחירה באפשרות.ipa קובץ שבנית.

אם התקנת האפליקציה שלך נכשלה במכשיר, ודא שאתה מציין את פרופיל ניהול ההקצאות הנכון בקובץ BUILD (שלב 4 בקטע הקודם).

אם ההפעלה של האפליקציה נכשלה, ודא שהמכשיר שלך הוא חלק מפרופיל ניהול התצורה שלך. לחצן View Device Logs במסך Devices ב-Xcode עשוי לספק מידע אחר על מה שהשתבש.

קריאה נוספת

לפרטים נוספים, ניתן לעיין בסניף הראשי במאגר GitHub.