如何在Linux中签署Mac OS X应用程序?

时间:2012-07-31 08:48:44

标签: java linux code-signing osx-mountain-lion

对于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'?

3 个答案:

答案 0 :(得分: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配置代码签名证书。代码   签名将应用于所有启动程序和安装程序应用程序   相应的媒体文件。代码签名的实现   是跨平台的,因此您可以签署Windows和Mac OS X媒体文件   例如,来自Linux构建服务器。

所以它必须在技术上可行。

答案 1 :(得分:1)

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

要实现此目的,请执行以下步骤:

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

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>
  • 现在使用以下命令进行签名: CODESIGN_ALLOCATE = “/应用/ Xcode.app /内容/开发人员的/ usr / bin中/ codesign_allocate” codesign -s“证书名称”--resource-rules ResourceRules.plist -fv MyApp.app

  • 然后删除资源中的所有内容并验证签名(codesign -v -v MyApp.app)。你会发现它仍然有效

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

答案 2 :(得分:1)

我使用一种名为install4j的产品来为我的应用创建DMG文件。它可以在DMG文件中对应用程序进行正确的代码签名,并且可以通过OS而非macOS进行签名。

警告:install4j不是免费软件,实际上价格很高。