Hướng dẫn của Bazel: Tạo ứng dụng iOS

Báo cáo vấn đề Xem nguồn Hằng đêm · 7,3 · 7.2 · 7.1 · 7 · 6,5

Hướng dẫn này đề cập đến cách tạo một ứng dụng iOS đơn giản bằng Bazel.

Kiến thức bạn sẽ học được

Trong hướng dẫn này, bạn sẽ tìm hiểu cách:

  • Thiết lập môi trường bằng cách cài đặt Bazel và Xcode, rồi tải dự án mẫu
  • Thiết lập một không gian làm việc Bazel có chứa mã nguồn cho ứng dụng và một tệp WORKSPACE xác định cấp cao nhất của thư mục workspace
  • Cập nhật tệp WORKSPACE để chứa tham chiếu đến tham chiếu đến phần phụ thuộc bên ngoài
  • Tạo một tệp BUILD
  • Chạy Bazel để tạo ứng dụng cho trình mô phỏng và thiết bị iOS
  • Chạy ứng dụng trong trình mô phỏng và trên thiết bị iOS

Thiết lập môi trường

Để bắt đầu, hãy cài đặt Bazel và Xcode rồi tải dự án mẫu.

Cài đặt Bazel

Làm theo hướng dẫn cài đặt để cài đặt Bazel và các phần phụ thuộc của nó.

Cài đặt Xcode

Tải xuống và cài đặt Xcode. Xcode chứa trình biên dịch, SDK và các công cụ khác mà Bazel yêu cầu để xây dựng Các ứng dụng của Apple.

Nhận dự án mẫu

Bạn cũng cần tải dự án mẫu cho phần hướng dẫn trên GitHub. GitHub kho lưu trữ có hai nhánh: source-onlymain. Nhánh source-only chỉ chứa các tệp nguồn cho dự án. Bạn sẽ sử dụng các tệp trong trong hướng dẫn này. Nhánh main chứa cả hai tệp nguồn và đã hoàn tất các tệp Bazel WORKSPACEBUILD. Bạn có thể sử dụng các tệp trong nhánh để kiểm tra công việc của bạn khi đã hoàn tất các bước hướng dẫn.

Nhập nội dung sau vào dòng lệnh để lấy tệp trong source-only nhánh:

cd $HOME
git clone -b source-only https://github.com/bazelbuild/examples

Lệnh git clone tạo một thư mục có tên $HOME/examples/. Chiến dịch này Thư mục chứa một số dự án mẫu cho Bazel. Các tệp dự án cho việc này hướng dẫn nằm trong $HOME/examples/tutorial/ios-app.

Thiết lập không gian làm việc

Không gian làm việc là một thư mục chứa tệp nguồn cho một hoặc nhiều dự án phần mềm, cũng như tệp WORKSPACEBUILD chứa các hướng dẫn mà Bazel sử dụng để tạo phần mềm. Không gian làm việc cũng có thể chứa các đường liên kết tượng trưng đến đầu ra .

Thư mục không gian làm việc có thể nằm ở bất kỳ đâu trên hệ thống tệp của bạn và được biểu thị khi có tệp WORKSPACE ở thư mục gốc. Trong hướng dẫn này, thư mục không gian làm việc là $HOME/examples/tutorial/, có chứa mẫu các tệp dự án mà bạn đã sao chép từ kho lưu trữ GitHub ở bước trước.

Để thuận tiện, hãy đặt biến môi trường $WORKSPACE ngay bây giờ để tham chiếu không gian làm việc của bạn. Tại dòng lệnh, hãy nhập:

export WORKSPACE=$HOME/examples/tutorial

Tạo một tệp WORKSPACE

Mỗi không gian làm việc phải có một tệp văn bản có tên WORKSPACE nằm ở cấp cao nhất không gian làm việc. Có thể tệp này trống hoặc chứa thông tin tham chiếu vào các phần phụ thuộc bên ngoài cần thiết để tạo phần mềm.

Hiện tại, bạn sẽ tạo một tệp WORKSPACE trống. Tệp này chỉ phân phát cho xác định thư mục Workspace. Trong các bước sau, bạn sẽ cập nhật tệp để thêm thông tin về phần phụ thuộc bên ngoài.

Nhập nội dung sau vào dòng lệnh:

touch $WORKSPACE/WORKSPACE
open -a Xcode $WORKSPACE/WORKSPACE

Thao tác này sẽ tạo và mở tệp WORKSPACE trống.

Cập nhật tệp WORKSPACE

Để xây dựng ứng dụng cho các thiết bị của Apple, Bazel cần lấy phiên bản Quy tắc xây dựng của Apple từ kho lưu trữ GitHub. Để bật chế độ này, hãy thêm đoạn mã sau git_repository quy tắc cho tệp WORKSPACE của bạn:

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",
)

Xem lại các tệp nguồn

Hãy xem các tệp nguồn của ứng dụng nằm trong $WORKSPACE/ios-app/UrlGet. Xin nhắc lại, bây giờ bạn chỉ đang xem các tệp này để làm quen với cấu trúc của ứng dụng. Bạn không phải chỉnh sửa bất kỳ tệp nguồn để hoàn tất hướng dẫn này.

Tạo tệp BUILD

Tại lời nhắc dòng lệnh, hãy mở một tệp BUILD mới để chỉnh sửa:

touch $WORKSPACE/ios-app/BUILD
open -a Xcode $WORKSPACE/ios-app/BUILD

Thêm câu lệnh tải quy tắc

Để xây dựng các mục tiêu iOS, Bazel cần tải các quy tắc bản dựng từ kho lưu trữ GitHub của mình bất cứ khi nào bản dựng chạy. Để áp dụng các quy tắc này cho dự án của bạn, hãy thêm thuộc tính câu lệnh tải sau đây vào đầu tệp BUILD:

load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")

Bạn chỉ cần tải quy tắc ios_applicationobjc_library được tích hợp vào gói Bazel.

Thêm quy tắc objc_library

Bazel cung cấp một số quy tắc xây dựng mà bạn có thể sử dụng để tạo một ứng dụng cho nền tảng iOS. Đối với hướng dẫn này, trước tiên bạn sẽ sử dụng Quy tắc objc_library để cho Bazel biết cách tạo thư viện tĩnh từ mã nguồn ứng dụng và các tệp Xib. Sau đó bạn sẽ dùng ios_application để cho biết cách tạo tệp nhị phân ứng dụng và gói .ipa.

Thêm đoạn mã sau vào tệp BUILD của bạn:

objc_library(
    name = "UrlGetClasses",
    srcs = [
         "UrlGet/AppDelegate.m",
         "UrlGet/UrlGetViewController.m",
         "UrlGet/main.m",
    ],
    hdrs = glob(["UrlGet/*.h"]),
    data = ["UrlGet/UrlGetViewController.xib"],
)

Hãy ghi lại tên quy tắc, UrlGetClasses.

Thêm quy tắc ios_application

Chiến lược phát hành đĩa đơn ios_application tạo tệp nhị phân của ứng dụng và tạo tệp gói .ipa.

Thêm đoạn mã sau vào tệp BUILD của bạn:

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"],
)

Vui lòng lưu ý cách thuộc tính deps tham chiếu đến kết quả của quy tắc UrlGetClasses mà bạn đã thêm vào tệp BUILD ở trên.

Bây giờ, hãy lưu và đóng tệp. Bạn có thể so sánh tệp BUILD của mình với ví dụ đầy đủ trong nhánh main của kho lưu trữ GitHub.

Xây dựng và triển khai ứng dụng

Giờ đây, bạn đã sẵn sàng xây dựng ứng dụng và triển khai ứng dụng cho trình mô phỏng và Thiết bị iOS.

Ứng dụng đã tạo nằm trong thư mục $WORKSPACE/bazel-bin.

Các tệp WORKSPACEBUILD đã hoàn tất cho hướng dẫn này nằm trong nhánh chính của kho lưu trữ GitHub. Bạn có thể so sánh bài tập của mình với các tệp đã hoàn thành trợ giúp bổ sung hoặc khắc phục sự cố.

Xây dựng ứng dụng cho trình mô phỏng

Đảm bảo rằng thư mục đang làm việc của bạn nằm trong không gian làm việc Bazel:

cd $WORKSPACE

Bây giờ, hãy nhập nội dung sau đây để tạo ứng dụng mẫu:

bazel build //ios-app:ios-app

Bazel ra mắt và xây dựng ứng dụng mẫu. Trong quá trình xây dựng, kết quả sẽ xuất hiện tương tự như sau:

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

Tìm kết quả của bản dựng

Tệp .ipa và các dữ liệu đầu ra khác nằm trong Thư mục $WORKSPACE/bazel-bin/ios-app.

Chạy và gỡ lỗi ứng dụng trong trình mô phỏng

Giờ đây, bạn có thể chạy ứng dụng từ Xcode bằng Trình mô phỏng iOS. Đầu tiên, tạo dự án Xcode bằng Tulsi.

Sau đó, mở dự án trong Xcode, chọn một Trình mô phỏng iOS làm lược đồ thời gian chạy, rồi nhấp vào Run (Chạy).

Tạo ứng dụng cho một thiết bị

Để xây dựng ứng dụng sao cho có thể cài đặt và khởi chạy trên thiết bị iOS, Bazel cần hồ sơ cấp phép thích hợp cho mẫu thiết bị đó. Hãy thực hiện như sau:

  1. Truy cập Tài khoản nhà phát triển Apple của bạn rồi tải hồ sơ cấp phép phù hợp cho thiết bị của bạn xuống. Xem Tài liệu của Apple để biết thêm thông tin.

  2. Chuyển hồ sơ của bạn vào $WORKSPACE.

  3. (Không bắt buộc) Thêm hồ sơ của bạn vào tệp .gitignore.

  4. Thêm dòng sau vào mục tiêu ios_application trong tệp BUILD:

    provisioning_profile = "<your_profile_name>.mobileprovision",
    

Bây giờ, hãy tạo ứng dụng cho thiết bị của bạn:

bazel build //ios-app:ios-app --ios_multi_cpus=armv7,arm64

Việc này sẽ khiến ứng dụng trở thành tệp nhị phân chất béo. Để tạo ứng dụng cho một thiết bị cụ thể cấu trúc cụ thể, chỉ định cấu trúc đó trong các tuỳ chọn bản dựng.

Để tạo cho một phiên bản Xcode cụ thể, hãy sử dụng phương án --xcode_version. Người nhận bản dựng cho một phiên bản SDK cụ thể, hãy sử dụng tuỳ chọn --ios_sdk_version. Chiến lược phát hành đĩa đơn Lựa chọn --xcode_version là đủ trong hầu hết các trường hợp.

Để chỉ định phiên bản iOS bắt buộc tối thiểu, hãy thêm minimum_os_version vào quy tắc bản dựng ios_application trong tệp BUILD.

Bạn cũng có thể sử dụng Tulsi sang xây dựng ứng dụng của mình bằng GUI (Giao diện người dùng đồ hoạ) thay vì dùng dòng lệnh.

Cài đặt ứng dụng trên một thiết bị

Cách dễ nhất để cài đặt ứng dụng trên thiết bị là khởi chạy Xcode và sử dụng Lệnh Windows > Devices. Chọn thiết bị đã cắm từ danh sách trên bên trái, sau đó thêm ứng dụng bằng cách nhấp vào nút Thêm (dấu cộng) dưới "Ứng dụng đã cài đặt" rồi chọn tệp .ipa mà bạn đã tạo.

Nếu ứng dụng của bạn không cài đặt được trên thiết bị, hãy đảm bảo rằng bạn đang chỉ định chính xác hồ sơ cấp phép trong tệp BUILD của bạn (bước 4 trong ).

Nếu ứng dụng của bạn không khởi chạy được, hãy đảm bảo rằng thiết bị của bạn có trong hồ sơ cấp phép. Nút View Device Logs trên màn hình Devices trong Xcode có thể cung cấp thông tin khác về sự cố đã xảy ra.

Tài liệu đọc thêm

Để biết thêm thông tin, hãy xem nhánh chính của kho lưu trữ GitHub.