我正在尝试将一个Java应用程序分发给OS X用户。我没有使用Mac商店,而是通过自己的网站进行分发。无论我尝试什么方法,OS X的Gatekeeper都会拒绝该应用程序。
我的方法如下:
(1) 像往常一样构建应用程序,获得JAR文件
(2) 使用appbundler,如此处所述:https://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html。这将创建一个.app文件,其中包含位于MyApp.app/Contents/PlugIns目录中的JVM,可以很好地运行。
(3) 用我的开发者证书签署应用程序:
(4) 验证.app是否符合Gatekeeper的严格要求:
我的方法如下:
(1) 像往常一样构建应用程序,获得JAR文件
(2) 使用appbundler,如此处所述:https://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html。这将创建一个.app文件,其中包含位于MyApp.app/Contents/PlugIns目录中的JVM,可以很好地运行。
(3) 用我的开发者证书签署应用程序:
codesign -s 'Developer ID Application: MyCompany Ltd' --deep MyApp.app
...过程成功完成(4) 验证.app是否符合Gatekeeper的严格要求:
spctl --assess --verbose=4 --type execute MyApp.app
...我得到的结果是:MyApp.app: a sealed resource is missing or invalid
对我来说似乎不够详细!我可能做错了什么?或者如何获取更多信息?
关于“a sealed resource...”的SO/Google搜索涉及签名框架(我没有),或建议使用--force
选项进行签名(我尝试过,但不起作用)。
codesign -vv MyApp.app
行),然后出现错误信息[exec] MyApp.app: code object is not signed at all
/[exec] In subcomponent: MyApp.app/Contents/PlugIns/jre/Contents/_CodeSignature/CodeDirectory
。有什么想法吗? - HughHughTeotl_CodeSignature/CodeDirectory
-- 不确定是什么导致了这种差异。您必须签署_CodeSignature
中的所有内容,因此只需将_CodeSignature/CodeDirectory
(和其中的任何其他内容)添加到列表中即可。此外,请确保您在 OS X 10.9 或更高版本中签名。如果使用旧版本的 OS X,则代码签名将无法工作。 - martinez314