关于 limrun-xcode-bazel
limrun-xcode-bazel 是一项旧版技能,用于从不同环境在 Limrun 远程 Mac 工作节点上构建 Bazel Apple 项目。它通过 lim xcode rbe 配置远程执行,并支持模拟器安装和构建产物上传;README 建议新项目使用 limrun-bazel。
主要功能
- 01使用 lim xcode rbe 配置 Bazel 远程执行
- 02生成工作区专用的 .limrun 配置
- 03选择已安装的 Xcode 版本
- 04将成功构建安装到已连接的模拟器
- 05将构建产物上传为 Limrun 资源
适用场景
- 01远程构建现有的 Bazel Apple 工作区
- 02从 Linux 或容器运行 Bazel 构建
- 03将成功的单应用构建安装到模拟器
- 04发布构建以供预览或安装到其他模拟器
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ limrun-inc/ skills --skill limrun-xcode-bazel安装后在 Claude Code 中输入/limrun-xcode-bazel确认已加载。
附带文件references/project-compatibility.mdreferences/verify-remote.md
详细介绍
在 Limrun RBE 上构建 Bazel iOS 项目(旧版)
lim xcode rbe 是旧版 Bazel 路径。lim bazel setup(技能
limrun-bazel)可替代它:无需沙盒或隧道,支持 iOS 和 Android 目标,并且
整个组织共用一个缓存。仅在工作区已使用 lim xcode rbe,或用户提出要求时使用此技能。
在 Limrun 的远程 Mac 工作机上构建 Bazel Apple 项目——可从任何环境
(Linux、Windows、macOS、VM、容器)运行,无需本地 Xcode。lim xcode rbe 会启动
远程 RBE 堆栈,将其通过隧道连接到本地端口,并写入 .limrun/ 配置,以便
bazelisk build --config=limrun 在远程运行 Apple 构建操作。本地 Xcode 和
本地构建工具不属于此工作流。
身份验证和 CLI
如需安装:npm install --global lim。身份验证可使用 lim login 或
LIM_API_KEY(即使 shell 未显示,也可能已在用户环境中设置;索取前请先检查)。CLI 是事实依据:本技能中的命令
均已验证,但如果某个标志报错,或需要使用此处未列出的标志,请查看
lim xcode rbe --help,不要猜测。
构建
- 在 Bazel 工作区根目录(包含
MODULE.bazel/WORKSPACE)中运行lim xcode rbe。它会设置实例和.limrun/配置,并打印准确的构建命令。隧道会在后台运行(打印 PID);--no-daemon会使其在前台运行。 - 运行打印出的命令,例如:
bazelisk --digest_function=sha256 build --config=limrun //App。
不要手动编写 .limrun/ 或这些标志——CLI 会根据沙盒中的 Xcode 和你的操作系统生成它们。lim xcode version set 27(或一次性使用
lim xcode rbe --xcode-version 27)可使用另一个已安装的 Xcode 进行构建:只写主版本号会绑定该主版本的 GA 发布版;使用
27.1 这类主版本号和次版本号可固定到该精确版本(beta 版)。Fleet 升级 Xcode 或切换 Xcode 后,重新运行
lim xcode rbe(先运行 --stop)以刷新配置。
若要在不编辑生成的配置的情况下,为 limrun 路径添加自己的 Bazel 标志,请将其写入工作区根目录下的 user.limrun.bazelrc。生成的配置会最后尝试导入此文件,因此其中的 build:limrun --… 行优先级最高,而且在 lim xcode rbe 重新生成配置后仍会保留(.limrun/ 中的内容不会保留)。
在模拟器上运行
lim xcode rbe 仅用于构建;用户想要查看或运行应用时,请连接模拟器。检查或连接模拟器(连接时会立即安装上次构建的应用,因此无需重新构建):
lim xcode get # is a simulator already attached?
lim ios create --attach # attach one
没有浏览器可供用户查看时,请添加 --no-open;此选项会跳过在本地打开串流 URL,但仍会打印该 URL,方便分享。
如果连接输出中包含已签名的串流 URL,请以 Markdown 链接形式分享给用户,例如 [实时模拟器](<signed-stream-url>)。
连接模拟器后,每次成功的 --config=limrun 构建都会自动重新安装并重新启动应用,无需单独安装:
bazelisk --digest_function=sha256 build --config=limrun //App
注意:
- 如果已确定需要模拟器,请提前连接:
lim xcode rbe --ios(启动时连接,运行--stop后移除)。 - 自动安装由服务器端根据构建事件触发;没有
lim xcode rbe install子命令或--target标志。要强制重新安装,请重新构建(命中缓存时,重建只需几秒)。 - 只有当成功的调用生成了单个应用时才会触发,因此在包含多个应用的工作区中,每次调用只构建一个应用目标(
//App,而不是//...);构建多个应用会成功,但不会安装任何应用。
如需轻点、输入、读取元素树、截屏或录制正在运行的应用,请切换到 limrun-ios-simulator 技能。
将构建上传为资源
若要将构建发布为 Limrun 资源(预览链接、安装到其他模拟器、CI 构件),请在隧道启动时启用上传,或在事后上传一次构建:
lim xcode rbe --auto-upload preview/my-app --upload-ttl 24h # every successful build refreshes the asset
lim xcode rbe upload preview/my-app --ttl 24h # one-shot: the newest successful build
--auto-upload在隧道的整个生命周期内生效:每次成功的--config=limrun构建都会以该资源名称重新上传应用,无需构建后的步骤。上传结果会写入.limrun/rbe.log。rbe upload从工作区根目录运行,需要后台隧道和至少一次成功的构建;否则会报错。- TTL 使用 Go 时长格式(
24h、30m;1d无效),且为可选项;未指定 TTL 的每次上传都会将资源过期时间延长至该次上传后的 14 天。 - 若要更改正在运行的隧道的
--auto-upload配置,请先使用--stop,然后重新运行;CLI 会拒绝不匹配的重新启用,而不会悄然忽略。 - 在浏览器中预览已上传的应用:
https://console.limrun.com/preview?asset=<name>&platform=ios。
拆除
使用 lim xcode rbe --stop 停止(拆除远程栈约需 20 秒),并使用 lim xcode delete <id> 删除实例。
注意事项
- 务必在
build前传入--digest_function=sha256(使用 CLI 原样打印的命令)。Limrun 缓存仅支持 SHA256;Bazel 9 默认使用 BLAKE3。这是启动标志,因此不能放在--config=limrun中。症状:构建时出现Cannot use hash function BLAKE3 with remote cache;安装时出现non-SHA256 digest … rebuild with --digest_function=sha256。 - 从工作区根目录运行
lim xcode rbe,不要在子目录中运行——它会在那里写入.limrun/,否则会立即失败。 - 构建成功并不能证明使用了远程执行——缓存命中(
action cache hit/remote cache hit)会使构建即使在隧道已断开的情况下仍然通过。若要强制并验证实际的远程执行,请参阅references/verify-remote.md。 - 打印出的
.ipa路径在本机上并不存在——构建命令带有--remote_download_outputs=minimal,构件会留在实例的缓存中,不会下载。Bazel 仍会照常打印Target //App:App up-to-date: …/App.ipa,但该文件不在磁盘上。这是预期行为,并非构建失败。连接模拟器后,构建会根据构件的缓存摘要自动安装(从构建事件日志读取,而非读取本地文件)。只有确实需要在本机获取.ipa时,才从构建命令中移除--remote_download_outputs=minimal,这样 Bazel 就会下载顶层输出;无论哪种方式,自动安装都会继续正常工作。 - 新实例的首次构建可能会失败,并显示
Lost inputs no longer available remotely(例如… Assets.car)。这是实例之间缓存被临时驱逐所致,并非代码错误;Bazel 会打印Found transient remote cache error, retrying the build...,重试后即可成功。为避免演示过程中遇到此问题,请在运行lim xcode rbe后立即执行完整构建以预热缓存。 You don't have permission to save … in "CoreSimulator"(actool/ibtool)是设备集群侧的设备缺失问题,并非配置问题。请重试;若问题仍然存在,请向 Limrun 报告。- 项目自身的 Bazel 设置可能与 RBE 冲突(通过 Starlark 转换固定 Xcode、自定义
remote_default_exec_properties、不兼容沙盒的 genrule)。这些是项目特有的问题,并非 Limrun 的缺陷——在认定 RBE 故障前,请按references/project-compatibility.md中的步骤检查。