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

รายงานปัญหา ดูแหล่งที่มา /3} /4} {3/4} {3/4} {3/4} {3/4} /4.

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

ป้อนข้อมูลต่อไปนี้ที่บรรทัดคำสั่งเพื่อรับไฟล์ใน Branch 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 คือไดเรกทอรีที่มีไฟล์แหล่งที่มาของโปรเจ็กต์ซอฟต์แวร์อย่างน้อย 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

เพิ่มข้อความโหลดกฎ

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

จากนั้นเปิดโปรเจ็กต์ใน Xcode เลือก iOS Simulator เป็นรูปแบบรันไทม์ แล้วคลิก 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