Bazel 4.1.0: Bài 3 – Build ứng dụng mẫu

577

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.

  6 project vui dành cho dev build khi chán
  Anh hào UX hội tụ tại Building your UX Design from scratch

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:

Xem thêm Việc làm IT hấp dẫn trên TopDev