<AWT Dev> Java 8 updates are causing "Apps that use non-public APIs will be rejected"
Chris Bensen
chris.bensen at oracle.com
Tue Nov 17 19:24:52 UTC 2015
The change is only for the Mac App Store. You can easily look at the changeset associated with JDK-8138650 to verify this:
http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4 <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4>
This is the relevant code change:
+++ b/modules/fxpackager/src/main/java/com/oracle/tools/packager/mac/MacAppStoreBundler.java Fri Oct 02 15:33:14 2015 -0600 <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.2>
@@ -290,13 +290,33 @@ <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.3>
I18N.getString("error.non-existent-runtime.advice"))); <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.4>
} <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.5>
<http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.6>
- if (new File(baseDir, "Contents/Home/lib/libjfxmedia_qtkit.dylib").exists() <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.7>
- || new File(baseDir, "Contents/Home/jre/lib/libjfxmedia_qtkit.dylib").exists()) <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.8>
- { <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.9>
+ int majorVersion; <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.10>
+ int updateVersion; <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.11>
+ <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.12>
+ try { <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.13>
+ majorVersion = Integer.parseInt(params.get(".runtime.version.major").toString()); <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.14>
+ updateVersion = Integer.parseInt(params.get(".runtime.version.update").toString()); <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.15>
+ } catch (Exception e) { <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.16>
+ // assume the worst <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.17>
+ majorVersion = 8; <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.18>
+ updateVersion = 60; <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.19>
+ } <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.20>
+ <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.21>
+ // Quicktime <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.22>
+ // before 8u40 it was all of media <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.23>
+ // after 8u40 QTKit dependencies are isolated in it's own library <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.24>
+ if (majorVersion == 8 && updateVersion >= 40) { <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.25>
rules.add(JreUtils.Rule.suffixNeg("/lib/libjfxmedia_qtkit.dylib")); <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.26>
} else { <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.27>
rules.add(JreUtils.Rule.suffixNeg("/lib/libjfxmedia.dylib")); <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.28>
} <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.29>
+ <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.30>
+ // webkit <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.31>
+ // 8u60 webkit started using an API Apple didn't like <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.32>
+ if (majorVersion == 8 && updateVersion >= 60) { <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.33>
+ rules.add(JreUtils.Rule.suffixNeg("/lib/libjfxwebkit.dylib")); <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.34>
+ } <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.35>
+ <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.36>
return rules.toArray(new JreUtils.Rule[rules.size()]); <http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/761213753af4#l2.37>
}
Chris
> On Nov 17, 2015, at 11:00 AM, Kevin Rushforth <kevin.rushforth at oracle.com> wrote:
>
> Yes, this is correct. We consider this only a short term workaround for the problem. A longer term solution will be needed that will allow distributing WebView applications.
>
> Chris: is there a way to override this behavior?
>
> -- Kevin
>
>
> Dr. Michael Paus wrote:
>> Just in order to better understand this issue and the fix. Does this mean that the packager
>> will now ALWAYS delete the libjfxwebkit.dylib when building a DMG file? That would mean
>> that I could not bundle and distribute any application anymore for the Mac which uses
>> a WebView. Have you considered the fact that many people do bundle their apps but
>> have their own distribution channels and do not upload the apps to the Apple store.
>> There should at least be some switch to override this behavior.
>> Just my 2+1/2 cents.
>> Michael
>>
>>
>>
>>
>> Am 17.11.15 um 18:31 schrieb Kevin Rushforth:
>>> [taking awt-dev off of this thread]
>>>
>>> The fix that was put into 8u72-b02 is that the packager will no longer include libjfxwebkit.dylib in the packaged app. Is this not working correctly?
>>>
>>> -- Kevin
>>>
>>>
>>> Sergey Bylokhov wrote:
>>>> I think openjfx-dev at openjdk.java.net (cc) is correct place to ask this question.
>>>>
>>>> On 16.11.15 23:10, Ondřej Kvasnovský wrote:
>>>>> Hi,
>>>>>
>>>>> We are facing to an issue with latest Java updates when we try to
>>>>> release apps into Apple app store. I have described the issue here, with
>>>>> all my findings:
>>>>> http://ondrej-kvasnovsky.blogspot.com/2015/10/java-8-update-60-is-causing-apps-that.html
>>>>>
>>>>> In short, the issue is that we are not able to release Java app into app
>>>>> store since 1.8_60 because it uses private API (see the link above if
>>>>> you want to know how to verify that).
>>>>>
>>>>> I spoke about this issue with Martijn Verburg and he pointed me to these
>>>>> two issues:
>>>>> https://bugs.openjdk.java.net/browse/JDK-8138650 - fixed for 8u72
>>>>> https://bugs.openjdk.java.net/browse/JDK-8138652 - permanent fix for 9
>>>>> (replace private libs with public ones)
>>>>>
>>>>> I have downloaded that jdk1.8.0_72 b05 JDK and run (downloaded from
>>>>> https://jdk8.java.net/download.html):
>>>>> otool -L
>>>>> /Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/libjfxwebkit.dylib
>>>>> | grep icu
>>>>> /usr/lib/libicucore.A.dylib (compatibility version 1.0.0, current
>>>>> version 51.1.0)
>>>>> And it the issue is still there, Build b05 still references private API.
>>>>>
>>>>> I could even try to build and app and try to publish it for code review
>>>>> by Apple... but since there is this reference, I do not believe it is
>>>>> going to be successful.
>>>>>
>>>>> Since this issue https://bugs.openjdk.java.net/browse/JDK-8138650 is
>>>>> considered to be fixed, but it seems it is not, could someone help with
>>>>> that?
>>>>>
>>>>>
>>>>> Best wishes,
>>>>> Ondrej Kvasnovsky
>>>>
>>>>
>>
More information about the openjfx-dev
mailing list