geode icon indicating copy to clipboard operation
geode copied to clipboard

The problem with downloading mods on iOS

Open Leeksov opened this issue 1 year ago • 11 comments

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.

Image Image

Leeksov avatar Apr 03 '25 09:04 Leeksov

Are you using the launcher? Why are you mentioning ESign?

hiimjasmine00 avatar Apr 03 '25 12:04 hiimjasmine00

There is a reason why you need JIT, and this is one reason

FireMario211 avatar Apr 03 '25 12:04 FireMario211

Why not just sign files on the server side (for example, ask a person for a p12 & mobileprovision certificate)?

Leeksov avatar Apr 03 '25 12:04 Leeksov

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)

RoootTheFox avatar Apr 03 '25 12:04 RoootTheFox

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)

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.

Leeksov avatar Apr 03 '25 12:04 Leeksov

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?

RoootTheFox avatar Apr 03 '25 12:04 RoootTheFox

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?

Leeksov avatar Apr 03 '25 12:04 Leeksov

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)

RoootTheFox avatar Apr 03 '25 12:04 RoootTheFox

Oh, I get you, but why not use static inline hooks? Ahh stop.. all mods have different logic..

Leeksov avatar Apr 03 '25 12:04 Leeksov

For devices with Jailbreak, you can use KittyMemory for patches in the game's memory.

Leeksov avatar Apr 03 '25 12:04 Leeksov

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)

RoootTheFox avatar Apr 03 '25 12:04 RoootTheFox

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

FireMario211 avatar Oct 09 '25 20:10 FireMario211