对于OS X,我将我的Java应用程序分发到DMG中。自Mountain Lion发布以来,打开应用程序会出现以下错误消息:
[app name]已损坏,无法打开。您应该弹出磁盘映像。
Apparently the fix is to sign the .app file所以我读了Code Signing Guide。除了如何将其集成到我的一键构建过程中的重要问题之外,一切似乎都很简单。
在所有平台上构建我的产品都发生在我的Linux开发机器上。我运行一个Ant脚本,Windows安装程序,启动器EXE,Linux安装程序,OS X应用程序和DMG都是构建的。所以我想将代码签名集成到这个过程中。
是否有相当于Linux的'codesign'?
在Linux中没有记录的代码签署Mac OS X应用程序的方法。
到目前为止,我发现这样做的唯一方法是通过SSH连接到Mac并使用它。
另一方面,根据@Steve McLeod(https://stackoverflow.com/a/55906962/28190),安装程序包install4j确实提供了这个:
在Windows和Mac OS X上集成代码签名。在“常规设置”部分,install4j现在有一个“代码签名”选项卡,您可以在其中配置Windows和Mac OS X的代码签名证书。代码签名将应用于相应媒体文件中的所有启动器和安装程序应用程序。代码签名的实现是跨平台的,因此您可以从Linux构建服务器签署Windows和Mac OS X媒体文件。
所以它必须在技术上可行。
您可以通过仅签署应用程序的JavaApplicationStub和info.plist并从签名中排除“Resources”文件夹来解决此问题。然后,您必须更改构建过程以使用预先签名的容器。当然这不是代码签名的意义,但它会起作用;-)
要实现此目的,请执行以下步骤:
ResourceRules.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>rules</key>
<dict>
<key>^Resources/</key>
<false/>
<key>^version.plist$</key>
<true/>
</dict>
</dict>
</plist>
我使用名为install4j的产品为我的应用程序创建DMG文件。它代码在DMG文件中正确签署应用程序,并且可以从除macOS之外的操作系统执行此操作。
警告:install4j不是免费软件,实际上相当昂贵。