【问题标题】:How to zip Mac app that preserve all the properties如何压缩保留所有属性的 Mac 应用程序
【发布时间】:2013-05-26 06:30:46
【问题描述】:

我在 Mac 上使用 JavaFX 创建了一个应用程序。我正在使用 ant 构建该应用程序并将其压缩到一个文件夹中。

关于尝试使用

进行压缩
<zip destfile="MyApp.zip" basedir="MyApp"/>

它创建 zip 文件但不保留位于 MyApp/Contents.MacOS/ 的 JavaAppLauncher 属性

那我试过这个命令-

<exec executable="zip" dir="${basedir}/target">
  <arg value="-r" />
  <arg value="My-app.zip" />
  <arg value="My.app" />
</exec>

解压缩此 zip 文件时,我发现此应用程序也无法启动。现在 JavaAppLauncher 的属性被保留了,但这次我面临的问题是不保留在 MyApp.app/Contents/PlugIns/jdk1.7.0_21.jdk 中找到的 libjli.dylib (这是一个别名)的属性/Contents/MacOS, zip 将其转换为动态库。

可能还有一些文件未能在 zip 上保留其属性。那么如何保存app内添加的libs、unix文件、别名等所有属性,以便解压后成功启动。

谢谢

【问题讨论】:

  • 我想大部分开发者都是用diskimages来解决这个问题的,并不是说做不到。

标签: java macos ant zip


【解决方案1】:

至少在我的系统上,libjli.dylib 是 Unix 风格的符号链接而不是 Mac“别名”,在这种情况下,您应该能够将 -y 选项添加到 zip 命令以保留符号链接

<exec executable="zip" dir="${basedir}/target">
  <arg value="-r" />
  <arg value="-y" />
  <arg value="My-app.zip" />
  <arg value="My.app" />
</exec>

如果它是 mac 意义上的别名而不是符号链接,那么您可以尝试使用 ditto,它可以构建 zip,以与 Finder 的“创建存档”相同的 __MACOSX 形式保存资源分叉和 hfs 元数据选项使用。为了正确提取这样的 zip,用户必须在 Finder 中双击它(或同上提取它)而不是使用unzip

<exec executable="ditto" dir="${basedir}/target">
  <arg value="-c" />
  <arg value="-k" />
  <arg value="--keepParent" />
  <arg value="--sequesterRsrc" />
  <arg value="My.app" />
  <arg value="My-app.zip" />
</exec>

或者,正如 cmets 中端庄的建议,创建一个压缩磁盘映像,这是 Mac 用户期望其应用程序分发的正常方式

<exec executable="hdiutil">
  <arg value="create" />
  <arg value="-srcfolder" />
  <arg file="${basedir}/target" />
  <arg value="-volname" />
  <arg value="My App" />
  <arg file="MyApp.dmg" />
</exec>

这会将target 的全部内容打包到图像中,因此您可能需要稍微更改一些路径,以便My.appsrcfolder 中唯一的东西(例如在@987654334 创建它@ 然后将target/appbundle 作为-srcfolder 传递给hdiutil)。

【讨论】:

  • 感谢您的回复,因为我已经告诉过我们正在使用 JavaFX 部署我们的应用程序,因此它默认为我的应用程序创建应用程序和 dmg(抱歉,我忘了提及 dmg),所以我们不需要为它创建 dmg。我们只需要压缩应用程序。根据您的建议,我尝试使用 -y 选项,但它不保留 libjli.dylib 的属性(它的类型是 zip 之前的别名),将其转换为动态库。
  • @NeelamSharma 我不清楚您为什么需要 both dmg 应用程序的 zip,但我添加了另一个使用“同上”工具的可能性。
  • 感谢您的帮助,我已尝试使用 对我来说效果很好:) 早些时候我试图通过在根目录下复制不起作用的应用程序来尝试。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
相关资源
最近更新 更多