如果你使用的是 Dedicated SaaS 部署,请联系你的账户团队以启用 macOS 虚拟机。
工作原理
runs-on 字段用于告诉 Devin 在哪个平台上构建和运行,每个平台都有各自独立的快照。
与 Linux 的主要区别在于 shell、文件系统布局和包管理器:
启动 macOS 会话
- 蓝图:添加
runs-on: macos,让该仓库的快照针对 macOS 构建 (见下文) 。 - Slack:使用
!macbang 命令 在 macOS 虚拟机上启动会话。 - API:在创建会话、计划或自动化任务时设置
platform: "macos"。参见 API 参考。
编写 macOS 蓝图
单平台蓝图
runs-on: macos:
多平台蓝图
--- 分隔。每个文档各自声明自己的 runs-on 标签。有关该格式的背景信息,请参阅蓝图指南中的 Multi-document YAML 提示框。
runs-on 字段
runs-on 字段映射到你账户中已注册的机器配置:
你可以将
runs-on 指定为字符串或列表:
用量与成本
预装内容
随着 Apple 发布新版本、镜像随之更新,各组件版本也会变化。要确切了解某个会话中的版本情况,可让 Devin 运行:
选择 Xcode 版本
xcode-select 所指向的版本。若只想在单条命令中使用其他已安装的版本,请设置 DEVELOPER_DIR:
/usr/bin/xcodebuild(该 shim 会遵循 DEVELOPER_DIR),而不是通过 PATH 解析到的某个特定 Xcode 的 Contents/Developer/usr/bin 下的 xcodebuild,因为后者无论 DEVELOPER_DIR 如何设置,都只会报告自身的版本。
或者为整个会话切换默认版本:
macOS 会话行为
Shell
sed -i 必须带一个参数 (sed -i '') ,而 gsed、gdate、greadlink 等 GNU 工具需通过 Homebrew 的 coreutils formula 安装。
路径
/Users/devin/repos/<repo-name>,你上传到会话中的文件则会写入 /Users/devin/.files/。
Secrets
$SECRET_NAME) ,与 Linux 上的行为一致。可通过这种方式提供 App Store Connect API 密钥、签名凭据或私有 registry 令牌:
会话休眠与唤醒
Computer Use
iOS 模拟器
使用技巧
预热构建缓存
environment.yml 中的 maintenance 字段预热缓存。
网络访问
运行容器
colima start 失败,重试即可。启动之后,container 在 CPU 上的运行速度约为原生的 1/15 到 1/25,每次启动还需几秒;镜像拉取则可跑满宿主机网络速度。用来跑 lint 或打包类 container 没什么问题,但拿来编译就很折磨了。如果工作中大量使用 container,建议改用 Linux 会话,或让 macOS 会话指向远程的 Docker 守护进程。
非必要不要在蓝图中安装 Xcode
DEVELOPER_DIR 或 xcode-select 来选择。如果确实需要其他版本或测试版,可以把 Apple ID 存为 secret,让蓝图去下载该版本,但代价是构建会慢很多。
限制
故障排查
maintenance 中添加一次 build-for-testing 步骤,让快照带上已预热的构建产物。
xcodebuild 选用了错误的工具链。 检查 xcode-select -p,并在蓝图步骤中显式设置 DEVELOPER_DIR。
找不到指定的 destination。 运行 xcrun simctl list devices available,查看已安装的运行时实际提供了哪些设备,并让 -destination 中的名称和系统版本与之匹配。
依赖解析卡住,或因 TLS 错误而失败。 通常是该主机不在你的组织针对 macOS 的网络允许列表中。参见网络访问。
