บทแนะนำนี้ครอบคลุมวิธีสร้างแอป 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 ต้องใช้โปรไฟล์การจัดสรรที่เหมาะสมสำหรับรุ่นอุปกรณ์ดังกล่าว ทำสิ่งต่อไปนี้:
ไปที่บัญชีนักพัฒนาแอป Apple และดาวน์โหลดโปรไฟล์การจัดสรรที่เหมาะสมสำหรับอุปกรณ์ของคุณ ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ Apple
ย้ายโปรไฟล์ของคุณไปยัง
$WORKSPACE
(ไม่บังคับ) เพิ่มโปรไฟล์ลงในไฟล์
.gitignore
เพิ่มบรรทัดต่อไปนี้ลงในเป้าหมาย
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