背景介绍
在 macOS 系统上,为了保护用户安全,Apple 要求开发者对未通过 Mac App Store 分发的应用程序进行公证(Notarization)。如果应用程序没有经过公证,用户在运行时会看到警告弹窗,这会影响用户体验。虽然开启沙箱模式的应用可以直接通过 App Store 分发来避免这个问题,但对于需要直接分发的应用,公证是必要的步骤。
公证自动化方案
本文将介绍如何使用 fastlane 来自动化 macOS 应用的公证流程。Fastlane 是一个广受欢迎的自动化工具,可以大大简化我们的发布流程。
准备工作
- 安装 fastlane
brew install fastlane
- 安装 mac build 插件
fastlane add_plugin notarize
配置步骤
1. 确认签名证书
这里需要去下载 分发证书安装!【Apple Distribution】
首先需要确认可用的签名证书。在终端执行:
security find-identity -v -p codesigning
此命令会列出所有可用的签名证书,请记录下您要使用的证书 ID。
2. 配置 App Store Connect API
- 访问 App Store Connect
- 创建新的 API 密钥
- 记录以下信息:
- Issuer ID
- 密钥 ID
- 下载 p8 文件(注意:只能下载一次)
3. 创建 API 密钥配置文件
创建 api_key.json 文件,内容如下:
{
"key_id": "您的密钥 ID",
"issuer_id": "您的 Issuer ID",
"key": "p8文件内容(换行使用\\n)",
"duration": 1200,
"in_house": false
}
实现自动化公证
1. 应用打包
首先需要使用 fastlane 的 build_mac_app 动作来打包应用:
build_mac_app(
scheme: "YourScheme", # 项目名称
export_method: "developer-id",
clean: true,
output_directory: "./",
output_name: "YourAppName"
)
2. 应用公证
使用 fastlane 的 notarize 动作来完成公证:
notarize(
package: "./YourApp.app", # 应用路径
bundle_id: "com.yourcompany.app", # Bundle ID
asc_provider: "YOUR_TEAM_ID", # 开发者账号 Team ID
print_log: true,
api_key_path: "./fastlane/api_key.json" # API 密钥文件路径
)
注意事项
- 确保您的应用已经正确签名
- API 密钥文件需要妥善保管,不要提交到版本控制系统
- 公证过程可能需要几分钟时间,请耐心等待
- 建议在正式发布前进行测试,确保公证流程正常
验证是否公证成功
spctl --assess -vv "**.app"
输出:
**.app: accepted
source=Notarized Developer ID
origin=Developer ID Application: ###
总结
通过使用 fastlane,我们可以将 macOS 应用的公证过程自动化,大大提高了开发效率。这个流程不仅可以集成到您的 CI/CD 流程中,还可以确保每次发布的应用都经过了正确的公证。