16

对于 OS X,我在 DMG 中分发我的 Java 应用程序。自 Mountain Lion 发布以来,打开应用程序会显示以下错误消息:

[应用名称] 已损坏,无法打开。您应该弹出磁盘映像。

显然解决方法是签署 .app 文件,所以我阅读了Code Signing Guide除了如何将其集成到我的一键构建过程中这一重要问题之外,一切似乎都很简单。

在所有平台上构建我的产品都是在我的 Linux 开发机器上进行的。我运行一个 Ant 脚本,Windows 安装程序、启动程序 EXE、Linux 安装程序、OS X 应用程序和 DMG 都已构建。所以我想将代码签名集成到这个过程中。

Linux是否有相当于“代码设计”的东西?

4

3 回答 3

6

没有记录在 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 媒体文件进行签名。

所以技术上应该是可行的。

于 2012-08-28T09:40:29.487 回答
2

我使用名为install4j的产品为我的应用程序创建 DMG 文件。它在 DMG 文件中正确地对应用程序进行编码,并且可以从 macOS 以外的操作系统执行此操作。

不过警告:install4j 不是免费软件,而且实际上非常昂贵。

于 2019-04-29T15:59:48.640 回答
1

您可以通过仅对应用程序的 JavaApplicationStub 和 info.plist 进行签名并从签名中排除“Resources”文件夹来解决此问题。然后,您必须更改构建过程以使用预签名容器。当然,这不是代码设计的意义,但它会起作用;-)

为此,请执行以下步骤:

  • 像往常一样创建你的 .app
  • 将其移至您的 Mac
  • 创建一个包含以下内容的文件“ResourceRules.plist”:

资源规则.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>
  • 现在使用以下命令签名: CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/usr/bin/codesign_allocate" codesign -s "Certificate Name" --resource-rules ResourceRules.plist -fv MyApp.app

  • 然后删除 Resource 中的所有内容并验证签名(代码设计 -v -v MyApp.app)。你会看到它仍然有效

  • 在构建过程中使用完整的签名存根。您可以更改资源中的所有内容,但不能更改 info.plist。

于 2012-11-08T08:22:10.297 回答