使用 Install4j 6 在 OS X 上对应用程序包进行代码签名,密封资源丢失或无效
Code signing app bundle on OS X with Install4j 6, sealed resource is missing or invalid
我在使用 Install4j 6 为 OS X 生成签名应用程序包时遇到问题。我已阅读 http://blog.ej-technologies.com/2014/09/the-v2-signature-scheme-for-application.html 上的博客条目,它让我相信无法创建一个签名的安装程序应用程序(我的客户需要几个步骤,包括同意许可)安装一个签名的应用程序。
示例:
- 用户下载量MyApplication.dmg
- 用户将其安装在 Finder 中并单击 "Install MyApplication.app"
- 用户按照安装程序中的说明进行操作,应用程序包最终出现在 /Application/MyApplication.app
这里的问题是,如果我使用 Single Bundle Installer,只有 'Install MyApplication.app'(安装程序)被签名。我可以用 spctl 验证这一点。
$ spctl -a -v /Volumes/<VOLNAME>/Install\ MyApplication.app
/Volumes/<VOLNAME>/Install MyApplication.app: accepted
source=Developer ID
问题是,应用程序包本身没有签名,而且我收到烦人的防火墙弹出窗口,因为应用程序必须打开 TCP 端口。
$ spctl -a -v /Applications/My\ Application.app
/Applications/My Application.app: rejected
source=no usable signature
所以我所做的就是将其转换为 单一捆绑包存档 。然后我要做的是打开 DMG,然后将 MyApplication.app 拖到 /Applications 文件夹中。但是 spctl 仍然抱怨:
$ spctl -a -v /Applications/My\ Application.app
/Applications/My Application.app: a sealed resource is missing or invalid
谁能指出我正确的方向?我该如何解决这个问题?是否完全不可能有一个签名的安装程序(即带有 GUI 向导的东西)来提取一个签名的应用程序包?为什么安装的时候还要修改bundle?
The problem here is that if I use a Single Bundle Installer, only the >'Install MyApplication.app' (the installer) is signed
没错。否则在技术上是不可能的,因为在包含的目录 (.install4j) 中有可变的运行时文件会破坏签名。我们今天不会添加这种媒体文件类型,但显然我们不能删除它。
它会通过网守,但如果您需要签名的应用程序包,则必须使用单个包存档或文件夹安装程序。
So what I did is convert it to a Single Bundle Archive. What I then do is >open the DMG, and drag the MyApplication.app to the /Applications folder. >But then spctl still complains:
这不应该发生。中间一定有什么东西修改了一个文件。尝试签署一个不同的安装程序,例如 "hello world" 示例,并检查在这种情况下会发生什么。
我在使用 Install4j 6 为 OS X 生成签名应用程序包时遇到问题。我已阅读 http://blog.ej-technologies.com/2014/09/the-v2-signature-scheme-for-application.html 上的博客条目,它让我相信无法创建一个签名的安装程序应用程序(我的客户需要几个步骤,包括同意许可)安装一个签名的应用程序。
示例:
- 用户下载量MyApplication.dmg
- 用户将其安装在 Finder 中并单击 "Install MyApplication.app"
- 用户按照安装程序中的说明进行操作,应用程序包最终出现在 /Application/MyApplication.app
这里的问题是,如果我使用 Single Bundle Installer,只有 'Install MyApplication.app'(安装程序)被签名。我可以用 spctl 验证这一点。
$ spctl -a -v /Volumes/<VOLNAME>/Install\ MyApplication.app
/Volumes/<VOLNAME>/Install MyApplication.app: accepted
source=Developer ID
问题是,应用程序包本身没有签名,而且我收到烦人的防火墙弹出窗口,因为应用程序必须打开 TCP 端口。
$ spctl -a -v /Applications/My\ Application.app
/Applications/My Application.app: rejected
source=no usable signature
所以我所做的就是将其转换为 单一捆绑包存档 。然后我要做的是打开 DMG,然后将 MyApplication.app 拖到 /Applications 文件夹中。但是 spctl 仍然抱怨:
$ spctl -a -v /Applications/My\ Application.app
/Applications/My Application.app: a sealed resource is missing or invalid
谁能指出我正确的方向?我该如何解决这个问题?是否完全不可能有一个签名的安装程序(即带有 GUI 向导的东西)来提取一个签名的应用程序包?为什么安装的时候还要修改bundle?
The problem here is that if I use a Single Bundle Installer, only the >'Install MyApplication.app' (the installer) is signed
没错。否则在技术上是不可能的,因为在包含的目录 (.install4j) 中有可变的运行时文件会破坏签名。我们今天不会添加这种媒体文件类型,但显然我们不能删除它。
它会通过网守,但如果您需要签名的应用程序包,则必须使用单个包存档或文件夹安装程序。
So what I did is convert it to a Single Bundle Archive. What I then do is >open the DMG, and drag the MyApplication.app to the /Applications folder. >But then spctl still complains:
这不应该发生。中间一定有什么东西修改了一个文件。尝试签署一个不同的安装程序,例如 "hello world" 示例,并检查在这种情况下会发生什么。