RFR: 8286122: [macos]: App bundle cannot upload to Mac App Store due to info.plist embedded in java exe

erik.joelsson at oracle.com erik.joelsson at oracle.com
Thu May 12 13:25:35 UTC 2022


On 2022-05-12 04:58, Magnus Ihse Bursie wrote:
> On 2022-05-12 13:17, Michael Hall wrote:
>> A solution like including a bundle identifier something like 
>> net.java.openjdk.MYAPP.java would be possible at packaging time but 
>> not at build time.
>> To fix this at build time you would need to generate a name unique to 
>> each installed jdk. Including release 
>> net.java.openjdk.JDK_RELEASE.java might avoid some conflicts but 
>> would still be open to conflict for two applications at the same 
>> release. So it can’t be addressed ‘before the fact’ either. The only 
>> thing I am currently thinking of that might work would be include a 
>> replaceable part in the identifier. So something like 
>> net.java.openjdk.java.XXXXXXXXXXXXXXXXXXXXXX
>> Where jpackage could include something to change the XXXXX…. to a 
>> unique application name. If you don’t change the string size you 
>> could probably avoid some of the resizing issues Apple DTS mentions. 
>> Whether there is a standard Apple tool to do this I don’t know.
>
> As you say, we're a bit in a bind since the java executable needs to 
> be created when the JDK is built, but the bundle ID needs to be 
> determined when jpackage is run (and a suitable, per-application ID 
> can be created), and there is no standard tooling to update the bundle 
> ID after build time.
>
> I believe what you are describing is exactly solution #2 suggested by 
> the Apple engineer. I don't think that would be horribly difficult to 
> achieve, though. Sure, it's a bit of a hack, but not the ugliest I've 
> seen in my days. If we go down this route, I suppose we do something 
> like this:
>
> 1) When building the JDK, we create an additional copy of the java 
> executable, and store it with the jdk.jpackage resources. Let's call 
> it java.template, for the sake of it. This is identical to the real 
> bin/java except for the fact that it contains a different bundle ID, 
> with a large enough padding field, like XXXXX...  This way, we don't 
> have to mess around with the real java executable for the JDK.

Aren't we embedding this bundle ID in every launcher, so you would need 
a <launcher>.template for each possible launcher that could be included 
in an app?

What I think we need to do is first evaluate if we actually need to 
embed this bundle ID in the executables at all, or rather, what would 
the consequences be if we didn't. My understanding is that we only do 
this to be able to run them outside of a bundle directory structure, but 
this would need some pretty thorough testing of course. If we are to 
generate a special set of launchers for jpackage, maybe all we need to 
do is not embed any bundle ID in them, as they are meant to only be used 
within a jpackaged app, so they should be covered by Info.plist files 
anyway.

/Erik



More information about the build-dev mailing list