本文介绍了如何对在XCode外部创建的MacOS命令行工具进行公证?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

MacOS现在要求所有应用程序都经过强化、签名和公证。如何使用PyInstaller之类的工具对在XCode外部创建的应用程序进行签名和公证?

我已经整理了在XTools外部创建的.app文件的签名和公证。有一个非常有用的线程here,它展示了如何添加一个entitlements.plist来实现PyInstaller.app文件的强化。我相信这也适用于命令行实用程序,但可能会遗漏一些东西。使用altool提交包含.app进行公证的.dmg将通过测试,并由Apple进行公证。

使用相同过程提交单个命令行实用程序也将通过公证,但对于其他计算机上的网关守卫功能,不会显示为签名或公证。我认为这与this blog post about building and delivering command line tools for Catalina中详细说明的PyInstaller二进制文件中没有包含有效的Info.plist文件有关。

使用codesign -dvv检查签名文件的签名表明Info.plist未绑定。

$ codesign -dvv ./dist/helloworld
Executable=/Users/aaronciuffo/Documents/src/toy/codesign/dist/helloworld
Identifier=helloworld
Format=Mach-O thin (x86_64)
CodeDirectory v=20500 size=72086 flags=0x10000(runtime) hashes=2244+5 location=embedded
Signature size=9054
Authority=Developer ID Application: Aaron Ciuffo (4H9P6Q65AM)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Nov 2, 2020 at 9:03:30 PM
Info.plist=not bound
TeamIdentifier=4H9P6Q65AM
Runtime Version=10.11.0
Sealed Resources=none
Internal requirements count=1 size=172

一个suggested solution is using the Go gon package,但据我所知,GUN不包括添加所需的Info.plist

是否有工作流或应用程序可以帮助实现此目的?如何在XCode外部创建CL应用程序并成功对其签名?

推荐答案

如何手动签名和公证命令行工具

Apple要求所有分发的二进制文件都使用付费的Apple开发者帐户进行签名和公证。对于使用PyInstaller等工具创建的二进制文件或使用GCC编译的二进制文件,可以使用命令行工具完成此操作。

此进程的自动Python脚本

下面链接的脚本允许您使用特定于项目的.ini文件自动执行此过程。

codesign.py

安装

如果您已经拥有在XCode中配置了Developer ID ApplicationDeveloper ID Installer证书的开发人员帐户,请跳过此步骤

  • 创建Apple开发者账号
  • 从Apple App Store下载并安装X-Code
  • 打开并运行X-Code应用程序,并安装所需的任何附加软件
  • 打开首选项窗格(cmd+,),然后选择帐户
  • 选择要使用的开发人员帐户
  • 选择管理证书.
  • 单击左下角的+并选择开发者ID应用程序
  • 单击左下角的+并选择开发者ID安装程序

为altool创建特定于应用程序的密码以使用

Instructions from Apple

  • 打开KeyChain Access
  • 创建新密码项目(&Q;)
    • 钥匙链项名称:developer-altool
    • 帐户名:您的开发者帐户邮箱
    • 密码:您刚刚创建的特定于应用程序的密码

使用Pyinstaller或其他工具创建可执行二进制文件

NB!构建函数二进制文件可能需要其他参数,如--add-data

  • 创建一个文件二进制文件
    • pyinstaller --onefile myapp.py

对可执行文件签名

  • 将entitements.plist添加到目录(如下所示)
  • 列出可用密钥,找到开发者ID应用证书:
    • security find-identity -p basic -v
    1) ABC123 "Apple Development: [email protected] ()"
    2) XYZ234 "Developer ID Installer: Aaron Ciuffo ()"
    3) QRS333 "Developer ID Application: Aaron Ciuffo ()"
    4) LMN343 "Developer ID Application: Aaron Ciuffo ()"
    5) ZPQ234 "Apple Development: [email protected] ()"
    6) ASD234 "Developer ID Application: Aaron Ciuffo ()"
    7) 01010A "Developer ID Application: Aaron Ciuffo ()"
       7 valid identities found
    
  • codesign --deep --force --options=runtime --entitlements ./entitlements.plist --sign "HASH_OF_DEVELOPER_ID APPLICATION" --timestamp ./dist/foo.app

打包为pkg进行安装

  • 创建临时目录构建包:
    • mkdir /tmp/myapp
  • 使用同上构建pkg安装程序结构
    • ditto /path/to/myapp /tmp/myapp/path/to/install/location
      • 要将应用程序安装到目标系统上的/Applications/中,请使用:ditto ~/src/whiz_bang/dist/whizBang /tmp/whiz_bang/Applications/
    • 对应打包的所有文件重复上述操作
  • 生成包
  • productbuild --identifier "com.your.pkgname.pkg" --sign "HASH_OF_INSTALLER_ID" --timestamp --root /tmp/myapp / myapp.pkg
  • nb!--root选项的格式如下:--root<ditto path><relative path on target system to install from><signed .pkg file>

公证

  • xcrun altool --notarize-app --primary-bundle-id "com.foobar.fooapp" --username="[email protected]" --password "@keychain:Developer-altool" --file ./myapp.pkg
  • 查看电子邮件以确保公证成功
    • 或者使用以下命令检查状态:
      • xcrun altool --notarization-history 0 -u "developer@***" -p "@keychain:Developer-altool"
  • 如果公证失败,请使用以下内容查看详细日志:
  xcrun altool --notarization-info "Your-Request-UUID"
             --username "[email protected]"
             --password "@keychain:Developer-altool"

pkg的装订公证

  • 将公证添加到pkg
    • xcrun stapler staple ghostscript64.pkg

有用资源

这篇关于如何对在XCode外部创建的MacOS命令行工具进行公证?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-17 15:44