บทแนะนำของ Bazel: สร้างแอป iOS

7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

  1. โดยไปที่บัญชีนักพัฒนาแอป Apple และดาวน์โหลดโปรไฟล์การจัดสรรที่เหมาะสมสำหรับอุปกรณ์ ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ Apple

  2. ย้ายโปรไฟล์ของคุณไปยัง $WORKSPACE

  3. (ไม่บังคับ) เพิ่มโปรไฟล์ลงในไฟล์ .gitignore

  4. เพิ่มบรรทัดต่อไปนี้ลงในเป้าหมาย 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