如何通过Azure DevOps自动将.dmg文件部署至苹果应用商店
部署MacOS .dmg应用到App Store Connect的Azure DevOps流水线方案
Azure DevOps官方的Apple App Store任务确实仅支持iOS .ipa文件的部署,要自动部署MacOS .dmg应用,需通过自定义脚本任务结合Apple官方命令行工具实现,具体步骤如下:
1. 准备必要凭证与资源
- 在App Store Connect的「用户与访问」→「密钥」页面,创建App Store Connect API类型的密钥,记录密钥ID、Issuer ID,并下载.p8格式的密钥文件。
- 将密钥ID、Issuer ID、团队ID(ASC Provider ID)存入Azure DevOps的变量组并标记为保密;将.p8密钥文件上传至Azure DevOps的安全文件库。
2. 配置流水线任务
需使用MacOS代理(托管或自托管,确保已安装Xcode),按顺序添加以下任务:
任务1:下载安全文件
添加「下载安全文件」任务,选择之前上传的.p8密钥文件,设置下载路径为$(Agent.TempDirectory)/authkey.p8,便于后续脚本引用。
任务2:自定义Bash脚本(公证+上传)
添加「Bash脚本」任务,填入以下命令(根据实际路径和变量调整):
# 1. 公证Mac应用(Apple要求Mac应用必须公证才能上架) xcrun notarytool submit "$(Build.ArtifactStagingDirectory)/YourApp.dmg" \ --key "$API_KEY_ID" \ --key-path "$(Agent.TempDirectory)/authkey.p8" \ --issuer "$ISSUER_ID" \ --wait # 2. 将公证结果绑定到dmg文件(可选但推荐,避免用户打开时需联网验证) xcrun stapler staple "$(Build.ArtifactStagingDirectory)/YourApp.dmg" # 3. 上传到App Store Connect xcrun altool --upload-app \ --file "$(Build.ArtifactStagingDirectory)/YourApp.dmg" \ --type osx \ --apiKey "$API_KEY_ID" \ --apiIssuer "$ISSUER_ID" \ --asc-provider "$TEAM_ID"
$(Build.ArtifactStagingDirectory)/YourApp.dmg替换为你的.dmg文件实际路径API_KEY_ID、ISSUER_ID、TEAM_ID对应Azure DevOps变量组中的保密变量
3. 常见问题排查
- 权限错误:确保App Store Connect API密钥拥有「App Manager」或更高权限
- 工具版本问题:使用Xcode 11.3及以上版本,确保
notarytool和altool可用 - 文件路径错误:用
ls $(Build.ArtifactStagingDirectory)在脚本开头验证文件是否存在
内容的提问来源于stack exchange,提问作者Wouter van Koppen
相关产品推荐
相关产品推荐

