我正在阅读文档,并创建了一个应用程序捆绑包(使用Finder,Terminal和TextEdit),如下所示:

GUITest.app/
    Contents/
        Info.plist
        PkgInfo
        MacOS/
            JavaAppLauncher
        Resources/
            GenericJavaApp.icns
            Java/
                gui.jar

但是,当我尝试在查找程序上双击时,该图标上带有“禁止进入”的标志,而当我双击时,会得到:The application "GUITest" can't be opened. -10810
如果我尝试手动启动JavaAppLauncher:./GUITest.app/Contents/MacOS/JavaAppLauncher我得到一个带有“JRELoadError”的对话框

Info.plist看起来非常简单。
PkgInfo只是AAPL????,而JavaAppLauncher则来自http://java.net/projects/appbundler/downloads/download/appbundler-1.0.jar

这些问题可能归结为不良的Info.plist或其他问题吗?

这是Info.plist:
<?xml version="1.0" ?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleExecutable</key>
    <string>JavaAppLauncher</string>
    <key>CFBundleIconFile</key>
    <string>GenericApp.icns</string>
    <key>CFBundleIdentifier</key>
    <string>gui.GUITest</string>
    <key>CFBundleDisplayName</key>
    <string>GUITest</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>GUITest</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>NSHumanReadableCopyright</key>
    <string>©xirt, 2014</string>
    <key>LSApplicationCategoryType</key>
    <string>public.app-category.developer-tools</string>
    <key>JVMRuntime</key>
    <string>jdk1.7.0_17.jdk</string>
    <key>JVMMainClassName</key>
    <string>main.GUITest</string>
    <key>JVMOptions</key>
    <array>
    </array>
    <key>JVMArguments</key>
    <array>
    </array>
  </dict>
</plist>

注意:通过删除com.apple.quarantine扩展属性来删除禁止进入标志:xattr -d com.apple.quarantine JavaAppLauncher但是问题仍然存在:
$ open ./GUITest.app
LSOpenURLsWithRole() failed with error -10810 for the file /Users/.../GUITest.app.

如果该过程完全失败,则可以重新创建以上错误。例如,用以下外壳程序脚本替换JavaAppLauncher会重现此问题:
#!/bin/bash
return -1

所以,我想我必须看看JavaAppLauncher为什么失败...

最佳答案

好的-进行了一些计算,但是有很多问题。最终,我从应用程序捆绑程序源重新编译了我自己的JavaAppLauncher,并在Xcode中逐步进行了调试(有关有用的文档,这非常有用!)。
https://java.net/projects/appbundler

  • JDK参考似乎是错误的,因此在这里删除JVM Runtime键<key>JVMRuntime</key><string>jdk1.7.0_17.jdk</string>很有帮助。
  • Java目录必须位于目录级别,而不是资源级别。
    GUITest.app/
        Contents/
            Info.plist
            PkgInfo
            MacOS/
                JavaAppLauncher
            Resources/
                GenericJavaApp.icns
            Java/
               gui.jar
    
  • 解决了这些问题后,尽管有两个单独的应用程序显示相同的diff,但一个工作,而另一个显示错误-1080(!)。删除扩展属性可以解决问题:xattr -lr GUITest.app

  • 另请参见包装上的java.net页面:
    http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html

    10-08 19:15