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

รายงานปัญหา ดูซอร์สโค้ด รุ่น Nightly · 8.0 7.4 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

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

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

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

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

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

ติดตั้ง Bazel

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

ติดตั้ง Xcode

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

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

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

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

เวิร์กช็อปคือไดเรกทอรีที่มีไฟล์ต้นฉบับสำหรับโปรเจ็กต์ซอฟต์แวร์อย่างน้อย 1 โปรเจ็กต์ รวมถึงไฟล์ 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

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

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

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