บทแนะนำของ Bazel: สร้างแอป iOS

บทแนะนำนี้ครอบคลุมวิธีสร้างแอป iOS ที่ใช้งานง่ายโดยใช้ Bazel

สิ่งที่คุณจะได้เรียนรู้

ในบทแนะนำนี้ คุณจะได้เรียนรู้วิธีการต่อไปนี้

  • ตั้งค่าสภาพแวดล้อมโดยการติดตั้ง Bazel และ Xcode และดาวน์โหลดโปรเจ็กต์ตัวอย่าง
  • ตั้งค่าพื้นที่ทำงานของ Bazel ที่มีซอร์สโค้ดสำหรับแอป และไฟล์ WORKSPACE ที่ระบุระดับบนสุดของไดเรกทอรีพื้นที่ทำงาน
  • อัปเดตไฟล์ WORKSPACE ให้มีการอ้างอิงไปยังทรัพยากร Dependency ภายนอกที่จำเป็น
  • สร้างไฟล์ BUILD
  • เรียกใช้ Bazel เพื่อสร้างแอปสำหรับเครื่องจำลองและอุปกรณ์ iOS
  • เรียกใช้แอปในเครื่องมือจำลองและบนอุปกรณ์ iOS

ตั้งค่าสภาพแวดล้อมของคุณ

ในการเริ่มต้น ให้ติดตั้ง Bazel และ Xcode และรับโปรเจ็กต์ตัวอย่าง

ติดตั้ง Bazel

ทำตามวิธีการติดตั้งเพื่อติดตั้ง Bazel และทรัพยากร Dependency

ติดตั้ง Xcode

ดาวน์โหลดและติดตั้ง Xcode Xcode มีคอมไพเลอร์, SDK และเครื่องมืออื่นๆ ที่ Bazel ต้องใช้ในการสร้างแอปพลิเคชันของ Apple

รับโปรเจ็กต์ตัวอย่าง

นอกจากนี้ คุณจะต้องรับโปรเจ็กต์ตัวอย่างสำหรับบทแนะนำจาก GitHub ที่เก็บ GitHub มี 2 สาขา ได้แก่ source-only และ main สาขา source-only มีไฟล์ต้นทางสำหรับโปรเจ็กต์เท่านั้น คุณจะได้ใช้ไฟล์ใน Branch นี้ในบทแนะนำนี้ สาขา 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

ตั้งค่าพื้นที่ทำงาน

พื้นที่ทำงานคือไดเรกทอรีที่มีไฟล์ต้นฉบับสำหรับโปรเจ็กต์ซอฟต์แวร์อย่างน้อย 1 โปรเจ็กต์ รวมถึงไฟล์ WORKSPACE และไฟล์ BUILD ที่มีวิธีการที่ Bazel ใช้ในการสร้างซอฟต์แวร์ พื้นที่ทำงานอาจมีลิงก์สัญลักษณ์ไปยังไดเรกทอรีเอาต์พุตด้วย

ไดเรกทอรีพื้นที่ทำงานอาจอยู่ที่ใดก็ได้ในระบบไฟล์และแสดงโดยไฟล์ WORKSPACE อยู่ที่รูท ในบทแนะนำนี้ ไดเรกทอรีพื้นที่ทำงานของคุณคือ $HOME/examples/tutorial/ ซึ่งมีตัวอย่างไฟล์โปรเจ็กต์ที่คุณโคลนจากที่เก็บ GitHub ในขั้นตอนก่อนหน้า

โปรดตั้งค่าตัวแปรสภาพแวดล้อม $WORKSPACE ตอนนี้เลยเพื่ออ้างถึงไดเรกทอรีพื้นที่ทํางาน ป้อนคำสั่งในบรรทัดคำสั่งดังนี้

export WORKSPACE=$HOME/examples/tutorial

สร้างไฟล์ WORKSPACE

พื้นที่ทำงานทุกแห่งต้องมีไฟล์ข้อความชื่อ WORKSPACE ในไดเรกทอรีพื้นที่ทำงานระดับบนสุด ไฟล์นี้อาจว่างเปล่าหรือมีการอ้างอิงไปยังทรัพยากร Dependency ภายนอกที่ต้องใช้ในการสร้างซอฟต์แวร์

สำหรับตอนนี้ คุณจะสร้างไฟล์ WORKSPACE เปล่า ซึ่งใช้เพื่อระบุไดเรกทอรีของพื้นที่ทำงาน ในขั้นตอนหลังจากนี้ คุณจะได้อัปเดตไฟล์เพื่อเพิ่มข้อมูลทรัพยากร Dependency ภายนอก

ป้อนข้อมูลต่อไปนี้ในบรรทัดคำสั่ง

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

การดำเนินการนี้จะสร้างและเปิดไฟล์ WORKSPACE ที่ว่างเปล่า

อัปเดตไฟล์ WORKSPACE

หากต้องการสร้างแอปพลิเคชันสำหรับอุปกรณ์ Apple ทาง Bazel ต้องดึงกฎการสร้างของ 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

เพิ่มคำสั่งโหลดกฎ

Bazel ต้องโหลดกฎบิลด์จากที่เก็บ GitHub ทุกครั้งที่บิลด์ทำงานเพื่อสร้างเป้าหมาย iOS หากต้องการให้กฎเหล่านี้ใช้ได้กับโปรเจ็กต์ ให้เพิ่มคำสั่งโหลดต่อไปนี้ที่ส่วนต้นของไฟล์ 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 เปิดตัวและสร้างแอปตัวอย่าง ระหว่างกระบวนการบิลด์ เอาต์พุตของแอปจะปรากฏคล้ายกับรายการต่อไปนี้

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 ได้แล้ว ก่อนอื่น ให้สร้างโปรเจ็กต์ Xcode โดยใช้ Tulsi

จากนั้นเปิดโปรเจ็กต์ใน Xcode แล้วเลือกเครื่องมือจำลอง iOS เป็นรูปแบบรันไทม์ แล้วคลิก Run

สร้างแอปสำหรับอุปกรณ์

หากต้องการสร้างแอปให้ติดตั้งและเปิดใช้ในอุปกรณ์ 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

วิธีนี้จะสร้างแอปเป็นไบนารีแบบไขมัน หากต้องการสร้างสำหรับสถาปัตยกรรมของอุปกรณ์ที่เจาะจง ให้กำหนดในตัวเลือกบิลด์

หากต้องการสร้างสำหรับ 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