>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Go

在没有 MacBook 的情况下进行 iOS 开发:使用 Builder 工具

任何尝试在 Linux 或 Windows 上使用 Flutter 或 React Native 开发移动应用的人,都不可避免地会遇到苹果的硬件壁垒。在本地构建 Android 应用只需要几分钟,但 iOS 始终需要一台安装了 Xcode 的 Mac。为了每周只构建两次测试产物而购买一台 Mac mini,这看起来是一笔可疑的投资,尤其是对于个人项目或小团队来说。

最近我发现了 MobAI 团队的 ios-builder 仓库。这是一个用 Go 编写的轻量级工具,可以自动化整个流程:在 GitHub Actions 云端触发构建、下载生成的 IPA 文件,并将本地开发环境连接到真实的 iPhone。

Builder 演示

底层工作原理

原理很简单,但他们已经将其做成了一个开箱即用的 CLI 工具。你只需安装 builder 工具,它就会自动生成 GitHub Actions 的工作流文件,无需手动配置复杂的流水线。

工作流程如下:

  1. 在终端中运行构建命令。
  2. CLI 将代码推送到你的仓库,并在 macOS 上启动 GitHub Actions 运行器。
  3. 云端的 Xcode 编译项目并打包产物。
  4. 工具将生成的 IPA 下载到本地 ./dist/ 文件夹。

这意味着你不需要购买 Mac——你可以使用 GitHub 的免费 CI 时长。但免费账户的 macOS 时长有 x10 的折扣。在每月 20,000 分钟的 Mac 运行器免费时长中,你实际只能使用约 2,000 分钟,大约相当于 15-20 次构建。这对于发布和定期测试来说足够了,但你无法在每次提交时都运行 CI。

该工具的功能

该工具旨在与流行的跨平台框架和原生项目配合使用。

  • 自动检测项目结构。该工具能够识别 Flutter、纯 React Native、导出的 Expo、Cordova/Ionic 以及原生 Swift 项目。
  • 代码签名管理。你可以通过 builder signing setup 命令直接将证书和描述文件上传到 GitHub secrets。
  • 热重载。对于使用 Flutter 或 React Native 的开发者来说,这是最实用的功能。
  • 远程模拟器运行。通过 MobAI 服务,你可以在浏览器或桌面客户端中直接在模拟器中测试构建好的应用,不过这个选项需要 Pro 订阅。

安装和首次运行

安装过程很简单。在 Windows 上,你可以从 releases 页面下载现成的二进制文件,在 Linux、WSL 或 macOS 上,通过终端运行命令:

或者如果你机器上已经有 Go,可以从源码构建:

安装完成后,你需要授权 GitHub 并在仓库根目录初始化项目:

交互模式下的 builder init 命令会创建配置文件 .github/workflows/ios-build.yml 和本地 builder.json

示例 builder.json 内容:

只需一行命令即可启动构建:

如果还没有配置 Apple Developer 证书,可以使用 --unsigned 标志构建未签名的版本。

在非 macOS 环境下进行热重载开发

构建 IPA 文件只是成功的一半。真正的麻烦在于你需要快速修复 UI 和逻辑。每次按钮改动都要在 CI 中重新构建项目是没有意义的,因为构建需要好几分钟。

开发者们通过集成 MobAI 应用解决了这个问题,该应用通过 USB 将实体 iPhone 连接到你的电脑。

Flutter 工作流程如下:

  1. 通过数据线将 iPhone 连接到 Windows 或 Linux 电脑。
  2. 通过 builder ios build 构建基础 IPA 并安装到设备上。
  3. 启动开发模式:

该工具在 lib/ 目录中启动文件监视器。当你修改 Dart 代码并保存文件时,builder 通过 flutter attach 发送热重载信号。生成的 .freezed.dart.g.dart 等文件会被忽略,以避免触发不必要的重载。

只有当你修改原生代码时——比如更改 Podfile、添加具有复杂原生依赖的插件或编辑 Swift 文件——才需要通过云端重新构建整个应用。

对于 React Native,流程基本相同:

该命令启动本地 Metro 服务器,转发正确的端口,并将 bundler 连接到手机上运行的应用。如果你在 WSL2 内部工作,需要在 MobAI 设置中允许外部连接,并指定主机 Windows 机器的网络地址。

潜在问题

这个工具看起来很有吸引力,但有几个实际问题需要考虑:

通过免费 Apple ID 账户动态重新签名应用时,Bundle ID 会发生变化(会添加团队后缀)。如果推送通知或「通过 Apple 登录」绑定到特定标识符,这可能会导致它们失效。

依赖第三方 MobAI 工具。CLI builder 本身采用免费的 MIT 许可证分发,代码也是透明的。然而,部分功能(安装到设备、模拟器)依赖于专有的 MobAI 应用,其中一些功能是付费的。

GitHub Actions 的限制。如果你在没有框架的情况下处于原生 UI 布局的活跃阶段,运行器的免费时长会很快耗尽。

值得尝试吗

如果你在 Windows/Linux 上使用 Flutter 或 React Native 开发,偶尔需要在真实 iPhone 上测试应用或为客户构建测试版本,ios-builder 会为你节省大量时间和精力。它省去了手动编写 GitHub Actions YAML 文件和配置 artifact 下载的麻烦。

对于具有严格证书安全要求和复杂 CI/CD 流水线的大型项目,你仍然需要一台专用的 Mac。但对于独立开发者和小型团队来说,这是一个方便的解决方案。

相关项目