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

问题描述 投票:15回答:3

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

java linux code-signing osx-mountain-lion
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媒体文件。

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


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 =“/ 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。

1
投票

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

警告:install4j不是免费软件,实际上相当昂贵。

© www.soinside.com 2019 - 2024. All rights reserved.