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