macOS下CLI程序公证相关问题:签名后报错及票据绑定疑问
关于Go开发CLI程序签名公证的问题解答
问题1:CLI程序能否绑定公证票据?
是的,单独的CLI二进制程序无法直接绑定公证票据——公证票据仅能嵌入到带目录结构的包(如.app应用包、.pkg安装包)中。对于单个CLI二进制文件,你只能将其压缩为.zip或.dmg后提交公证,公证服务会生成对应票据,但无法将票据直接绑定到二进制本身。不过这不会影响公证有效性,系统会通过在线验证确认程序的公证状态。
问题2:如何避免用户手动移除隔离旗?
浏览器下载的文件会被系统标记为“来自互联网”,即使完成签名公证,用系统unzip解压后仍会保留隔离旗。以下是无需用户手动操作的解决方案:
方案1:使用.pkg安装包打包分发
将CLI程序打包成.pkg安装包,步骤如下:
- 用
pkgbuild创建安装包:pkgbuild --install-location /usr/local/bin --component your-cli binary.pkg - 对
.pkg进行签名:productsign --sign "Developer ID Installer: Your Name (TeamID)" binary.pkg signed-binary.pkg - 将签名后的
.pkg提交公证。用户安装后,程序会直接放到指定路径(如/usr/local/bin),无隔离旗,可直接运行。
方案2:用ditto创建无属性压缩包
若坚持用.zip分发,可使用ditto替代系统默认压缩方式,生成无额外属性的压缩包:
ditto -c -k --sequesterRsrc --keepParent your-cli cli.zip
该命令生成的zip包,用户用系统unzip解压后,隔离旗不会附加到CLI程序上,可直接运行。
方案3:通过Homebrew公式分发
如果目标用户是开发者,提交Homebrew公式是更友好的方式。用户通过brew install your-cli安装时,Homebrew会自动处理文件属性,不会产生隔离旗问题,还能提供版本管理、更新等功能。
内容的提问来源于stack exchange,提问作者HelloWorld
相关产品推荐
相关产品推荐

