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

对于OS X,我将我的Java应用程序分发到DMG中。 自Mountain Lion发布以来,打开应用程序给出了以下错误信息:

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

显然,修复是签署.app文件,所以我阅读了代码签名指南 。 除了如何将这个function集成到我的一键构build过程这个重要的问题之外,一切似乎都很简单。

在所有平台上构build我的产品发生在我的Linux开发机器上。 我运行一个Ant脚本,并安装了Windows安装程序,初学者EXE,Linux安装程序,OS X应用程序和DMG。 所以我想将代码签名集成到这个过程中。

是否有相当于Linux的“codesign”?

在Linux中,没有办法代码签署Mac OS X应用程序

到目前为止,我发现做到这一点的唯一方法是SSH到Mac并使用它。

您可以通过仅签署应用程序的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 =“/ Applications / Xcode.app / Contents / Developer / usr / bin / codesign_allocate”codesign -s“Certificate Name”–resource-rules ResourceRules.plist -fv MyApp.app

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

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