#java #macos
#java #macos
Вопрос:
Я читаю документацию и создал пакет приложений (используя Finder, Terminal и TextEdit) следующим образом:
GUITest.app/
Contents/
Info.plist
PkgInfo
MacOS/
JavaAppLauncher
Resources/
GenericJavaApp.icns
Java/
gui.jar
Однако, когда я пытаюсь дважды щелкнуть по finder, на значке появляется знак «нет входа», и когда я дважды щелкаю, я получаю: 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
происходит сбой…
Комментарии:
1. Опубликуйте
info.plist
, поскольку это может быть просто из-за неправильного указания пути к среде выполнения.
Ответ №1:
Хорошо — потребовалось некоторое вычисление, но был ряд проблем. В конечном счете, я перекомпилировал свой собственный JavaAppLauncher из исходного кода app bundler и обработал его в 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