asc-notarization 是做什么的?
使用 xcodebuild 和 asc 对 macOS 应用进行归档、导出和公证。当你需要为 Mac App Store 外部分发 macOS 应用,并需要 Developer ID 签名和 Apple 公证时使用。
功能
- 归档:编译并归档 Xcode 项目(使用
xcodebuild archive) - 导出:将归档导出为已签名的 Developer ID 应用包(使用
xcodebuild -exportArchive,带-allowProvisioningUpdates和-authenticationKeyPath) - 公证:将应用提交到 Apple 公证服务(使用
xcrun notarytool submit) - 票嵌:将公证票嵌入到应用包中(使用
xcrun stapler staple) - 支持平台:macOS
使用方法
前提条件
- Xcode 命令行工具已安装。
- 一个有效的 Apple Developer ID 证书和 Team ID。
- 一个有效的 App Store Connect API 密钥(用于公证)。
归档应用
xcodebuild archive -scheme "MyApp" -archivePath "$PWD/build/MyApp.xcarchive" -allowProvisioningUpdates -authenticationKeyPath "~/.appstoreconnect/private_keys/AuthKey_XXXXXXXXXX.p8"
导出应用
xcodebuild -exportArchive -archivePath "$PWD/build/MyApp.xcarchive" -exportPath "$PWD/build/MyApp" -exportOptionsPlist "exportOptions.plist" -allowProvisioningUpdates -authenticationKeyPath "~/.appstoreconnect/private_keys/AuthKey_XXXXXXXXXX.p8"
公证应用
xcrun notarytool submit "$PWD/build/MyApp/MyApp.app" --key "~/.appstoreconnect/private_keys/AuthKey_XXXXXXXXXX.p8" --key-id "XXXXXXXXXX" --issuer "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" --wait
嵌入公证票
xcrun stapler staple "$PWD/build/MyApp/MyApp.app"
exportOptions.plist 示例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>developer-id</string>
<key>signingStyle</key>
<string>manual</string>
<key>teamID</key>
<string>YOUR_TEAM_ID</string>
<key>compileBitcode</key>
<false/>
<key>uploadSymbols</key>
<true/>
</dict>
</plist>
自动化脚本示例
#!/bin/bash
SCHEME="MyApp"
WORKSPACE="MyApp.xcworkspace"
ARCHIVE_PATH="$PWD/build/MyApp.xcarchive"
EXPORT_PATH="$PWD/build/MyApp"
EXPORT_OPTIONS="exportOptions.plist"
API_KEY_PATH="~/.appstoreconnect/private_keys/AuthKey_XXXXXXXXXX.p8"
# 步骤 1:归档
xcodebuild archive -workspace "$WORKSPACE" -scheme "$SCHEME" -archivePath "$ARCHIVE_PATH" -allowProvisioningUpdates -authenticationKeyPath "$API_KEY_PATH"
# 步骤 2:导出
xcodebuild -exportArchive -archivePath "$ARCHIVE_PATH" -exportPath "$EXPORT_PATH" -exportOptionsPlist "$EXPORT_OPTIONS" -allowProvisioningUpdates -authenticationKeyPath "$API_KEY_PATH"
# 步骤 3:公证
xcrun notarytool submit "$EXPORT_PATH/$SCHEME.app" --key "$API_KEY_PATH" --key-id "XXXXXXXXXX" --issuer "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" --wait
# 步骤 4:嵌入公证票
xcrun stapler staple "$EXPORT_PATH/$SCHEME.app"
环境变量
APP_STORE_CONNECT_API_KEY_PATH: App Store Connect API 密钥的文件路径。APP_STORE_CONNECT_API_KEY_ID: App Store Connect API 密钥的 ID(密钥 ID)。APP_STORE_CONNECT_API_ISSUER: App Store Connect API 密钥的颁发者 ID。TEAM_ID: 你的 Apple Developer Team ID。BUNDLE_ID: 你的应用 Bundle ID(如com.example.MyApp)。
注意事项
- 此技能仅支持 macOS。
- 确保你的 API 密钥具有
Developer Tools权限(在 App Store Connect 中启用)。 - 签名和公证过程可能需要几分钟。如果遇到超时错误,请重试。
- 请使用
--wait标志等待公证完成后再继续操作。