PyInstaller打包生成的Mac .app文件实现公证分发的具体步骤是什么
macOS 10.15及以上系统要求,App Store外部分发的应用必须同时完成开发者ID签名和苹果官方公证,才能跳过安全警告正常运行,你当前仅完成了基础签名,缺少公证步骤,完整操作流程如下:
前置准备
- 你已有的Developer ID Application证书无需调整,确保在钥匙串「我的证书」中可以正常显示
- 安装Xcode命令行工具(无需安装完整Xcode),终端执行命令:
xcode-select --install - 安装完成后同意工具协议,终端执行:
sudo xcodebuild -license accept - 登录你的苹果开发者账号管理页面,生成应用专用密码,妥善保存备用
步骤1:修正Info.plist配置
打开determinant_calculator.app/Contents/Info.plist,修改以下字段:
- 将
CFBundleIdentifier的值从默认的org.pythonmac.unspecified.determinant_calculator修改为你专属的唯一标识,例如com.paulf.determinantcalculator - 可按需修改
CFBundleShortVersionString、CFBundleVersion的版本号,以及NSHumanReadableCopyright的版权信息
步骤2:执行符合公证要求的应用签名
你之前的签名命令缺少强制参数,需要使用带运行时保护的签名命令,终端执行:codesign --deep --force --verify --verbose --sign "Developer ID Application: PaulF (47A67S7RBW)" --options runtime determinant_calculator.app
签名完成后验证签名有效性:codesign -vvv --deep --strict determinant_calculator.app
命令无报错返回即为签名成功
步骤3:打包应用为ZIP格式
不要使用系统右键压缩功能,会破坏签名结构,使用命令行打包:ditto -c -k --sequesterRsrc --keepParent determinant_calculator.app determinant_calculator.zip
步骤4:提交苹果官方公证
终端执行公证提交命令,替换对应参数:xcrun notarytool submit determinant_calculator.zip --apple-id 你的苹果开发者账号邮箱 --password 之前生成的应用专用密码 --team-id 47A67S7RBW --wait
命令执行等待数分钟后会返回结果:
- 结果为
Accepted则公证通过 - 结果为
Invalid可执行日志查询命令排查错误:xcrun notarytool log 你请求结果里的请求ID --apple-id 你的苹果开发者账号邮箱 --password 应用专用密码 --team-id 47A67S7RBW
步骤5:给应用绑定公证票
公证通过后,需要将公证凭证绑定到应用上,终端执行:xcrun stapler staple determinant_calculator.app
验证绑定成功:xcrun stapler validate determinant_calculator.app
最终有效性校验
执行Gatekeeper校验命令:spctl --assess --verbose=4 --type execute determinant_calculator.app
返回accepted即为所有流程完成,此时再压缩分发到其他Mac设备,即可正常打开无安全警告。
内容的提问来源于stack exchange,提问作者fishbacp

