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