The problem with downloading mods on iOS
Geode Issue
- [x] I confirm that this bug is NOT related to a mod but directly to Geode Loader itself.
Platform
MacOS
SDK commit
dcd3244
Geode Version
v4.3.1
Mods Installed
No response
Expected Behavior
The mod should be installed and working
Actual Behavior
The mod cannot be installed because its .dylib is not signed
Steps to Reproduce
Take the .ipa Geometry Dash and add it there.dylib via eSign/GBox/Feather/Sideloadly and try to install any mod
Additional Information
There's a known issue on iOS. The app is signed with a developer certificate, and Geode's .dylib is located inside the app. I don't recommend adding other mods in .dylib format, as every binary file and dynamic library must be properly signed for the app to be able to use it.
Are you using the launcher? Why are you mentioning ESign?
There is a reason why you need JIT, and this is one reason
Why not just sign files on the server side (for example, ask a person for a p12 & mobileprovision certificate)?
they are not using the launcher, they took the Geode.ios.dylib and injected it directly into GD. that means mod loading will NOT work as there is no "pre-sign" mods before loading them.
Try to also inject geodeinject (you can get the dylib by extracting this .deb from the iOS repo (you'll have to extract the deb, then extract the data.tar.gz (or smth) file inside of there) which kills the code signing requirement
(Also, you need a certificate with the get-task-allow entitlement - those cost a LOT of money, and you have to beg Apple to allow you to use it)
they are not using the launcher, they took the Geode.ios.dylib and injected it directly into GD. that means mod loading will NOT work as there is no "pre-sign" mods before loading them.
Try to also inject geodeinject (you can get the dylib by extracting this .deb from the iOS repo (you'll have to extract the deb, then extract the data.tar.gz (or smth) file inside of there) which kills the code signing requirement
(Also, you need a certificate with the
get-task-allowentitlement - those cost a LOT of money, and you have to beg Apple to allow you to use it)
Yes, I already realized that JIT is needed, I have Dopamine, so this is not a problem, but in theory signing .dylib is not so difficult, you can just take part of the zsign code and sign through it, the only question is how to implement it correctly.
as i said, try to also inject geodeinject alongside Geode.ios.dylib - it will kill codesigning. that's the way the launcher injects Geode on jailbroken devices too
speaking of the launcher, why don't you just sign the launcher with ESign since you apparently have a cert with the get-task-allow entitlement anyways?
I understand, I'm just wondering if it's possible to make your modification work without JIT, JIT is only needed to remove the codesign check?
no, JIT is needed to allow runtime memory patching, which Geode needs to be able to patch game code and hook functions (read: loading mods)
Oh, I get you, but why not use static inline hooks? Ahh stop.. all mods have different logic..
For devices with Jailbreak, you can use KittyMemory for patches in the game's memory.
static hooks would defeat the whole purpose of Geode, which is loading mods
you did mention that you have dopamine, which allows JIT afaik - you should be able to just install the ios launcher and it should work.
KittyMemory serves zero purpose for our use case, as Geode's own hooking library (TulipHook) already works perfectly fine on jailbroken devices (and on non-jailbroken devices, it needs JIT, like any other code that writes to executable memory)
your issue is you not having geodeinject in your install, or not using the launcher, both of which handle bypassing codesigning (to allow mod loading)
Issue is that the binary was not signed. Use the launcher (and JIT preferebly or JIT-Less) to prevent the error from happening. JIT hooks the functions that has apple check if the binary is signed to bypass it, while JIT-Less utilizes the certificate you imported to sign the binaries.
Or since you mentioned using E-Sign, and assuming you don't have a certificate with entitlements, use the launcher with Enterprise Mode. https://github.com/geode-sdk/ios-launcher/blob/main/ENTERPRISE-INSTALL-GUIDE.md