Hướng dẫn này trình bày 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, đồng thời tải dự án mẫu xuống
- Thiết lập một không gian làm việc Bazel chứa mã nguồn
cho ứng dụng và một tệp
WORKSPACExá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 các 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, đồng thờ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 xuống và cài đặt Xcode. Xcode chứa các trình biên dịch, SDK và các công cụ khác mà Bazel yêu cầu để tạo ứng dụng Apple.
Tải dự án mẫu xuống
Bạn cũng cần tải dự án mẫu xuống cho hướng dẫn này từ GitHub. Kho lưu trữ GitHub
có 2 nhánh: source-only và main. 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 nhánh này
trong hướng dẫn này. Nhánh main chứa cả tệp nguồn
và các tệp Bazel WORKSPACE và BUILD đã hoàn tất. Bạn có thể sử dụng các tệp trong nhánh này
để kiểm tra bài làm khi hoàn tất các bước trong hướng dẫn.
Nhập nội dung sau vào dòng lệnh để tải các 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/. 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 không gian làm việc
Không gian làm việc workspace 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 các thư mục đầ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ị
bằng sự hiện diện của 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 của bạn là $HOME/examples/tutorial/, chứa các tệp dự án mẫu 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 đến
thư mục không gian làm việc. 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 đều phải có một tệp văn bản có tên là 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 các 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.
Hiện tại, 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 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
Để tạo ứng dụng cho thiết bị Apple, Bazel cần kéo các quy tắc tạo 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 sau vào tệp WORKSPACE file:git_repository
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 cho ứng dụng nằm trong
$WORKSPACE/ios-app/UrlGet. Lưu ý rằng hiện tại, bạn 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 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 dấu 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
Để tạo 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 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 của bạn:
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
đượ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 để tạo ứng dụng cho nền tảng
iOS. Trong 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 một thư viện tĩnh từ mã nguồn ứng dụng và các tệp Xib. Sau đó
bạn sẽ sử dụng quy tắc
ios_application
để cho Bazel 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"],
)
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 ứ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"],
)
Lưu ý cách thuộc tính deps tham chiếu đến đầu ra 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ụ đã hoàn tất
trong nhánh main của kho lưu trữ GitHub.
Tạo và triển khai ứng dụng
Bây giờ, bạn đã sẵn sàng tạo ứng dụng và triển khai ứng dụng đó vào một trình mô phỏng và trên một thiết bị iOS.
Ứng dụng đã tạo nằm trong thư mục $WORKSPACE/bazel-bin.
Các tệp WORKSPACE và BUILD đã 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 làm của mình với các tệp đã hoàn tất để được trợ giúp thêm hoặc khắc phục sự cố.
Tạo ứ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 nằm trong không gian làm việc 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à tạo ứng dụng mẫu. Trong quá trình tạo bản dựng, đầu ra của ứng dụng 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 đầu ra của bản dựng
Tệp .ipa và các đầ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. Trước tiên, hãy tạo một dự án Xcode bằng Tulsi.
Sau đó, hãy 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 thiết bị
Để tạo ứng dụng sao cho ứng dụng cài đặt và khởi chạy trên một thiết bị iOS, Bazel cần có hồ sơ cấp phép thích hợp cho mô hình thiết bị đó. Hãy thực hiện như sau:
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 xuống cho thiết bị của bạn. Hãy xem tài liệu của Apple để biết thêm thông tin.
Di chuyển hồ sơ của bạn vào
$WORKSPACE.(Không bắt buộc) Thêm hồ sơ của bạn vào tệp
.gitignore.Thêm dòng sau vào mục tiêu
ios_applicationtrong tệpBUILD: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
Thao tác này sẽ tạo ứng dụng dưới dạng tệp nhị phân fat. Để tạo cho một kiến trúc thiết bị cụ thể, hãy chỉ định kiến trúc đó trong các tuỳ chọn tạo bản dựng.
Để tạo cho một phiên bản Xcode cụ thể, hãy sử dụng tuỳ chọn --xcode_version. Để
tạo cho một phiên bản SDK cụ thể, hãy sử dụng tuỳ chọn --ios_sdk_version. Tuỳ chọn
--xcode_version là đủ trong hầu hết các trường hợp.
Để chỉ định phiên bản iOS tối thiểu bắt buộc, hãy thêm minimum_os_version
tham số vào quy tắc tạo bản dựng ios_application trong tệp BUILD.
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à khởi chạy Xcode và sử dụng lệnh
Windows > Devices. Chọn thiết bị đã cắm của bạn trong danh sách ở bên
trái, sau đó thêm ứng dụng bằng cách nhấp vào nút Add (dấu cộng) trong phần
"Installed Apps" (Ứng dụng đã cài đặt) và chọn tệp .ipa mà 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 hồ sơ cấp phép chính xác trong tệp BUILD (bước 4 trong phần trước).
Nếu ứng dụng không khởi 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ố.
Tài liệu đọc thêm
Để biết thêm thông tin chi tiết, hãy xem nhánh chính của kho lưu trữ GitHub.