macOS 公证是苹果公司提供的一项安全服务,旨在帮助确保你下载和安装的应用程序是安全的,让用户使用软件更放心,相信分发的开发者 ID 签名软件已通过 Apple 的恶意组件检查。简单讲公证后应用下载后可正常打开,未公证的应用尝试打开时,macOS 会显示一个警告消息。
从 macOS 10.14.5 开始,使用新开发者 ID 证书签名的软件以及所有新的或更新的内核扩展都必须经过公证才能运行。从 macOS 10.15 开始,所有在 2019 年 6 月 1 日之后构建并使用 Developer ID 发布的软件都必须经过公证。不过不需要对通过 Mac App Store 发布的软件进行公证,因为 App Store 的提交流程已经包含了同等的安全检查。
因此分发前公证需要应用程序和命令行Target启用强化运行时功能。
Hardened runtime provides security protection for your apps
当工程中使用了Pod管理三方库,这时运行会出现:
解决方法:
为需要公正
Target的Pod framework设置签名(可选,可能会影响线上,但开发有无都没事儿)

打开强化运行时的Disable Library Validation

这步结束可以解决无法链接动态库的问题,但是却会出现无法调试的问题:

为啥呢?当创建一个新的 macOS 项目时,Xcode 会自动将目标的 CODE_SIGN_INJECT_BASE_ENTITLEMENTS 构建设置设置为 YES。此设置会告诉 Xcode 在构建时向应用程序添加 com.apple.security.get-task-allow 权限。此权限可通过规避某些安全检查,方便在使用系统完整性保护 (SIP) 的系统上进行调试。
原来我们项目的CODE_SIGN_INJECT_BASE_ENTITLEMENTS 被设置为了NO。
但是,这会给运行中的应用程序带来安全风险,因为它可能允许攻击者在运行时注入代码。因此,当您使用标准工作流程导出和签署应用程序时,Xcode 会自动从应用程序中删除该权限。如果您使用自定义工作流,但未能移除 com.apple.security.get-task-allow 权限,则会出现以下消息,导致公证失败:
The executable requests the com.apple.security.get-task-allow entitlement.
因此分发的时候要么从 Xcode 导出,要么在构建应用程序以供分发之前将 CODE_SIGN_INJECT_BASE_ENTITLEMENTS 构建设置设置为 NO。
详细参阅: