-
-
Notifications
You must be signed in to change notification settings - Fork 21.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[3.2] Add support of iOS's dynamic libraries to GDNative #39996
Conversation
|
Yeah, not being allowed by AppStore is what I meant. And yes dynamic frameworks are allowed (at least from iOS 8 that's for sure), they just need to be bundled in I'm also not sure if |
At least macOS
|
Well it seems they are the same, but still |
I will try to look more into turning dylibs into framework library, but as I said - using Frameworks is a recommended way to handle dynamic libraries |
Well, it seems I've missed something before, but with I've also noticed that
|
I've updated the code, so now iOS exporter can turn I've also updated starter project And on AppStore side everything is ok with build processing. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I haven't fully tested it, but changes look fine.
@@ -26,6 +26,8 @@ | |||
<string>$signature</string> | |||
<key>CFBundleVersion</key> | |||
<string>$version</string> | |||
<key>ITSAppUsesNonExemptEncryption</key> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Godot includes some encryption features, both in its thirdparty libraries and some of it are exposed to the public scripting API (notably via the Crypto
singleton). Did you assess if they fall within the "exempt" category for Apple?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As far as I've seen from the source code, Godot does not use any self-written encryption algorithm, so it's should be ok. So far any app that I've published was okay with using any standard encryption.
It would be good to have those changes in Additionally, I plan to release 3.2.3 with a focus on fixing a few regressions in 2-3 weeks, so I'm cautious about merging new features to Finally, I think it's good to keep separate commits for this PR (i.e. not squash them all into one) as they do separate updates to different components. Some of them might be worth grouping together though to reduce the number of commits (e.g. the commit adding .framework selection to the editor, and then the commit adding .dylib selection too). |
I have a code ready for
Normal deployment should work pretty much the same, since the code that got changed only handles
I'll group commits and force push then. And make PR for |
bf03440
to
0e2bc77
Compare
Thanks! |
Thanks for your work @naithar! Here's a relevant article from Apple on the embedding of I thought it might be of interest to some who end up on this page. |
For iOS platform it is not allowed by AppStore to use
.dylib
directly, so not loading them at this moment makes sense.But since the release of iOS 8 developers are allowed to use Frameworks, which essentially are
dylib
s packed withInfo.plist
file and additionalinstall_name
value set to them.Because of that
.dylib
s can be replaced with.framework
or.xcframework
files built with XCode. They can also be turned into.framework
automatically. This way the dynamic library loading will be available for iOS platform.This repo contains the starter project, allowing the creation of
.a
,.dylib
,.framework
or.xcframework
, which could be used for GDNative library in project.I've tested this PR with both statically and dynamically linked libraries in different combinations, running on multiple devices that's available to me.
I've also tested the way
.framework
generation works and how AppStore handles resulting application.I haven't found any issues, but I could have missed some edge case.
Should probably solve godotengine/godot-headers#30 and godotengine/gdnative-demos#19 for iOS part