macOS 应用公证指南:使用 fastlane 实现自动化公证流程

754 阅读2分钟

背景介绍

在 macOS 系统上,为了保护用户安全,Apple 要求开发者对未通过 Mac App Store 分发的应用程序进行公证(Notarization)。如果应用程序没有经过公证,用户在运行时会看到警告弹窗,这会影响用户体验。虽然开启沙箱模式的应用可以直接通过 App Store 分发来避免这个问题,但对于需要直接分发的应用,公证是必要的步骤。

源码

公证自动化方案

本文将介绍如何使用 fastlane 来自动化 macOS 应用的公证流程。Fastlane 是一个广受欢迎的自动化工具,可以大大简化我们的发布流程。

准备工作

  1. 安装 fastlane
brew install fastlane
  1. 安装 mac build 插件
fastlane add_plugin notarize

配置步骤

1. 确认签名证书

这里需要去下载 分发证书安装!【Apple Distribution】

首先需要确认可用的签名证书。在终端执行:

security find-identity -v -p codesigning

此命令会列出所有可用的签名证书,请记录下您要使用的证书 ID。

2. 配置 App Store Connect API

  1. 访问 App Store Connect
  2. 创建新的 API 密钥
  3. 记录以下信息:
    • 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 密钥文件路径
)

注意事项

  1. 确保您的应用已经正确签名
  2. API 密钥文件需要妥善保管,不要提交到版本控制系统
  3. 公证过程可能需要几分钟时间,请耐心等待
  4. 建议在正式发布前进行测试,确保公证流程正常

验证是否公证成功

spctl --assess -vv "**.app"

输出:

**.app: accepted
source=Notarized Developer ID
origin=Developer ID Application: ###

总结

通过使用 fastlane,我们可以将 macOS 应用的公证过程自动化,大大提高了开发效率。这个流程不仅可以集成到您的 CI/CD 流程中,还可以确保每次发布的应用都经过了正确的公证。