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

วันที่ รายงานปัญหา ดูแหล่งที่มา ตอนกลางคืน · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

บทแนะนำนี้ครอบคลุมวิธีสร้างแอป 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 ไฟล์เสร็จสมบูรณ์แล้ว คุณสามารถใช้ไฟล์ใน สาขาเพื่อตรวจสอบงานเมื่อคุณทำตามขั้นตอนบทแนะนำเรียบร้อยแล้ว

ป้อนข้อมูลต่อไปนี้ที่บรรทัดคำสั่งเพื่อรับไฟล์ใน 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 อยู่ที่รูท ในบทแนะนำนี้ ไดเรกทอรี Workspace คือ $HOME/examples/tutorial/ ซึ่งมีตัวอย่าง ไฟล์โปรเจ็กต์ที่คุณโคลนจากที่เก็บ GitHub ในขั้นตอนก่อนหน้า

เพื่อความสะดวกของคุณ ให้ตั้งค่าตัวแปรสภาพแวดล้อม $WORKSPACE ตอนนี้เพื่ออ้างอิงถึง ไดเรกทอรีพื้นที่ทำงานของคุณ ในบรรทัดคำสั่ง ให้ป้อนข้อมูลต่อไปนี้

export WORKSPACE=$HOME/examples/tutorial

สร้างไฟล์ WORKSPACE

พื้นที่ทำงานทุกแห่งต้องมีไฟล์ข้อความชื่อ WORKSPACE อยู่ในระดับบนสุด Google 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 กับ ตัวอย่างที่สมบูรณ์ ใน Branch ของ 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 เป็นรูปแบบรันไทม์ แล้วคลิก Run

สร้างแอปสำหรับอุปกรณ์

หากต้องการสร้างแอปให้ติดตั้งและเปิดใช้ในอุปกรณ์ 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