3

我正在嘗試將Java應用程序發送到MacOS X App Store。我的所有代碼都正確簽名(罐子,dylib等)。不幸的是,在發送二進制文件時,我總是得到一個「無效二進制」錯誤,並顯示以下消息:如何將JavaAppLauncher嵌入到App Store沙盒

尊敬的開發人員, 我們發現您近期針對「tamaggo ibi desktop」發送的一個或多個問題。要處理您的交付,必須更正以下問題: 未啓用應用程序沙箱 - 以下可執行文件必須在權利屬性列表中包含布爾值爲true的「com.apple.security.app-sandbox」權利。有關沙盒應用的更多信息,請參閱應用沙盒頁面。 •tamaggo ibi.app/Contents/MacOS/JavaAppLauncher 一旦這些問題得到解決,請轉到版本詳細信息頁面,然後單擊「準備上傳二進制文件」。繼續完成提交過程,直到應用狀態爲「等待上傳」。然後您可以提供更正的二進制文件。 此致, 應用商店團隊

我谷歌搜索整整一天,但沒有找到任何東西。有誰知道如何對.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

回答

2

我們已經對Java應用程序MAS自2012年夏末以來。我認爲我們是商店中的第一個Java應用程序(更多信息請訪問infinitekind.com)。

我認爲一個問題是你如何簽署。要在應用商店中接受,您需要捆綁JDK。這可以使用appbundler ant任務來完成。我們創建的這個叉子有一些改進,因爲官方的一個似乎是停滯,不接受更新:

https://bitbucket.org/infinitekind/appbundler

我們還創建了OpenJDK的一個叉一對夫婦輕微修正這是dealbreakers(菜單項鍵盤快捷方式問題)對我們來說。這些可能現在已經被納入主線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" 

希望這不是太晚有所幫助!

+0

謝謝!我會馬上測試它!我真的希望這會解決我的問題,因爲我很無能! – iDev

+0

謝謝。我已經在使用你的叉子,但是是舊版本。我採取了最新的,它解決了我的問題。我也使用了與您相同的簽署順序!現在正在等待審查! – iDev