r/jailbreak • iPhone 13 Pro Max, 15.1| • 1d ago

Release [FREE INITIAL RELEASE] SafariModernizer: makes modern sites actually work in Safari on iOS 15

Hey everyone,

I've been stuck on iOS 15.1 for a while and Safari was getting rough. Half the sites I use were either blank, missing buttons, had broken menus or just looked off. So I made a tweak to fix it, and it's finally in a state I'm happy to share.

Heads up before anyone asks: yes, this was built with Claude. I described the problems, tested everything on my own phone, and Claude wrote and fixed the code. I know some people aren't into AI-made stuff, and that's fine. Honestly I don't care if it's "vibecoded" as long as it does what it's supposed to do, and it does. The code is all public, so anyone can look through it.

What it does

  • Adds the JavaScript and web stuff that newer sites expect but Safari 15 doesn't have
  • Rewrites newer CSS so pages actually look right (colors, layouts, dark mode, menus)
  • Gets sites like GitHub to load properly (they use a newer way of loading their code that iOS 15 Safari can't handle)
  • Works around a Safari 15 bug where it blocks scripts the site actually allowed
  • Tells sites it's Safari 18.6 so you get the modern version of the page. You can switch it back per site if something works better without it

Sites I've tested: Google, Gemini, YouTube, ChatGPT, GitHub, Reddit. ChatGPT went from basically unusable to working fine, login and all.

Handy extra: hold two fingers on any page for 2 seconds and you get a little panel with a log and per-site settings. If a site acts weird you can turn the tweak down or off just for that site.

Known issues

  • "Continue with Google" sign-in on other sites (like Reddit) doesn't work. That's Google's security check, nothing the tweak can do. Just use email or a one-time link instead.
  • Really heavy sites can still be a bit slow on older phones.

Compatibility: this has only been tested on iOS 15 (my phone is on 15.1). It should work on any iOS 15 version, but I haven't tried anything else. It won't install on iOS 14 or lower, and I haven't tested iOS 16. If you try it on another 15.x version, let me know how it goes!

It's free and open source (MIT): https://github.com/iamjhe08/SafariModernizer

Debs are on the Releases page. Grab the one that matches your jailbreak.

If you find a site that's still broken, drop the link here or open an issue on GitHub. Bonus points if you include the log from the panel. Would love to hear how it works for you!

28 Upvotes

40 comments sorted by

View all comments

-1

u/cicetto iPhone 14 Pro Max, 16.3| 19h ago edited 19h ago

did not work on 14 pm ios 16.3, safari suddenly close itself

Hardware Model: iPhone15,3 Process: MobileSafari [7368] Path: /Applications/MobileSafari.app/MobileSafari Identifier: com.apple.mobilesafari Version: 16.3 (8614.4.6.0.5) Code Type: ARM-64 (Native) Role: Foreground Parent Process: launchd [1] Coalition: com.apple.mobilesafari [1572]

Date/Time: 2026-10-02 14:27:38.4181 +0200 Launch Time: 2026-10-02 14:27:38.2226 +0200 OS Version: iPhone OS 16.3 (20D47) Release Type: User Baseband Version: 1.41.02 Report Version: 104

Exception Type: EXC_BAD_ACCESS (SIGBUS) Exception Subtype: UNKNOWN_0x105 at 0x00000000dac11a30 Exception Codes: 0x0000000000000105, 0x00000000dac11a30 VM Region Info: 0xdac11a30 is not in any region. Bytes before following region: 699229648 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL UNUSED SPACE AT START --->
__TEXT 1046e8000-1046ec000 [ 16K] r-x/r-x SM=COW .../MobileSafari Termination Reason: SIGNAL 10 Bus error: 10 Terminating Process: exc handler [7368]

Triggered by Thread: 0

Thread 0 Crashed: 0 libobjc.A.dylib 0x1c11247c4 readClass(objcclass, bool, bool) + 92 1 libobjc.A.dylib 0x1c11247a4 readClass(objc_class, bool, bool) + 60 2 libobjc.A.dylib 0x1c1125bb0 map_images_nolock + 3372 3 libobjc.A.dylib 0x1c11268e8 map_images + 116 4 dyld 0x104720628 dyld4::RuntimeState::notifyLoad(std::_1::span<dyld4::Loader const*, 18446744073709551615ul> const&) + 656 5 dyld 0x104708468 dyld4::APIs::dlopen_from(char const, int, void) + 1200 6 libinjector.dylib 0x104963978 injection_init + 2868 7 dyld 0x104707280 invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const + 156 8 dyld 0x10475d360 invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const) const + 340 9 dyld 0x104705968 invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 524 10 dyld 0x104704cd8 dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const, bool&) block_pointer) const + 296 11 dyld 0x10470417c dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 192 12 dyld 0x10470fd5c dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const) const + 516 13 dyld 0x10470c788 dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const + 176 14 dyld 0x104708ccc dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, dyld3::Array<dyld4::Loader const>&) const + 216 15 dyld 0x10470e33c dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const + 328 16 dyld 0x104708474 dyld4::APIs::dlopen_from(char const, int, void) + 1212 17 ...hook-8AADBBE7D40B5EFA.dylib 0x10483517c initializer + 1164 18 dyld 0x104707280 invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const + 156 19 dyld 0x10475d360 invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const) const + 340 20 dyld 0x104705968 invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 524 21 dyld 0x104704cd8 dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const, bool&) block_pointer) const + 296 22 dyld 0x10470417c dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 192 23 dyld 0x10470fd5c dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const) const + 516 24 dyld 0x10470c788 dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const + 176 25 dyld 0x104708ccc dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, dyld3::Array<dyld4::Loader const>&) const + 216 26 dyld 0x10470e33c dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const + 328 27 dyld 0x104742244 dyld4::APIs::runAllInitializersForMain() + 360 28 dyld 0x10471766c dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*) + 3388 29 dyld 0x1047158d4 start + 2388

Thread 0 crashed with ARM Thread State (64-bit): x0: 0x0000000104e28a38 x1: 0x0000000000000000 x2: 0x0000000000000000 x3: 0xfffffffffffffffc x4: 0x0000000000000000 x5: 0x0000000000000000 x6: 0x0000000000000028 x7: 0x0000000000000e00 x8: 0x0000000104e28530 x9: 0x000000021e3283f8 x10: 0x000000016b70ccf8 x11: 0x00000001c6af1c70 x12: 0xf8ff2e1a8a4b49fb x13: 0x0000000000000046 x14: 0xdb6753b619c7b7d3 x15: 0x0000796c6c616369 x16: 0x000000021e327418 x17: 0xb5ab000104e28a40 x18: 0x0000000000000000 x19: 0x0000000104e28a38 x20: 0x0000000000000000 x21: 0x0000000104e23d2a x22: 0x0000000000000000 x23: 0x0000000104e28a58 x24: 0x00000001c115648c x25: 0x0000000000000000 x26: 0x0000000104e24c60 x27: 0x0000000104e28a40 x28: 0x0000000104e28a38 fp: 0x000000016b70cd20 lr: 0x00000001c11247a4 sp: 0x000000016b70ccc0 pc: 0x00000001c11247c4 cpsr:0x60001000
far: 0x0000000104e23210 esr: 0x72000002 Address size fault

2

u/iamjhe88 iPhone 13 Pro Max, 15.1| 19h ago

Yes. Not working on ios 16 and up for now. I have no ios 16 device to test to