mcpField
L
limrun-xcode-bazel

limrun-xcode-bazel

github.com/limrun-inc云与 DevOps243.2k 次安装1 天前更新
代码仓库

关于 limrun-xcode-bazel

limrun-xcode-bazel 是一项旧版技能,用于从不同环境在 Limrun 远程 Mac 工作节点上构建 Bazel Apple 项目。它通过 lim xcode rbe 配置远程执行,并支持模拟器安装和构建产物上传;README 建议新项目使用 limrun-bazel。

主要功能

  1. 01使用 lim xcode rbe 配置 Bazel 远程执行
  2. 02生成工作区专用的 .limrun 配置
  3. 03选择已安装的 Xcode 版本
  4. 04将成功构建安装到已连接的模拟器
  5. 05将构建产物上传为 Limrun 资源

适用场景

  1. 01远程构建现有的 Bazel Apple 工作区
  2. 02从 Linux 或容器运行 Bazel 构建
  3. 03将成功的单应用构建安装到模拟器
  4. 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,不要猜测。

构建

  1. 在 Bazel 工作区根目录(包含 MODULE.bazel / WORKSPACE)中运行 lim xcode rbe。它会设置实例和 .limrun/ 配置,并打印准确的构建命令。隧道会在后台运行(打印 PID); --no-daemon 会使其在前台运行。
  2. 运行打印出的命令,例如: 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 中的步骤检查。

评论

支持 Markdown