3

我正在尝试将 Java 应用程序发送到 MacOS X App Store。我的所有代码都已正确签名(jar、dylib 等)。不幸的是,在发送二进制文件时,我总是收到“无效的二进制文件”错误,并显示以下消息:

尊敬的开发人员, 我们发现您最近交付的“tamaggo ibi 桌面”存在一个或多个问题。要处理您的交付,必须更正以下问题: 未启用应用沙箱 - 以下可执行文件必须在权利属性列表中包含布尔值为 true 的“com.apple.security.app-sandbox”权利。有关对您的应用程序进行沙盒化的更多信息,请参阅应用程序沙盒页面。• tamaggo ibi.app/Contents/MacOS/JavaAppLauncher 纠正这些问题后,转到版本详细信息页面并单击“准备上传二进制文件”。继续完成提交过程,直到应用状态为“等待上传”。然后,您可以提供更正后的二进制文件。问候, App Store 团队

我用谷歌搜索了一整天,但没有找到任何东西。有人知道如何在 .entitlements 文件中对 JavaAppLauncher 进行沙箱处理吗?

为了提供更多信息,这是我签署代码的方式: /usr/bin/codesign --resource-rules desktop-app/target/dist/myApp/Contents/ResourceRules.plist --verbose --force --sign "3rd Party Mac Developer Application: XXX" desktop-app/target/dist/myApp

find desktop-app/target/dist/myApp.app/Contents/ -type f \( -name "*.jnilib" -or -name "*.jar" -or -name "*.dylib" \) -exec codesign --resource-rules desktop-app/target/dist/myApp.app/Contents/ResourceRules.plist --verbose -f -s "3rd Party Mac Developer Application: XXX" --entitlements desktop-app/target/dist/myApp.app/Contents/myApp.entitlements {} \;

codesign --resource-rules desktop-app/target/dist/myApp.app/Contents/ResourceRules.plist --verbose --force --sign "3rd Party Mac Developer Application: XXX" desktop-app/target/dist/myApp.app/Contents/Resources/binaries/ffmpeg

codesign --resource-rules desktop-app/target/dist/myApp.app/Contents/ResourceRules.plist --verbose --force --sign "3rd Party Mac Developer Application: XXX" desktop-app/target/dist/myApp.app/Contents/MacOS/JavaAppLauncher

4

1 回答 1

2

自 2012 年夏末以来,我们在 MAS 上就有了一个 java 应用程序。我认为我们是商店里的第一个 java 应用程序(更多信息请访问infinitekind.com)。

我认为一个问题是你是如何签名的。要在应用商店中被接受,您需要捆绑 JDK。这可以使用 appbundle ant 任务来完成。由于官方版本似乎停滞不前并且不接受更新,因此我们创建了一个分支并进行了一些改进:

https://bitbucket.org/infinitekind/appbundler

我们还创建了 OpenJDK 的一个分支,其中包含一些对我们来说是破坏者(菜单项键盘快捷键问题)的小修复。这些现在可能已经被纳入主线 OpenJDK,但我不这么认为。

https://bitbucket.org/infinitekind/openjdk7u-jdk

无论如何,在您的情况下,上述两项可能不是必需的,但这就是我们所做的并且它起作用了。我认为真正的问题是您要签名的内容和顺序。这是我们所做的,现在已经接受了五次更新提交:

  # sign all the jar and dylib files (signing jars is apparently not required by apple, but should be!)
  find "Path/To/App/AppName.app/Contents" -type f \( -name "*.jar" -or -name "*.dylib" \) -exec codesign -f -s '3rd Party Mac Developer Application: YourCompanyName' --entitlements 'path/to/AppName.entitlements' {} \;

  # Sign the JDK plugin
  codesign --verbose -f -s '3rd Party Mac Developer Application: YourCompanyName' --entitlements 'path/to/AppName.entitlements' "Path/To/App/AppName.app/Contents/Plugins/jdk"

  # sign the whole bundle
  codesign --verbose -f -s '3rd Party Mac Developer Application: YourCompanyName' --entitlements 'path/to/AppName.entitlements' "Path/To/App/AppName.app"

希望这对您有所帮助还为时不晚!

于 2013-04-08T22:32:02.253 回答