Reynard: A Gecko-based Web Browser for iOS 13+

Reynard: A Gecko-based Web Browser for iOS 13+

Reynard is an experimental web browser for iOS 13 and later that utilizes the Gecko engine—the same engine powering Firefox on desktop and Android—instead of Apple's mandatory WebKit. This allows users on older iOS versions to access modern websites that would otherwise fail to load due to outdated, OS-bundled WebKit versions.

Bypassing WebKit for Legacy Device Support

Apple requires all iOS browsers to use the WebKit engine. Because WebKit is bundled with the operating system, devices running older iOS versions cannot receive engine updates independently of OS updates. This creates a situation where legacy devices are forced to use an ancient version of WebKit that lacks support for modern ECMAScript functionalities and contains unpatched vulnerabilities.

By implementing Gecko, Reynard provides a modern, up-to-date rendering engine that operates independently of the OS. This enables legacy devices to render modern web pages correctly, including sites like GitHub, ChatGPT, and Apple.com, which often break or render incorrectly in Safari on iOS 14.

Installation and Sideloading Methods

Since Reynard uses a non-standard engine, it cannot be distributed via the official App Store and must be sideloaded. The installation method depends on the iOS version and device state:

TrollStore (iOS 14 - 16.6.1, 17.0)

TrollStore is the recommended method for the best experience, using the Reynard-TrollStore.tipa build. This method provides automatic JIT (Just-In-Time) enablement, superior performance, and automatic app updates.

AltStore or SideStore (iOS 17.0.1+)

For newer iOS versions where TrollStore is unavailable, users can sideload the Reynard.ipa build. It is critical to select the Keep App Extensions option during installation, as the browser relies on these extensions to function.

Jailbroken Devices (iOS 13)

On jailbroken devices running iOS 13, users can sideload the Reynard-Jailbroken.ipa build using Filza File Manager with AppSync Unified, which also enables automatic JIT and improved performance.

Unsupported Methods: LiveContainer and sideloading methods using distribution certificates for signing are explicitly not supported.

Technical Implementation and Development

Project creator AbuAssar developed Reynard to test if Gecko could run on iOS without the BrowserEngineKit framework, allowing it to support older iOS versions. The project leverages several community tools and private APIs for memory handling and JIT enablement:

  • JIT and Memory Handling: Drawing from projects like Amethyst-iOS, dolphin-ios, and MeloNX for private API usage and JIT memory management.
  • App Extensions: Utilizing LiveContainer for app extension handling and NSExtension usage.
  • JIT Enablement: Leveraging StikDebug, idevice, and TrollStore for pairing-based JIT enablement.
  • Engine Integration: Building upon pre-existing work found in Mozilla's Bugzilla (Bug 1882872) regarding the integration of Gecko on iOS.

Community Insights and Regulatory Context

Discussion among users highlights the broader struggle between third-party browser engines and Apple's ecosystem. While jurisdictions like the EU, UK, and Japan are forcing Apple to allow third-party engines, users note that Apple's compliance is often "maliciously compliant," creating roadblocks for distribution.

"Apple is being forced by different jurisdictions (EU, UK, Japan) to allow third-party browser engines... Apple has been maliciously compliant, putting up roadblocks to testing and distribution."

Critics and enthusiasts point out that for outdated devices, a project like Reynard is essential because it prevents devices from becoming obsolete due to an outdated rendering engine that is no longer patched by Apple.

Sources