shannah / Java-Objective-C-Bridge

A thin bridge that allows for two-way communication from Java to Objective-C.
123 stars 25 forks source link

Avoiding Notarization #21

Closed Flameborn closed 4 years ago

Flameborn commented 4 years ago

Just a little background, I am currently working on a mod for a game, which requires cross-platform speech.

Is there a way to access Objective C classes, the NSSpeechSynthesizer class in particular, without an objective C bridge, i.e. directly?

Perhaps this is a bit out of scope for the project, however, I would like to avoid notarization, if possible, since it would unnecessarily complicate an open source project.

Any help is greatly appreciated.

shannah commented 4 years ago

I'm not sure I understand. You want to access an Objective-C class from Java without a bridge? I'm not sure how that would work. How does this relate to notarization?

mojo2012 commented 4 years ago

You could probably implement it in C and use JNA/JNI to interact with the C lib. Are you planning on putting your app on the app store? Because then you will have to do the notarization anyway.

Flameborn commented 4 years ago

Sorry about the confusion.

As far as I understand, Java-Objective-C uses a dylib behind the scenes, which needs notarization under Catalina and above, which I’d like to avoid. I’m not sure whether there is a way to do this directly, i.e. via pure Java code, or via other means that do not require an additional binary, hence my question.

On 2020. Jul 3., at 16:24, Steve Hannah notifications@github.com wrote:

I'm not sure I understand. You want to access an Objective-C class from Java without a bridge? I'm not sure how that would work. How does this relate to notarization?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/shannah/Java-Objective-C-Bridge/issues/21#issuecomment-653572359, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAHLD4DDW5NXSTV4APPRNFLRZXS2PANCNFSM4OP2KDDA.

Flameborn commented 4 years ago

No, this is going to be an open-source project that provides modifications for a game. It’s likely going to be published via the Steam Workshop. Having an additional binary means that I would not be able to publish untrusted code (eventually) without notarization. It would also make it a bit more tedious to build for non-Mac users.

On 2020. Jul 3., at 16:36, Matti notifications@github.com wrote:

You could probably implement it in C and use JNA/JNI to interact with the C lib. Are you planning on putting your app on the app store? Because then you will have to do the notarization anyway.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/shannah/Java-Objective-C-Bridge/issues/21#issuecomment-653577079, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAHLD4DXQ4Y3SIQEXI32Z73RZXUGFANCNFSM4OP2KDDA.

shannah commented 4 years ago

Does the steam workshop provide the JVM? (I'm not familiar with Steam workshop). If you are bundling your own JVM, which is the recommended way, then you'll need to notarize the JVM anyways.

Flameborn commented 4 years ago

The game has its own JRE included, which is notarized, so all the dylibs can be loaded. The mod is published as a jar file, which the game loads. If I include Java-Objective-C, at the moment it would need its library to be notarized.

On 2020. Jul 3., at 16:45, Steve Hannah notifications@github.com wrote:

Does the steam workshop provide the JVM? (I'm not familiar with Steam workshop). If you are bundling your own JVM, which is the recommended way, then you'll need to notarize the JVM anyways.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/shannah/Java-Objective-C-Bridge/issues/21#issuecomment-653580593, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAHLD4EMX4NCPG2M4YP6DLDRZXVJFANCNFSM4OP2KDDA.

shannah commented 4 years ago

You can include the libjcocoa.dylib inside your Game's app bundle. Put it in the Contents/MacOS directory of the app bundle. Then all of your mods will be able to use the bridge.

Flameborn commented 4 years ago

This is a great tip, thank you!

Unfortunately, I would still need to notarize the dylib.

On 2020. Jul 3., at 17:10, Steve Hannah notifications@github.com wrote:

You can include the libjcocoa.dylib inside your Game's app bundle. Put it in the Contents/MacOS directory of the app bundle. Then all of your mods will be able to use the bridge.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/shannah/Java-Objective-C-Bridge/issues/21#issuecomment-653590072, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAHLD4BSF4ZBEO3KN6E35D3RZXYGZANCNFSM4OP2KDDA.

shannah commented 4 years ago

You need to notarize the app anyway, the dylib would be notarized as a part of that process.

Flameborn commented 4 years ago

You are right. Unfortunately, as a mod creator, I am not the developer of the game, so I would need a separate developer license to do so. Sadly, open source is really not the way on Apple platforms, it seems.

My initial assumptions about requiring an external library were confirmed. Thank you very much for taking the time to help!

On 2020. Jul 3., at 17:57, Steve Hannah notifications@github.com wrote:

You need to notarize the app anyway, the dylib would be notarized as a part of that process.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/shannah/Java-Objective-C-Bridge/issues/21#issuecomment-653606806, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAHLD4BRH22JSNM44FVD65LRZX5YLANCNFSM4OP2KDDA.