Tor.Framework for iOS
Using Tor the way Apple intends you to
You can find Tor.Framework at: https://github.com/iCepa/Tor.framework
Example
To run the example project, clone the repo, and run pod install
from the Example directory first.
Installation
Install build tools via Homebrew:
brew install automake autoconf libtool gettext
Tor is available through CocoaPods. To install it, simply add the following line to your Podfile:
If you use dynamic frameworks, use the root spec:
use_frameworks!
pod 'Tor', '~> 408'
(or Tor/GeoIP
- see below.)
If you need to add it as a static library, you will need to add it from a modified podspec:
pod 'Tor', :podspec => 'https://raw.githubusercontent.com/iCepa/Tor.framework/pure_pod/TorStatic.podspec'
Currently static library support is unstable. You might encounter build issues. Every contribution to fix this is welcome!
(or Tor/GeoIP
- see below.)
Usage
Starting an instance of Tor involves using three classes: TORThread
, TORConfiguration
and TORController
.
Here is an example of integrating Tor with NSURLSession
:
TORConfiguration *configuration = [TORConfiguration new];
configuration.ignoreMissingTorrc = YES;
configuration.cookieAuthentication = YES;
configuration.dataDirectory = [NSURL fileURLWithPath:NSTemporaryDirectory()];
configuration.controlSocket = [configuration.dataDirectory URLByAppendingPathComponent:@"control_port"];
TORThread *thread = [[TORThread alloc] initWithConfiguration:configuration];
[thread start];
NSData *cookie = configuration.cookie;
TORController *controller = [[TORController alloc] initWithSocketURL:configuration.controlSocket];
NSError *error;
[controller connect:&error];
if (error) {
NSLog(@"Error: %@", error);
return;
}
[controller authenticateWithData:cookie completion:^(BOOL success, NSError *error) {
if (!success)
return;
[controller addObserverForCircuitEstablished:^(BOOL established) {
if (!established)
return;
[controller getSessionConfiguration:^(NSURLSessionConfiguration *configuration) {
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
...
}];
}];
}];
GeoIP
In your Podfile
use the subspec GeoIP
or StaticGeoIP
instead of the root spec:
use_frameworks!
pod 'Tor/GeoIP'
or
pod 'Tor/GeoIP', :podspec => 'https://raw.githubusercontent.com/iCepa/Tor.framework/pure_pod/TorStatic.podspec'
The subspec will create a "GeoIP" bundle and install a run script phase which will download the appropriate GeoIP files.
To use it with Tor, add this to your configuration:
TORConfiguration *configuration = [TORConfiguration new];
configuration.geoipFile = NSBundle.geoIpBundle.geoipFile;
configuration.geoip6File = NSBundle.geoIpBundle.geoip6File;
Last updated