我们需要公证框架(.framework)、动态库和二进制文件吗?

Do we need to notarize frameworks(.framework), dylibs and binaries?

阅读有关公证的苹果文档,不清楚我们是否需要公证二进制文件(例如启动守护程序)、框架或动态库。

我们还需要对这些进行公证吗?

苹果文档可以在这里找到 Notarizing Your App Before Distribution

在这里回答我自己的问题,也许对某人有帮助。

这可以由Xcode自动完成;但是,如果您需要手动配置它(也许您有持续集成,或者 w/e),这可能会有所帮助。

根据 Apple 的说法:

Notarization gives users more confidence that the Developer ID-signed software you distribute has been checked by Apple for malicious components.

If there are no issues, the notary service generates a ticket for you to staple to your software

在未来的 macOS 版本中,二进制文件、框架、dylib、应用程序将需要公证。

为此,需要执行一些步骤:

  • Build Settings 中为每个生成二进制文件、框架、dylib 的目标添加 --timestampOther Code Signing Flags或应用
  • --options=runtime添加到其他代码签名标志(对于Xcode < 10.2)或启用强化运行时 (对于 Xcode >= 10.2)在 构建设置
  • 对所有内容进行代码签名(dylib、框架、二进制文件和 .apps。)

接下来可以进行如下公证:

  • 将所有需要公证的文件打包成一个.zip文件(其他支持的格式:.dmg,[=34= .pkg)
  • 将支持的格式上传到 Apple 公证服务:例如:xcrun altool --notarize-app -f <path_to_zip_dmg_or_pkg> --primary-bundle-id <bundle_identifier> -u <apple_id> -p @keychain:"Application Loader: <apple_id>" ---> 这个 returns 一个 UUID 也将发送到公证完成后<apple_id>所提供的邮件地址
  • 使用 xcrun altool --notarization-info <UUID_from_previous_step> -u <apple_id> -p @keychain:"Application Loader: <apple_id>"
  • 检查状态和错误日志(如果有)
  • 可以使用 curl LogFileURL 下载错误日志,其中 LogFileURLjson 响应 中返回上一个命令
  • 如果一切正常,只需使用命令 xcrun stapler staple -v <path_to_app_dmg_or_pkg> 装订公证;只能装订appdmgpkg

其他有用的命令:

  • 使用codesign -dvvv <path_to_file>检查代码是否完成,同时检查时间戳值
  • 使用spctl -a -v <path_to_file>检查装订是否有效