آموزش Bazel: ساخت اپلیکیشن iOS

این آموزش نحوه ساخت یک برنامه ساده iOS با استفاده از Bazel را پوشش می دهد.

چیزی که یاد خواهید گرفت

در این آموزش یاد می گیرید که چگونه:

  • با نصب Bazel و Xcode و دانلود نمونه پروژه محیط را راه اندازی کنید
  • یک فضای کاری Bazel که حاوی کد منبع برنامه و یک فایل WORKSPACE است که سطح بالای فهرست فضای کاری را مشخص می کند تنظیم کنید.
  • فایل WORKSPACE را به‌روزرسانی کنید تا حاوی ارجاعاتی به وابستگی‌های خارجی مورد نیاز باشد
  • یک فایل BUILD ایجاد کنید
  • Bazel را اجرا کنید تا اپلیکیشن شبیه ساز و یک دستگاه iOS بسازید
  • برنامه را در شبیه ساز و در دستگاه iOS اجرا کنید

محیط خود را تنظیم کنید

برای شروع، Bazel و Xcode را نصب کنید و نمونه پروژه را دریافت کنید.

Bazel را نصب کنید

دستورالعمل های نصب را برای نصب Bazel و وابستگی های آن دنبال کنید.

Xcode را نصب کنید

Xcode را دانلود و نصب کنید. Xcode شامل کامپایلرها، SDKها و سایر ابزارهای مورد نیاز Bazel برای ساخت برنامه های اپل است.

نمونه پروژه را دریافت کنید

همچنین باید نمونه پروژه آموزش را از گیت هاب دریافت کنید. مخزن 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 دایرکتوری است که حاوی فایل‌های منبع یک یا چند پروژه نرم‌افزاری و همچنین یک فایل WORKSPACE و فایل‌های BUILD است که حاوی دستورالعمل‌هایی است که Bazel برای ساختن نرم‌افزار استفاده می‌کند. فضای کاری ممکن است حاوی پیوندهای نمادین به دایرکتوری های خروجی نیز باشد.

دایرکتوری فضای کاری می تواند در هر نقطه از سیستم فایل شما قرار داشته باشد و با وجود فایل WORKSPACE در ریشه آن مشخص می شود. در این آموزش، دایرکتوری فضای کاری شما $HOME/examples/tutorial/ است که حاوی نمونه فایل های پروژه ای است که در مرحله قبل از مخزن GitHub کلون کرده اید.

برای راحتی شما، متغیر محیطی $WORKSPACE را اکنون تنظیم کنید تا به دایرکتوری فضای کاری شما مراجعه کند. در خط فرمان وارد کنید:

export WORKSPACE=$HOME/examples/tutorial

یک فایل WORKSPACE ایجاد کنید

هر فضای کاری باید یک فایل متنی به نام WORKSPACE داشته باشد که در دایرکتوری فضای کاری سطح بالا قرار دارد. این فایل ممکن است خالی باشد یا ممکن است حاوی ارجاعاتی به وابستگی های خارجی مورد نیاز برای ساخت نرم افزار باشد.

در حال حاضر، شما یک فایل WORKSPACE خالی ایجاد خواهید کرد، که به سادگی برای شناسایی دایرکتوری فضای کاری خدمت می کند. در مراحل بعدی، فایل را برای اضافه کردن اطلاعات وابستگی خارجی به‌روزرسانی خواهید کرد.

در خط فرمان موارد زیر را وارد کنید:

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

این فایل خالی WORKSPACE را ایجاد و باز می کند.

فایل WORKSPACE را به روز کنید

برای ساخت برنامه‌های کاربردی برای دستگاه‌های اپل، Bazel باید آخرین قوانین ساخت اپل را از مخزن 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 باید هر زمان که بیلد اجرا می شود، قوانین ساخت را از مخزن GitHub خود بارگیری کند. برای در دسترس قرار دادن این قوانین برای پروژه خود، عبارت بارگذاری زیر را به ابتدای فایل BUILD خود اضافه کنید:

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

شما فقط باید قانون ios_application را بارگیری کنید زیرا قانون ios_application در بسته objc_library شده است.

یک قانون 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 برنامه نمونه را راه اندازی و می سازد. در طول فرآیند ساخت، خروجی آن مشابه موارد زیر ظاهر می شود:

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

خروجی های ساخت را پیدا کنید

فایل .ipa و سایر خروجی ها در فهرست راهنمای $WORKSPACE/bazel-bin/ios-app قرار دارند.

برنامه را در شبیه ساز اجرا و اشکال زدایی کنید

اکنون می توانید برنامه را از Xcode با استفاده از شبیه ساز iOS اجرا کنید. ابتدا با استفاده از Tulsi یک پروژه Xcode ایجاد کنید.

سپس، پروژه را در Xcode باز کنید، یک شبیه ساز iOS را به عنوان طرح زمان اجرا انتخاب کنید و روی Run کلیک کنید.

برنامه را برای یک دستگاه بسازید

برای ساخت برنامه خود به گونه‌ای که روی دستگاه iOS نصب و راه‌اندازی شود، Bazel به نمایه تأمین مناسب برای آن مدل دستگاه نیاز دارد. موارد زیر را انجام دهید:

  1. به حساب توسعه دهنده اپل خود بروید و نمایه تهیه مناسب دستگاه خود را دانلود کنید. برای اطلاعات بیشتر به مستندات اپل مراجعه کنید.

  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

این برنامه را به عنوان یک باینری چربی می سازد. برای ساختن برای معماری دستگاه خاص، آن را در گزینه های ساخت مشخص کنید.

برای ساخت نسخه Xcode خاص، از گزینه --xcode_version استفاده کنید. برای ساخت نسخه SDK خاص، از گزینه --ios_sdk_version استفاده کنید. گزینه --xcode_version در اکثر سناریوها کافی است.

برای تعیین حداقل نسخه iOS مورد نیاز، پارامتر minimum_os_version را به قانون ساخت ios_application در فایل BUILD خود اضافه کنید.

همچنین می توانید از Tulsi برای ساخت اپلیکیشن خود با استفاده از رابط کاربری گرافیکی به جای خط فرمان استفاده کنید.

برنامه را روی دستگاه نصب کنید

ساده ترین راه برای نصب برنامه روی دستگاه، راه اندازی Xcode و استفاده از دستور Windows > Devices است. دستگاه وصل شده خود را از لیست سمت چپ انتخاب کنید، سپس با کلیک کردن روی دکمه افزودن (علامت به اضافه) در زیر «برنامه‌های نصب‌شده» و انتخاب فایل .ipa که ساخته‌اید، برنامه را اضافه کنید.

اگر برنامه شما بر روی دستگاه شما نصب نشد، مطمئن شوید که نمایه تامین صحیح را در فایل BUILD خود مشخص کرده اید (مرحله 4 در بخش قبل).

اگر برنامه‌تان راه‌اندازی نشد، مطمئن شوید که دستگاهتان بخشی از نمایه تأمین‌کننده شما است. دکمه View Device Logs در صفحه Devices در Xcode ممکن است اطلاعات دیگری را در مورد اینکه چه اشتباهی رخ داده است ارائه دهد.

بیشتر خواندن

برای جزئیات بیشتر، شعبه اصلی مخزن GitHub را ببینید.