Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh
Dùng terminal gõ lệnh sau để lấy source code mẫu:
git clone -b source-only https://github.com/bazelbuild/examples
cd vào thư mục examples/tutorial và tạo ra file WORKSPACE bằng cách gõ:
touch WORKSPACE
Mở nó lên và gõ tiếp:
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.31.3", ) git_repository( name = "build_bazel_rules_swift", remote = "https://github.com/bazelbuild/rules_swift.git", tag = "0.23.0", ) git_repository( name = "build_bazel_apple_support", remote = "https://github.com/bazelbuild/apple_support.git", tag = "0.11.0", ) git_repository( name = "bazel_skylib", remote = "https://github.com/bazelbuild/bazel-skylib.git", tag = "1.0.3", )
File trên để lấy rule remote theo name và tag của chúng để build project chúng ta.
Mẹo: trên trang chủ của bazel nội dung khác hẳn với file trên. Lý do tại sao các tag lại khác, đó là tại thời điểm viết bài này thì các tag của các repository ở trên đã cập nhật bản mới nhất. Cụ thể nếu bạn muốn lấy phiên bản repository mới nhất, ví dụ của link https://github.com/bazelbuild/rules_apple.git thì bạn gõ vào trình duyệt link đó, và vào mục tag của nó để xem tag hiện tại là bao nhiêu, ví dụ tôi tìm được tag:
https://github.com/bazelbuild/rules_apple/releases/tag/0.31.3
Tương tự cho các repository khác.
Bạn tiếp tục cd vào thư mục ios-app và tạo file BUILD:
touch BUILD
Và thêm nội dung vào file BUILD:
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application") objc_library( name = "UrlGetClasses", srcs = [ "UrlGet/AppDelegate.m", "UrlGet/UrlGetViewController.m", "UrlGet/main.m", ], hdrs = glob(["UrlGet/*.h"]), data = ["UrlGet/UrlGetViewController.xib"], ) 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"], )
Phân tích nội dung:
objc_library(
name = "UrlGetClasses",
srcs = [
"UrlGet/AppDelegate.m",
"UrlGet/UrlGetViewController.m",
"UrlGet/main.m",
],
hdrs = glob(["UrlGet/*.h"]),
data = ["UrlGet/UrlGetViewController.xib"],
)
Đoạn này bạn tạo ra 1 library objective-c có tên là UrlGetClasses, gồm các file code .m nằm ở thư mục UrlGet. Các file header nằm ở hdrs, các file data chỉ có 1 file .xib ở trên.
Để tạo ra file .ipa ta có rule:
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"],
)
Tên file build ra là ios-app, tên bundle_id của app là Google.UrlGet, hỗ trợ cho families là iphone và ipad. Phiên bản tối thiểu là minimum_os_version 9.0. File plit là UrlGet-Info.plist, trạng thái là visibility public. Phụ thuộc vào thư viện đầu ra thư viện là UrlGetClasses.
Build ứng dụng
Bạn cd ra thư mục tutorial và gõ:
bazel build //ios-app:ios-app
Đợi 1 lúc thấy thông báo như ảnh sau là thành công:
Bạn sẽ thấy bazel tạo ra file output ở đường dẫn:
bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-e637a0adc749/bin/ios-app/ios-app.ipa
Vậy là bước đầu bạn đã hiểu cơ bản về cách build 1 ứng dụng iOS đơn giản nhất bằng bazel.
Bài viết gốc được đăng tải tại codetoanbug.com
Có thể bạn quan tâm:
- Bazel 4.1.0: Bài 1 – Cài đặt bazel 4.1.0
- Bazel 4.1.0: Bài 2 – khái niệm và thuật ngữ
- Buils một ứng dụng thời tiết sử dụng AngularJS
Xem thêm Việc làm IT hấp dẫn trên TopDev