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