本教程介绍了如何使用 Bazel 构建简单的 iOS 应用。
学习内容
在本教程中,您将学习如何:
- 安装 Bazel 和 Xcode,并下载 示例项目
- 设置包含源代码的 Bazel 工作区
一个
WORKSPACE
文件,用于标识应用的顶层 工作区目录 - 更新
WORKSPACE
文件以包含对所需 外部依赖项 - 创建
BUILD
文件 - 运行 Bazel 为模拟器和 iOS 设备构建应用
- 在模拟器和 iOS 设备上运行应用
设置环境
首先,请安装 Bazel 和 Xcode,并获取示例项目。
安装 Bazel
按照安装说明安装 Bazel 并 及其依赖项
安装 Xcode
下载并安装 Xcode。 Xcode 包含 Bazel 进行构建所需的编译器、SDK 和其他工具 Apple 应用。
获取示例项目
您还需要从 GitHub 获取本教程的示例项目。GitHub
repo 有两个分支:source-only
和 main
。source-only
分支
仅包含项目的源文件。您将使用此
分支。main
分支包含两个源文件
并且已完成 Bazel WORKSPACE
和 BUILD
文件。您可以使用此
分支,以便在完成教程步骤后检查您的工作。
在命令行中输入以下命令,获取 source-only
中的文件
分支:
cd $HOME
git clone -b source-only https://github.com/bazelbuild/examples
git clone
命令会创建一个名为 $HOME/examples/
的目录。本次
目录中包含多个适用于 Bazel 的示例项目。此
教程位于 $HOME/examples/tutorial/ios-app
。
设置工作区
工作区是一个目录,其中包含
一个或多个软件项目的源文件,以及 WORKSPACE
文件
和 BUILD
文件,其中包含 Bazel 构建
软件开发技术。工作区还可能包含输出的符号链接
目录。
工作区目录可位于文件系统中的任何位置,并用
WORKSPACE
文件存在。在本教程中,您的
工作区目录是 $HOME/examples/tutorial/
,其中包含示例
您在上一步中从 GitHub 代码库克隆的项目文件。
为方便起见,请立即设置 $WORKSPACE
环境变量来引用
您的工作区目录。在命令行中,输入:
export WORKSPACE=$HOME/examples/tutorial
创建 WORKSPACE 文件
每个工作区都必须有一个位于顶层的名为 WORKSPACE
的文本文件
工作区目录中。此文件可能为空或可能包含引用
构建容器映像所需的外部依赖项
软件开发应用。
现在,您将创建一个空的 WORKSPACE
文件,该文件仅用于
标识工作区目录。在后续步骤中,您将更新该文件以添加
外部依赖项信息。
在命令行中输入以下内容:
touch $WORKSPACE/WORKSPACE
open -a Xcode $WORKSPACE/WORKSPACE
此操作会创建并打开空的 WORKSPACE
文件。
更新 WORKSPACE 文件
要构建适用于 Apple 设备的应用,Bazel 需要提取
Apple build 规则
从 GitHub 代码库中获取。如需启用此功能,请添加以下内容
git_repository
规则添加到 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",
)
查看源文件
查看位于
$WORKSPACE/ios-app/UrlGet
。同样,您现在只是在查看这些文件
熟悉应用的结构您不必修改任何
源文件以完成本教程。
创建 BUILD 文件
在命令行提示符处,打开一个新的 BUILD
文件进行修改:
touch $WORKSPACE/ios-app/BUILD
open -a Xcode $WORKSPACE/ios-app/BUILD
添加规则加载语句
要构建 iOS 目标,Bazel 需要从其 GitHub 代码库加载构建规则
每次构建运行时要将这些规则提供给您的项目,请将
将以下加载语句添加到 BUILD
文件的开头:
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")
您只需加载 ios_application
规则,因为 objc_library
Bazel 软件包内置了规则
添加 objc_library 规则
Bazel 提供了多条构建规则,可用于针对
iOS 平台。在本教程中,您将首先使用
用于告知 Bazel 的 objc_library
规则
如何从应用源代码和 Xib 文件构建静态库。然后
您将使用
ios_application
规则来指示它如何构建应用二进制文件和 .ipa
bundle。
请将以下内容添加到 BUILD
文件:
objc_library(
name = "UrlGetClasses",
srcs = [
"UrlGet/AppDelegate.m",
"UrlGet/UrlGetViewController.m",
"UrlGet/main.m",
],
hdrs = glob(["UrlGet/*.h"]),
data = ["UrlGet/UrlGetViewController.xib"],
)
请记下规则的名称 UrlGetClasses
。
添加 ios_application 规则
通过
ios_application
规则构建应用二进制文件并创建 .ipa
bundle 文件。
请将以下内容添加到 BUILD
文件:
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"],
)
请注意 deps
属性如何引用 UrlGetClasses
规则的输出
添加到上述 BUILD
文件中。
现在,保存并关闭该文件。您可以将 BUILD
文件与
完整示例
(位于 GitHub 代码库的 main
分支中)。
构建和部署应用
现在,您可以构建应用并将其部署到模拟器和 iOS 设备。
构建的应用位于 $WORKSPACE/bazel-bin
目录中。
本教程已完成的 WORKSPACE
和 BUILD
文件位于
main 分支
GitHub 链接您可以将自己的作业与已完成的文件进行比对,
其他帮助或问题排查。
为模拟器构建应用
确保当前的工作目录位于 Bazel 工作区内:
cd $WORKSPACE
现在,输入以下内容以构建示例应用:
bazel build //ios-app:ios-app
Bazel 启动并构建示例应用。在构建流程中 输出将类似于以下内容:
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
查找构建输出
.ipa
文件和其他输出位于
$WORKSPACE/bazel-bin/ios-app
目录中。
在模拟器中运行和调试应用
现在,您可以使用 iOS 模拟器从 Xcode 运行应用。首先, 使用 Tulsi 生成 Xcode 项目。
然后,在 Xcode 中打开项目,选择一个 iOS 模拟器作为运行时架构, 然后点击运行。
构建适用于设备的应用
要构建应用以便在 iOS 设备上安装和启动,Bazel 需要 为该设备模型配置适当的配置文件。执行以下操作:
前往您的 Apple 开发者账号。 并为您的设备下载合适的配置文件。请参阅 Apple 文档 。
将您的个人资料移至
$WORKSPACE
。(可选)将配置文件添加到
.gitignore
文件中。将以下代码行添加到
BUILD
文件的ios_application
目标中:provisioning_profile = "<your_profile_name>.mobileprovision",
现在,为您的设备构建应用:
bazel build //ios-app:ios-app --ios_multi_cpus=armv7,arm64
这会将应用构建为胖二进制文件。针对特定设备构建应用 请在构建选项中指定该架构
如需针对特定的 Xcode 版本进行构建,请使用 --xcode_version
选项。接收者
build 时,请使用 --ios_sdk_version
选项。通过
在大多数情况下,--xcode_version
选项就足够了。
如需指定所需的最低 iOS 版本,请添加 minimum_os_version
添加到 BUILD
文件中的 ios_application
构建规则中。
您还可以使用 Tulsi 至 使用 GUI 而不是命令行构建应用。
在设备上安装应用
在设备上安装该应用的最简单方法是启动 Xcode 并使用
Windows > Devices
命令。从
然后点击添加(加号)按钮来添加应用
“已安装的应用”然后选择您构建的 .ipa
文件。
如果您的应用无法安装到您的设备上,请确保您已指定
在 BUILD
文件中设置正确的配置文件(如上一部分中的第 4 步)
部分)。
如果您的应用无法启动,请确保您的设备属于
配置文件Devices
屏幕上的View Device Logs
按钮
Xcode 可能会提供与问题相关的其他信息。
深入阅读
有关详情,请参阅 主分支 GitHub 链接