Hướng dẫn dành cho Bazel: Tạo ứng dụng iOS

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Báo cáo vấn đề Xem nguồn

Hướng dẫn này trình bày cách tạo ứ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 xuống
  • 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 không gian làm việc
  • Cập nhật tệp WORKSPACE để chứa tệp tham chiếu đến các phần phụ thuộc bên ngoài bắt buộc
  • Tạo 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 xuống.

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 Bazel.

Cài đặt Xcode

Tải 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 để tạo các ứng dụng của Apple.

Tải dự án mẫu

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

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

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/. Thư mục này chứa một số dự án mẫu cho Bazel. Các tệp dự án cho hướng dẫn này nằm trong $HOME/examples/tutorial/ios-app.

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

Không gian làm việc là một thư mục chứa các tệp nguồn cho một hoặc nhiều dự án phần mềm, cũng như một tệp WORKSPACE và các tệp BUILD chứa 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 thư mục đầu ra.

Một 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 và được biểu thị bằng sự hiện diện của tệp WORKSPACE ở gốc. Trong hướng dẫn này, thư mục không gian làm việc của bạn là $HOME/examples/tutorial/, chứa các tệp dự án mẫu mà bạn đã nhân bản 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 để tham chiếu đến thư mục 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 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 trong thư mục không gian làm việc cấp cao nhất. Tệp này có thể trống hoặc có thể chứa tệp tham chiếu đến các phần phụ thuộc bên ngoài cần thiết để tạo phần mềm.

Bây giờ, bạn sẽ tạo một tệp WORKSPACE trống, chỉ dùng để xác định thư mục không gian làm việc. 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 đây 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 thiết bị Apple, Bazel cần lấy các quy tắc bản dựng Apple mới nhất từ kho lưu trữ GitHub. Để bật tính năng này, hãy thêm các quy tắc git_repository sau đây vào 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 rằng bạn bây giờ chỉ cần 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 cần phải chỉnh sửa bất kỳ tệp nguồn nào để 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ở 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 tạo bản dựng từ kho lưu trữ GitHub bất cứ khi nào bản dựng này chạy. Để cung cấp các quy tắc này cho dự án của bạn, hãy thêm câu lệnh tải sau 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_application vì quy tắc objc_library này đượ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 tạo bản dựng mà bạn có thể sử dụng để xây dựng ứ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 của ứng dụng và các tệp Xib. Sau đó, bạn sẽ sử dụng quy tắc ios_application để cho biết quy tắc tạo tệp nhị phân của ứ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"],
)

Lưu ý tên của quy tắc, UrlGetClasses.

Thêm quy tắc ios_application

Quy tắc 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"],
)

Hãy lưu ý cách thuộc tính deps tham chiếu 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 với ví dụ đã hoàn thành trong nhánh main của kho lưu trữ GitHub.

Tạo và triển khai ứng dụng

Giờ bạn đã sẵn sàng tạo ứng dụng và triển khai ứng dụng này trên trình mô phỏng cũng như 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 thành của 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 công việc của mình với các tệp đã hoàn thành để được trợ giúp thêm 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 làm việc hiện tại của bạn nằm trong không gian làm việc của Bazel:

cd $WORKSPACE

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

bazel build //ios-app:ios-app

Bazel khởi chạy và xây dựng ứng dụng mẫu. Trong quá trình xây dựng, kết quả đầu ra của Bazel 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 kết quả 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. Trước tiên, hãy tạo một dự án Xcode bằng Tulsi.

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

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

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

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

  2. Di 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 xây dựng ứng dụng cho thiết bị của bạn:

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

Thao tác này sẽ xây dựng ứng dụng dưới dạng tệp nhị phân mỡ. Để xây dựng cho một cấu trúc thiết bị cụ thể, hãy chỉ định cấu trúc đó trong các tùy chọn bản dựng.

Để tạo một phiên bản Xcode cụ thể, hãy sử dụng tuỳ chọn --xcode_version. Để tạo một phiên bản SDK cụ thể, hãy sử dụng tùy chọn --ios_sdk_version. Tuỳ chọn --xcode_version là đủ trong hầu hết các trường hợp.

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

Bạn cũng có thể sử dụng Tulsi để tạo ứng dụng bằng GUI thay vì dòng lệnh.

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

Cách dễ nhất để cài đặt ứng dụng trên thiết bị là chạy Xcode và sử dụng lệnh Windows > Devices. Chọn thiết bị đã cắm của bạn từ danh sách 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) trong "Ứng dụng đã cài đặt" và chọn tệp .ipa bạn đã tạo.

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

Nếu ứng dụng không chạy được, hãy đảm bảo rằng thiết bị của bạn nằm 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ố.

Đọc thêm

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