适用于 OS X Gatekeeper 的代码符号 Java 应用程序



我正在尝试将Java应用程序分发给OS X用户。我没有使用Mac商店 - 它将通过我自己的网站分发。无论我尝试什么,OS X的Gatekeeper都会拒绝该应用程序。

这是我的方法:

(1)像往常一样构建应用,获取JAR文件

(2) 按如下所述使用appbundler:https://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html。这会在我的 JAR 周围创建一个运行良好的.app,并将 JVM 包含在 MyApp.app/Contents/PlugIns 目录中。

(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/谷歌搜索"密封资源..."参考签名框架(我没有)或建议使用 --force 选项进行签名(我尝试过但不起作用)。

你不能使用 --deep . 这听起来是正确的选择,因为您还需要对嵌入式 JRE 进行签名,但它不起作用。 来自苹果的文档:

重要提示:虽然 --deep 选项可以应用于签名 操作,不建议这样做。我们建议您签署代码 由内而外的各个阶段(就像 Xcode 自动执行的那样)。签署 带 --deep 仅用于紧急维修和临时调整。

经过大量的拔毛,我从各种教程中拼凑出来。 这个是最有帮助的。 这是我作为 Ant 脚本的最终解决方案:

<!-- code sign -->
<exec executable="chmod">
    <arg line="a+w ${build.dir}/Mac/MyApp.app/Contents/PlugIns/jre"/>
</exec>
<apply executable="codesign"> <!-- note: this loops through the contents of dir -->
    <arg line="-f -s 'Developer ID Application: My Organization'"/>
    <fileset dir="${build.dir}/Mac/MyApp.app/Contents/PlugIns/jre" />
</apply>
<exec executable="codesign" dir="${build.dir}/Mac"> 
    <arg line="-f -s 'Developer ID Application: My Organization' MyApp.app/Contents/PlugIns/jre"/>
</exec>
<exec executable="codesign" dir="${build.dir}/Mac"> 
    <arg line="-f -s 'Developer ID Application: My Organization' MyApp.app/Contents/PlugIns/jre/Contents/_CodeSignature/CodeResources"/>
</exec>
<!-- also codesign anything else in _CodeSignature (see comments) -->
<exec executable="codesign" dir="${build.dir}/Mac">
    <arg line="-f -s 'Developer ID Application: My Organization' MyApp.app"/>
</exec>

<!-- verify codesign -->
<exec executable="codesign" dir="${build.dir}/Mac" failonerror="true">
    <arg line="-vv MyApp.app"/>
</exec>

<!-- verify gatekeeper -->
<exec executable="spctl" dir="${build.dir}/Mac" failonerror="true">
    <arg line="-vv --assess --type execute MyApp.app"/>
</exec>

需要注意的另一件事是在签名后不要使用命令行zip打包应用,因为这会破坏应用的协同设计。 您应该使用 productbuild 、PackageMaker、xip 或 dmg 打包它。

相关内容

  • 没有找到相关文章

最新更新