使用Xcode公证后App仍提示开发者身份无法确认的问题求助
问题分析与解决方法
用户场景:使用Xcode完成MyApp的Notarization(公证)并钉入ticket后,用户打开应用仍收到错误:
MyApp can’t be opened because the identity of the developer cannot be confirmed.
通过codesign -dv --verbose=4 MyApp.app/验证,应用签名有效且已钉入公证ticket,但错误依旧。以下是可能的原因及解决步骤:
可能原因1:Apple服务器公证状态未同步
公证完成后,Apple的全球服务器可能存在几小时的同步延迟,导致部分地区的用户设备无法立即识别公证状态。
- 解决:等待24小时后再让用户测试;若刚完成公证,可重新提交一次公证流程确保状态同步。
可能原因2:应用分发过程中被篡改或损坏
分发的安装包可能在压缩、传输或解压过程中损坏,破坏了签名或公证ticket。
- 验证:在用户设备上执行
spctl -a -v MyApp.app,查看Gatekeeper的具体评估结果,确认是否存在签名验证失败的细节。 - 解决:重新生成公证后的安装包,使用无压缩的方式分发(或用
ditto命令创建压缩包,避免破坏签名):ditto -c -k --sequesterRsrc --keepParent MyApp.app MyApp.zip
可能原因3:用户设备Gatekeeper缓存异常
用户设备的Gatekeeper缓存可能残留旧的验证记录,导致无法识别新的公证状态。
- 解决:让用户执行以下命令重置Gatekeeper缓存,然后重启设备:
sudo spctl --reset-default
可能原因4:签名/公证流程存在隐性问题
虽然codesign显示签名正常,但可能存在细微的不符合要求的配置:
- 检查应用内所有第三方框架/插件是否都用相同的Developer ID签名,避免存在未签名或签名不匹配的组件。
- 确认Info.plist中的
CFBundleIdentifier与签名的Team ID完全匹配。 - 重新执行完整流程:
- 用Developer ID身份重新签名应用:
codesign -s "Developer ID Application: Your Team Name (TeamID)" --deep --force MyApp.app - 重新提交公证:
xcrun notarytool submit MyApp.zip --keychain-profile "NotaryToolProfile" --wait - 重新钉入公证ticket:
xcrun stapler staple MyApp.app
- 用Developer ID身份重新签名应用:
可能原因5:用户macOS版本兼容性
较老的macOS版本可能不支持最新的Developer ID证书或公证机制。
- 解决:让用户将macOS更新到当前支持的稳定版本(至少macOS 10.15 Catalina及以上,推荐最新版本)。
内容的提问来源于stack exchange,提问作者Fractale
相关产品推荐
相关产品推荐

