บทแนะนำนี้ครอบคลุมวิธีสร้างแอป iOS อย่างง่ายโดยใช้ Bazel
สิ่งที่คุณจะได้เรียนรู้
ในบทแนะนำนี้ คุณจะได้เรียนรู้วิธีทำสิ่งต่อไปนี้
- ตั้งค่าสภาพแวดล้อมโดยการติดตั้ง Bazel และ Xcode รวมถึงดาวน์โหลด โปรเจ็กต์ตัวอย่าง
- ตั้งค่า พื้นที่ทำงานของ Bazel ที่มีซอร์สโค้ด
สำหรับแอปและไฟล์
WORKSPACE
ที่ระบุระดับบนสุดของ ไดเรกทอรีพื้นที่ทำงาน - อัปเดตไฟล์
WORKSPACE
ให้มีข้อมูลอ้างอิงถึง ทรัพยากร Dependency ภายนอกที่จำเป็น - สร้างไฟล์
BUILD
- เรียกใช้ Bazel เพื่อสร้างแอปสำหรับโปรแกรมจำลองและอุปกรณ์ iOS
- เรียกใช้แอปในเครื่องจำลองและในอุปกรณ์ iOS
ตั้งค่าสภาพแวดล้อม
หากต้องการเริ่มต้นใช้งาน ให้ติดตั้ง Bazel และ Xcode แล้วรับโปรเจ็กต์ตัวอย่าง
ติดตั้ง Bazel
ทำตามวิธีการติดตั้งเพื่อติดตั้ง Bazel และ การอ้างอิง
ติดตั้ง Xcode
ดาวน์โหลดและติดตั้ง Xcode Xcode มีคอมไพเลอร์, SDK และเครื่องมืออื่นๆ ที่ Bazel ต้องใช้ในการสร้างแอปพลิเคชัน Apple
รับโปรเจ็กต์ตัวอย่าง
นอกจากนี้ คุณยังต้องดาวน์โหลดโปรเจ็กต์ตัวอย่างสำหรับบทแนะนำจาก GitHub ด้วย ที่เก็บข้อมูล GitHub
มี 2 สาขา ได้แก่ source-only
และ main
source-only
branch
มีเฉพาะไฟล์ต้นฉบับของโปรเจ็กต์ คุณจะใช้ไฟล์ในกิ่งก้านนี้ในบทแนะนำนี้ สาขา main
มีทั้งไฟล์ต้นฉบับและไฟล์ WORKSPACE
และ BUILD
ของ Bazel ที่เสร็จสมบูรณ์แล้ว คุณสามารถใช้ไฟล์ใน
สาขานี้เพื่อตรวจสอบงานเมื่อทำตามขั้นตอนในบทแนะนำเสร็จแล้ว
ป้อนคำสั่งต่อไปนี้ในบรรทัดคำสั่งเพื่อรับไฟล์ในสาขา 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
ที่ว่างเปล่า ซึ่งมีไว้เพื่อ
ระบุไดเรกทอรีพื้นที่ทำงาน ในขั้นตอนต่อๆ ไป คุณจะอัปเดตไฟล์เพื่อเพิ่ม
ข้อมูลทรัพยากร 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 Simulator เป็นสคีมรันไทม์ แล้วคลิกเรียกใช้
สร้างแอปสำหรับอุปกรณ์
หากต้องการสร้างแอปเพื่อให้ติดตั้งและเปิดใช้ในอุปกรณ์ iOS ได้ Bazel ต้องมี Provisioning Profile ที่เหมาะสมสำหรับรุ่นอุปกรณ์นั้น ทำสิ่งต่อไปนี้:
ไปที่บัญชีนักพัฒนาแอปของ Apple แล้วดาวน์โหลด Provisioning Profile ที่เหมาะสมสำหรับอุปกรณ์ ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ Apple
ย้ายโปรไฟล์ไปยัง
$WORKSPACE
(ไม่บังคับ) เพิ่มโปรไฟล์ลงในไฟล์
.gitignore
เพิ่มบรรทัดต่อไปนี้ลงในเป้าหมาย
ios_application
ในไฟล์BUILD
provisioning_profile = "<your_profile_name>.mobileprovision",
ตอนนี้ให้สร้างแอปสำหรับอุปกรณ์ของคุณโดยทำดังนี้
bazel build //ios-app:ios-app --ios_multi_cpus=armv7,arm64
ซึ่งจะสร้างแอปเป็นไบนารีแบบ Fat หากต้องการสร้างสำหรับสถาปัตยกรรมอุปกรณ์ที่เฉพาะเจาะจง ให้ระบุสถาปัตยกรรมนั้นในตัวเลือกการสร้าง
หากต้องการสร้างสำหรับ 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