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 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 không gian làm việc Bazel chứa mã nguồn
cho ứng dụng và 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 các 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.
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 cần để xây dựng các ứng dụng của Apple.
Lấy dự án mẫu
Bạn cũng cần lấy dự án mẫu cho hướng dẫn trên GitHub. Kho lưu trữ GitHub có hai nhánh: source-only
và main
. 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 cũng như các tệp Bazel WORKSPACE
và BUILD
hoàn chỉnh. Bạn có thể sử dụng các tệp trong nhánh này để kiểm tra công việc của mình 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 để tải 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 là $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 là thư mục chứa các tệp nguồn của một hoặc nhiều dự án phần mềm, cũng như 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 này 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ỳ vị trí nào 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
ở 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 cho bạ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 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 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 chứa nội dung tham chiếu đến các phần phụ thuộc bên ngoài cần thiết để xây dựng phần mềm.
Bây giờ, bạn sẽ tạo một tệp WORKSPACE
trống, tệp này 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 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 thiết bị Apple, Bazel cần lấy các quy tắc xây dựng mới nhất của Apple 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
:
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ỉ 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 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ở 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
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, 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
đượ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ể 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à tệp Xib. Sau đó, bạn sẽ sử dụng quy tắc ios_application
để cho biết cách 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
sẽ 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 chỉnh 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 tạo ứng dụng và triển khai ứng dụng đó trong trình mô phỏng và trên 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 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ố.
Tạo ứng dụng cho trình mô phỏng
Đảm bảo rằng thư mục đang 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à tạo ứng dụng mẫu. Trong quá trình xây dựng, kết quả của ứng dụng sẽ xuất hiện 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 trong 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 Trình mô phỏng iOS làm lược đồ thời gian chạy rồi nhấp vào 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 thiết bị iOS, Bazel cần có hồ sơ cấp phép phù hợp cho mẫu 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 rồi tải hồ sơ cấp phép phù 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.
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_application
trong 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ẽ xây dựng ứng dụng dưới dạng một tệp nhị phân chất béo. Để 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 tuỳ chọn xây 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 một phiên bản iOS tối thiểu bắt buộc, hãy thêm tham số minimum_os_version
vào quy tắc xây 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 cách sử dụ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 phần "Ứ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 đúng hồ sơ 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ị thuộc cấu hình cấp phép của bạn. 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.