A real iOS browser built on the Chromium ios_web engine (content_shell), featuring a custom tabbed browser UI with address bar, navigation, history, and Google search integration.
CyberBrowser/
├── .github/workflows/build-blink.yml # CI/CD: Builds real Chromium on macOS
├── patches/
│ └── CyberBrowserViewController.mm.patch # Patches Chromium's view_controller.mm
│ └── view_controller_tabbed.patch # Diff patch (alternative)
├── scripts/
│ ├── fetch-chromium.sh # Fetches Chromium iOS source
│ ├── apply-patches.sh # Applies CyberBrowser patches
│ └── build.sh # Builds ios_web_shell target
├── src/ # Standalone Swift/UIKit fallback
│ ├── ChromiumInit.h/mm # Objective-C++ Chromium WebMain init
│ ├── BrowserViewController.h/mm # Standalone browser UI (fallback)
│ ├── AppDelegate.h/mm # App lifecycle
│ └── SceneDelegate.h/mm # iOS 13+ multi-window
└── CyberBrowser/
└── Info.plist # App bundle config
- Fetch Chromium iOS Source (~30GB, cached between builds)
- Apply Patches - Replaces
ios/web/shell/view_controller.mmwith CyberBrowser UI - Build
ios_web_shelltarget usingautoninja(2-6 hours) - Package as
CyberBrowser.app+.tipafor TrollStore
web::WebState- Core web engine interfaceGetView()- ReturnsUIView*containing the web contentGetNavigationManager()- Navigation controlGetVisibleURL()/GetTitle()/IsLoading()/GetLoadingProgress()OpenURL()/Stop()/SetWebUsageEnabled()
web::NavigationManager- Back/forward navigationCanGoBack()/CanGoForward()/GoBack()/GoForward()LoadURLWithParams()/Reload()
web::WebMain- Engine initialization (must callStartup()before any web ops)web::ShellMainDelegate/web::ShellWebClient- Required delegates
The patches/CyberBrowserViewController.mm.patch replaces Chromium's simple shell UI with:
- Progress bar - Shows loading progress via
WebState::GetLoadingProgress() - Address bar - URL entry with Google search fallback
- Back/Forward/Reload - Real navigation via
NavigationManager - History - Stores visited URLs in
NSUserDefaultswith 500-item cap - Tab management - UIAlertController-based tab picker
- Context menus - Link copy/paste support
# 1. Fetch Chromium source (one-time, ~30GB)
./scripts/fetch-chromium.sh
# 2. Apply patches
./scripts/apply-patches.sh
# 3. Build (takes 2-6 hours on first run)
./scripts/build.sh
# Output: build-output/CyberBrowser.appThe .github/workflows/build-blink.yml runs on macos-15 with Xcode 16.1:
- Caches
depot_toolsand Chromium source (30GB+) - Syncs latest source via
gclient sync - Applies CyberBrowser patches
- Builds
ios_web_shellwithautoninja - Packages as
.app,.ipa, and.tipa - Uploads artifacts + creates GitHub Release
- Install TrollStore on your device
- Transfer
CyberBrowser.tipato device - Open TrollStore → tap
+→ select.tipa
- Use
CyberBrowser.ipa - Sideload with your preferred tool
The src/ directory contains a standalone Swift/Objective-C++ browser that can be built independently. It attempts to initialize Chromium but shows an error if the engine is not available.
# Build standalone (requires Xcode)
xcodebuild -project CyberBrowser.xcodeproj -scheme CyberBrowser -destination 'generic/platform=iOS'BSD-3-Clause (Chromium components remain under their respective licenses)