Compose Multiplatform 项目:macOS 应用签名与公证全流程指南
前言
在 macOS 生态系统中分发应用程序时,开发者必须遵循苹果严格的签名和公证要求。本文将详细介绍如何在 Compose Multiplatform 项目中为 macOS 应用完成这些必要步骤,确保您的应用能够顺利运行在最新版本的 macOS 系统上。
签名与公证基础概念
代码签名的意义
代码签名是苹果安全体系的核心组成部分,它通过数字证书验证应用程序的来源和完整性。每个签名都包含开发者的唯一标识,确保用户知道软件的来源。
公证的必要性
公证是苹果引入的额外安全层,所有非 App Store 分发的应用都必须经过此流程。公证过程中,苹果服务器会扫描应用程序是否存在恶意代码,通过后会给应用附加一个"票证",使 macOS 信任该应用。
准备工作
开发环境要求
- Xcode:苹果官方开发工具套件,最新稳定版本
- JDK:至少需要 JDK 15 或更高版本,推荐使用 OpenJDK
开发者账号
需要一个有效的苹果开发者账号,这是获取开发证书和访问开发者门户的前提条件。
证书管理全流程
证书类型解析
- Developer ID Application:用于非 App Store 分发的应用程序签名
- Mac App Distribution:用于提交至 App Store 的应用程序签名
- Mac Installer Distribution:用于 App Store 分发的安装包签名
证书创建步骤
-
生成证书签名请求(CSR)
- 使用 Keychain Access 中的 Certificate Assistant
- 填写开发者邮箱和常用名称
- 选择"保存到磁盘"选项
-
创建开发者证书
- 登录苹果开发者门户
- 根据分发渠道选择正确的证书类型
- 上传之前生成的 CSR 文件
- 下载并安装生成的证书
证书验证方法
通过终端命令可以查看已安装的证书:
/usr/bin/security find-certificate -c "Developer ID Application"
对于多证书环境,需要指定密钥链路径来明确使用哪个证书。
应用标识配置
Bundle ID 规范
- 必须采用反向 DNS 命名法(如 com.companyname.appname)
- 只能包含字母、数字、连字符和点号
- 必须与开发者门户中创建的 App ID 完全匹配
创建 App ID
- 在开发者门户中选择 App ID 类型
- 明确指定 Bundle ID(支持通配符格式)
- 建议为每个应用使用唯一的明确 ID
配置文件管理
配置文件类型
- 开发配置文件:用于开发和测试
- 分发配置文件:用于 App Store 分发
- TestFlight 专用:需要额外配置
配置文件创建
- 选择 Mac App Store 分发类型
- 关联对应的 App ID 和证书
- 下载并安装配置文件
自动化构建配置
Gradle DSL 配置
在 Compose Desktop 的 DSL 中配置 macOS 专用设置:
compose.desktop {
application {
nativeDistributions {
macOS {
bundleID = "com.example.app"
signing {
sign.set(true)
identity.set("Developer Name")
}
}
}
}
}
关键配置项
-
签名配置:
- 启用签名(sign = true)
- 指定证书身份(identity)
- 可选密钥链路径(多证书环境)
-
公证配置:
- Apple ID 和专用密码
- 开发团队 ID
- 可通过环境变量安全注入
公证流程详解
公证任务执行
Compose Multiplatform 提供了便捷的 Gradle 任务:
./gradlew notarizeDmg \
-Pcompose.desktop.mac.notarization.appleID=your_id \
-Pcompose.desktop.mac.notarization.password=@keychain:NOTARIZATION_PASSWORD \
-Pcompose.desktop.mac.notarization.teamID=your_team_id
公证状态查询
公证通常需要 15-30 分钟完成,可以通过以下方式优化流程:
- 提前上传应用进行预检
- 确保应用不包含禁止的内容
- 使用标准化的工具链构建
TestFlight 特殊配置
必要配置项
- 双重配置文件(应用和 JVM 运行时)
- 专门的授权文件(entitlements)
- 沙箱权限设置
授权文件示例
应用授权文件(entitlements.plist)必须包含:
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.developer.team-identifier</key>
<string>TEAMID</string>
运行时授权文件(runtime-entitlements.plist)需要相应配置但无需团队标识。
常见问题解决
签名失败处理
- 验证证书是否过期
- 检查密钥链权限
- 确认 Bundle ID 一致性
公证被拒分析
- 检查应用是否包含可执行脚本
- 验证所有动态库是否已正确签名
- 确保不使用私有 API
TestFlight 不可用
- 确认配置文件匹配
- 检查授权文件完整性
- 验证沙箱设置正确性
最佳实践建议
- 自动化流程:将签名和公证集成到 CI/CD 流程中
- 安全存储:使用密钥链管理敏感信息
- 提前测试:在开发阶段就验证签名配置
- 文档记录:维护详细的证书和配置文件记录
通过遵循本指南,开发者可以确保他们的 Compose Multiplatform 应用满足苹果的所有安全要求,顺利分发到 macOS 用户手中。记住,苹果的政策可能会更新,建议定期查看最新文档以保持合规。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考