uni-app iOS 打包:
离线打包与云打包怎么选
uni-app 的 iOS 包有两种出法:HBuilderX 云打包,在 Windows 上就能完成;本地离线打包,需要一台装了 Xcode 的 Mac。这篇先对比两者的取舍,再给出离线打包的大致流程和通用 Xcode 步骤。DCloud 相关的具体操作以官方文档为准,文中已附链接。
云打包与离线打包的区别
| 对比项 | HBuilderX 云打包 | 本地离线打包 |
|---|---|---|
| 是否需要 Mac | 不需要,Windows 上即可提交 | 需要 macOS 与 Xcode |
| 构建在哪里执行 | DCloud 的打包服务器 | 你自己的 Mac |
| 证书怎么用 | 上传 p12 证书和描述文件 | 留在本机钥匙串,由 Xcode 签名 |
| 原生扩展 | 限于平台支持的模块和插件 | 可以直接改 Xcode 工程、集成任意原生 SDK |
| 排队与次数 | 受 DCloud 规则约束 | 不受限制,取决于本机性能 |
| 维护成本 | 低 | 需要跟进离线 SDK 版本、Xcode 版本 |
云打包的排队、次数和收费规则会调整,本文不给具体数字,请查看 DCloud 官网的说明。
什么时候值得换成离线打包
- 需要集成云打包不支持的第三方原生 SDK,或要修改
Info.plist、Capabilities、编译参数。 - 发版频繁,希望把打包放进自己的 CI,提交代码后自动出包、上传 TestFlight。
- 不希望把 p12 证书和密码上传到第三方服务器。
- 需要用 Xcode 调试原生层崩溃、查看符号化日志。
如果项目只用到官方模块、发版不频繁,云打包往往更省事,没必要为此专门准备 Mac。
离线打包的大致流程
以下是传统 uni-app 项目的典型步骤,菜单名称和文件路径可能随版本变化,操作前请对照 DCloud iOS 离线打包文档:
- 在 DCloud 开发者中心为应用申请离线打包用的 AppKey,绑定 iOS 的 Bundle ID。
- 下载与 HBuilderX 版本对应的 iOS 离线 SDK,里面包含可直接用 Xcode 打开的示例工程。
- 在 HBuilderX 中通过「发行 → 原生 App-本地打包 → 生成本地打包 App 资源」导出资源包。
- 把导出的资源放进 SDK 工程中约定的应用资源目录,并在工程配置里填写 AppKey、appid 等信息。
- 按项目用到的模块,在 Xcode 工程里添加对应的库和配置,模块对照表在 DCloud 文档中。
HBuilderX 可以在 Windows 上导出资源,再通过 Git 或 scp 传到远程 Mac;SDK 工程建议单独建一个仓库管理,便于记录每次对原生层的修改。
# 从 Windows(PowerShell 也自带 scp)把导出的资源传到远程 Mac
scp -r ./unpackage/resources/__UNI__XXXXXXX user@your-mac:~/uni-sdk/resources/通用 Xcode 步骤:签名与 Archive
资源放好之后,后面的步骤和任何 iOS 工程一样。在屏幕共享里用 Xcode 打开 SDK 工程,在 Target → General 中设置 Bundle Identifier、版本号(Version)和构建号(Build),在 Signing & Capabilities 中选择开发团队。先选一台模拟器运行,确认页面能正常加载;再把目标切到 Any iOS Device,执行 Product → Archive。
也可以在 SSH 里用命令行归档,工程名和 scheme 以你的 SDK 工程为准:
xcodebuild -list -project <SDK 工程>.xcodeproj
xcodebuild -project <SDK 工程>.xcodeproj -scheme <scheme 名> \
-configuration Release -destination 'generic/platform=iOS' \
-archivePath build/App.xcarchive archive提醒:每次上传 App Store Connect 的构建号必须比上一次大,版本号与 manifest.json 中的版本保持一致,避免审核时信息对不上。
上传 TestFlight 与提交审核
Archive 完成后,Xcode Organizer 会自动打开,选择 Distribute App 上传到 App Store Connect;也可以导出 IPA 后用 Transporter 上传。之后的 TestFlight 测试和审核流程与原生 App 一致,详见 没有 Mac 怎么上架 App Store。
如果需要一台常驻的 Mac 来跑离线打包,三万主机的 Mac mini 租用 提供整机和管理员账户,Xcode 与 SDK 都可以自行安装和升级。
常见问题
云打包已经能出 IPA 了,为什么还要离线打包?
云打包适合标准项目。离线打包让你直接掌控 Xcode 工程:可以集成云打包不支持的原生 SDK、调整编译参数、在自己的 CI 里自动出包,也不受云打包排队和次数规则影响。代价是需要一台 Mac,并自行跟进离线 SDK 的升级。
离线 SDK 版本和 HBuilderX 版本必须一致吗?
DCloud 文档要求两者匹配,版本不一致可能导致运行时报错或白屏。升级 HBuilderX 后,应下载对应版本的 iOS 离线 SDK 并重新导出本地打包资源。具体对应关系请以 DCloud 官方文档为准。
uni-app x 项目也按这篇的流程吗?
不完全一样。uni-app x 的原生构建方式与传统 uni-app 不同,本文只描述通用的 Xcode 步骤,uni-app x 请直接参考 DCloud 针对 uni-app x 的原生 SDK 文档。
扫码加微信客服手机上长按二维码识别