Source for an experimental iPhone app embedding i2pd. It includes an I2P browser, the local i2pd web console, router diagnostics, a searchable address book, and a shutdown Live Activity. It targets iOS 17 or later.
- Install Xcode and XcodeGen.
- Run ./scripts/bootstrap.shon a Mac. This downloads pinned i2pd, Boost, and OpenSSL sources, appliespatches/i2pd-ios.patch, builds OpenSSL for iPhone and Apple Silicon Simulator, renders the app icon from its SVG source, and generatesI2PdiOS.xcodeproj.
- Open I2PdiOS.xcodeproj, select theI2PDAppscheme, set your own development team and bundle identifier, then build for your iPhone.
The repository contains source, the icon's SVG source, bootstrap names, and the i2pd patch. Vendor/, downloaded certificates, compiled libraries, the generated icon PNG, Xcode output, profiles, and local router data are ignored by Git. The bootstrap script retrieves i2pd's public reseed certificates into the ignored Vendor/ directory because verified reseeding requires them. No personal keys or certificates are supplied.
The app stores its router keys and address book in its own Application Support directory on the device. Those files are created at runtime and are never part of this repository.
- i2pd 2.61.0 source at commit ca007dc57dad3ea743e018ed7f652a8671ec8bed, BSD 3-Clause. App-specific C++ changes are inpatches/i2pd-ios.patch.
- Boost 1.86.0, Boost Software License 1.0.
- OpenSSL 3.5.8, Apache License 2.0.
- Bootstrap names from the I2P project's hosts.txt and selected entries from NotBob's I2P address book.
- App icon from PurpleI2P/i2pd-logo, by omen, BSD 3-Clause.
- Apple frameworks: SwiftUI, WebKit, Network, AVFoundation, UIKit, ActivityKit, WidgetKit, Foundation, and Combine.
The optional background audio loop is experimental. A background task offers limited extra time; iOS can still suspend or terminate the app. The router should not be relied on for continuous background service. Thanks to XITRIX, the developer of iTorrent, for the background audio approach that inspired this implementation.
The built-in browser accepts only .i2p destinations and uses i2pd's loopback SOCKS proxy. JavaScript starts disabled. The router's HTTP and SOCKS proxies bind to loopback. This is a prototype, and a successful build does not establish that connectivity or background execution will work on every device.
If you like the project and want to support it, donations are optional:
- Monero (XMR): 483YVLUtXPhiZ2zVZJSNgkMTMJCphTRjtGMEHu4iHUkNJN6dBWev8RBNp6VaECFgzX7jEDZxF6CfP58srhrJKRfQSLkkGoz
- Litecoin (LTC): ltc1qxhxzqtd97u2hrj3wldst6g0paa4fhw9et2fphq
- Bitcoin (BTC): bc1qthw9rmk872yvzqlf2yvgawpcskvsjpvyehkxw7