本文介绍了如何对在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
。
推荐答案
如何手动签名和公证命令行工具
Apple要求所有分发的二进制文件都使用付费的Apple开发者帐户进行签名和公证。对于使用PyInstaller等工具创建的二进制文件或使用GCC编译的二进制文件,可以使用命令行工具完成此操作。
此进程的自动Python脚本
下面链接的脚本允许您使用特定于项目的.ini
文件自动执行此过程。
安装
如果您已经拥有在XCode中配置了Developer ID Application
和Developer ID Installer
证书的开发人员帐户,请跳过此步骤
- 创建Apple开发者账号
- https://developer.apple.com,并为开发者账户支付99美元。小偷
- 从Apple App Store下载并安装X-Code
- 打开并运行X-Code应用程序,并安装所需的任何附加软件
- 打开首选项窗格(cmd+,),然后选择帐户
- 单击左下角的
+
- 选择
Apple ID
- 输入您的苹果ID和密码
- 以前创建的密钥可以从https://developer.apple.com 下载并安装
- 单击左下角的
- 选择要使用的开发人员帐户
- 选择管理证书.
- 单击左下角的
+
并选择开发者ID应用程序 - 单击左下角的
+
并选择开发者ID安装程序
为altool创建特定于应用程序的密码以使用
- 打开
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
有用资源
- Norarize a Commandline utility
- 此博客详细介绍设置:
- 开发人员配置文件和证书
- 一次性密码
- 创建密钥链项以允许
-p "@keychain:Key"
开关工作 - 签名公证
- 加窗
- 此博客详细介绍设置:
- Adding an
entitlements.plist
to the signing process- 确保可以正确访问嵌入式Python库
- Signing and Notarizing tools compiled outside of XCode
- 封面:
- 签名
- 包装
- 公证
- 装订
- 封面:
这篇关于如何对在XCode外部创建的MacOS命令行工具进行公证?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!