Tor Mobile Dev Guide
  • 🧅Welcome to Onion Mobile Devs!
  • The History of Tor
  • The Tor Protocol
  • Tor ("C Tor") vs Arti: What?!
  • Mobile Concepts
    • Mobile Apps with Tor
    • Possible Ways to Tor Your App
    • Limitations of Mobile Devices
    • Mobile Users in the OnionVerse
  • Tor on Android
    • All The Onions on Android
    • Tor-Android library
    • Pluggable Transports for Android
    • NetCipher with Orbot (Legacy)
    • TorServices
    • Arti Mobile on Android
  • Tor on iOS
    • All The Onions on Apples
    • Tor.Framework for iOS
    • Pluggable Transports for iOS
    • IPtProxyUI
    • OrbotKit
    • TorManager
    • Arti and Onionmasq on iOS
  • Help and Community
    • Community Case Studies
    • Developer Story: Arti Integration Journey
    • Where to get help
Powered by GitBook
On this page
Edit on GitHub
  1. Tor on iOS

Pluggable Transports for iOS

Lyrebird/Obfs4proxy and Snowflake Pluggable Transports for iOS, MacOS and Android

PreviousTor.Framework for iOSNextIPtProxyUI

Last updated 12 months ago

IPtProxy is the primary reusable library for integrating the latest anti-censorhip capabilities into your mobile app. You can find IPtProxy at with the "live" development work also done at

Both Lyrebird/Obfs4proxy and Snowflake Pluggable Transports are written in Go, which is a little annoying to use on iOS and Android. This project encapsulates all the machinations to make it work and provides an easy to install binary including a wrapper around both.

Problems solved in particular are:

  • One cannot compile main packages with gomobile. Both PTs are patched to avoid this.

  • Both PTs are gathered under one roof here, since you cannot have two gomobile frameworks as dependencies, since there are some common Go runtime functions exported, which would create a name clash.

  • Environment variable changes during runtime will not be recognized by goptlib when done from within Swift/Objective-C. Therefore, sensible values are hardcoded in the Go wrapper.

  • Snowflake and Lyrebird/Obfs4proxy are patched to accept all configuration parameters directly.

  • Free ports to be used are automatically found by this library and returned to the consuming app. You can use the initial values for premature configuration, which is just fine in situations, where you can be pretty sure, they're going to be available (typically on iOS). When that's not the case (e.g. multiple instances of your app on a multi-user Android), you should first start the transports and then use the returned ports for configuration of other components (e.g. Tor).

https://gitlab.com/guardianproject/IPtProxy
https://github.com/tladesignz/IPtProxy/