用于OS X Gatekeeper的代码签名Java应用程序
我正在尝试将Java应用程序分发给OS X用户。 我没有使用Mac商店 – 它将通过我自己的网站分发。 无论我尝试什么,OS X的Gatekeeper拒绝该应用程序。
这是我的方法:
(1)像往常一样构建应用程序,获取一个JAR文件
(2)使用如下所述的appbundler
: https : appbundler
。 这会在我的JAR周围创建一个运行良好的.app,并在MyApp.app/Contents/PlugIns
目录中包含JVM。
(3)使用我的开发者证书签署应用程序:
codesign -s 'Developer ID Application: MyCompany Ltd' --deep MyApp.app
…过程成功完成
(4)确认.app将遵守关守的铁拳法则:
spctl --assess --verbose=4 --type execute MyApp.app
……我得到的结果是:
MyApp.app: a sealed resource is missing or invalid
对我来说似乎不是很啰嗦! 我能做错什么? 或者我如何获得更多信息?
SO / Google搜索“密封的资源……”是指签名框架(我没有)或建议使用--force
选项进行签名(我尝试但不起作用)。
你不能使用--deep
。 这听起来像是正确的选择,因为您还需要对嵌入式JRE进行签名,但它不起作用。 来自Apple的文档 :
重要提示:虽然–deep选项可以应用于签名操作,但不建议这样做。 我们建议您在各个阶段内部签署代码(因为Xcode会自动执行)。 使用–deep签名仅用于紧急维修和临时调整。
经过大量的拉扯,我从各种教程中拼凑出来。 这个是最有帮助的。 这是我作为Ant脚本的最终解决方案:
要注意的另一件事是不要使用命令行zip
在签名后打包你的应用程序,因为它会破坏应用程序的协同设计。 您应该使用productbuild
,PackageMaker, xip
或dmg打包它。