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

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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

  1. ไปที่บัญชีนักพัฒนาแอปของ Apple แล้วดาวน์โหลด Provisioning Profile ที่เหมาะสมสำหรับอุปกรณ์ ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ 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

ซึ่งจะสร้างแอปเป็นไบนารีแบบ 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