Is possible upload Oracle JavaFX application into Apple Store?

Hello.

I have written simple application on Oracle JavaFX, packed by javapackager and ready for upload into Apple store.


When application is under Apple review, everytime is returned with issue:


Your app still uses or references the following non-public APIs:

Symbols: _CCRandomCopyBytes, _kCCRandomDefault, __NSConcreteMallocBlock
From framework: /usr/lib/libSystem.B.dylib
In binary: Contents/PlugIns/Java.runtime/Contents/Home/lib/libjfxwebkit.dylib


The application does nothing special, is tottaly offline and uses only java libraries. Package contains embedded JRE signed by javapackager.


My question is: Is posssible distribute this application over Apple store or is is blink way?


Thanks for the answer.


Libor

Accepted Reply

> packed by javapackager <clip> uses only java libraries.


Quoting theApp Store Review Guidelines...


2.4.5 Apps distributed via the Mac App Store have some additional requirements to keep in mind:

  • ( i )They must be appropriately sandboxed, and follow macOS File System Documentation. They should also only use the appropriate macOS APIs for modifying user data stored by other Apps (e.g. bookmarks, Address Book, or Calendar entries).
  • ( ii ) They must be packaged and submitted using technologies provided in Xcode; no third party installers allowed. They must also be self-contained, single application installation bundles and cannot install code or resources in shared locations.

Replies

Apple's message is saying that the Java runtime is accessing symbols (_CCRandomCopyBytes, _kCCRandomDefault, __NSConcreteMallocBlock) that are private. Apple doesn't allow apps to access private symbols. So, no, you probably won't be able to use that method to create apps. Learn Objective C or Swift instead.

> packed by javapackager <clip> uses only java libraries.


Quoting theApp Store Review Guidelines...


2.4.5 Apps distributed via the Mac App Store have some additional requirements to keep in mind:

  • ( i )They must be appropriately sandboxed, and follow macOS File System Documentation. They should also only use the appropriate macOS APIs for modifying user data stored by other Apps (e.g. bookmarks, Address Book, or Calendar entries).
  • ( ii ) They must be packaged and submitted using technologies provided in Xcode; no third party installers allowed. They must also be self-contained, single application installation bundles and cannot install code or resources in shared locations.

Hello

It may be the case that your problem has been fixed if you update to Java SDK 8u221.

Java SDK 8u221 include 'Bug Fix #42' ("Get rid of macOS SDK private API usage") and fixes JDK-8219734.



Your problem is that your app uses or references the following non-public APIs:


Symbols: _CCRandomCopyBytes, _kCCRandomDefault, __NSConcreteMallocBlock

From framework: /usr/lib/libSystem.B.dylib

In binary: Contents/PlugIns/Java.runtime/Contents/Home/lib/libjfxwebkit.dylib


The use of non-public APIs is not permitted on the App Store, because it can lead to a poor user experience should these APIs change.

Apple are constantly reevaluating and identifying non-public APIs that you may have been using for an extended period of time. You should always use public APIs and frameworks and ensure they are up-to-date to prevent this issue in the future.



Read more about JDK 8u221 bug fixes and the Bug Fix #42 here:


https://www.oracle.com/technetwork/java/javase/2col/8u221-bugfixes-5480117.html


Bug #42, [WebView] Get rid of macOS SDK private API usage: JDK-8219734, https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8219734


https://github.com/javafxports/openjdk-jfx/issues/388


Best Regards

Aslak