Speedify SDK

Welcome

This SDK lets you build the Speedify VPN engine right into your own iOS app.

Tools

This SDK was built with Xcode Version 9.2 (9C40b) , iOS11 and Swift 4 . We highly recommend that you use the same (or later).

Getting Started

To get started copy the sample project SpeedifySDK to the directory you wish to run it in.

A few provisioning profiles are needed in order to run the sample application and integrate the SDK into your app. For the sample application, first go to Apple Developer and create the following two App IDs, replacing com.mycompany with a domain you associate with your Developer Program:

com.mycompany.SpeedifySampleApp com.mycompany.SpeedifySampleApp.PacketTunnel

For the SDK, first create the App ID, again replacing com.mycompany with your Developer Program domain and replacing myapp with your application name:

com.mycompany.myapp.PacketTunnel

And then create a provisioning profile for this new App ID, again including the NetworkExtension entitlements if you have them.

Important note: You must run the app on a device and not on a simulator.

After your profiles are set up, open with Xcode and press run. Upon opening the app you will be requested to give VPN Permissions. The SDK will not run without these permissions. Once permissions are granted you will be presented with a list of command buttons. If you wish to change the directory URL please to do that first.

All users will start out in a logged out state. You will need to log in to perform the majority of the commands. If you need a Speedify license when running the sample application please contact support@speedify.com

API Docs

The API Documents are provided as convenient HTML in the docs/index.html directory.

Licensing

The use of this SDK is dependent on you having a licensing agreement with Connectify, Inc.

This SDK uses a number of third party, open source libraries. Information on them and their licenses can be found here.

Support

We are here to support our developers! If you have any issues, questions or concerns, please email us at support@speedify.com

ChangeLog

Speedify 6.3.4

  • New function func loginOauth(oauthAccessToken: String) which allows clients to login with JWT.

Speedify 6.3

  • New PrivacySettings struct
  • New delegate function privacySettingsDidUpdate(privacy: PrivacySettings)
  • New function setReportingEncryptionKey(key128bit: String)

Speedify 6.2.1

Speedify 6.2

  • New function disableAdapterMonthlyDataLimit(adapterID: String)
  • New function disableAdapterDailyDataLimit(adapterID: String)

Speedify 6.1

  • New AccountingData struct
  • Deprecated - setUserUniqueID(uniqueID:String) please use loginAutoAccount()
  • New generateLogs method to help you send files from the Speedify Daemon *Require App Group Capabilities

Speedify 6.0

  • ValidationError is now ErrorType which gives you errors on login and when connecting to servers.
  • New property in the AdapterUsageData -> overlimitRatelimit
  • New functions for connecting now with an ErrorType parameter in the closure
  • New function setAdapterOverlimitRatelimit(adapterID: String, bps: Int64)
  • New function setUserUniqueID(uniqueID:String)
  • New Class UUIDProvider. This will help get a unique Id of the device

Speedify 5.9

  • You may now Enable or Disable use of ChaCha for connection encryption.
    • Just call func setChaChaEncrypted(encrypted: Bool) from the SpeedifySDK and listen for updates inside of the protocol func adapterDataDidUpdate(adapterData: [AdapterData])
  • New AdapterUsageData struct which gives information about the data usage and limits for a network adapter. You can watch for changes inside of the protocol func adapterDataDidUpdate(adapterData: [AdapterData]) which falls into a new property of the AdapterData struct named var dataUsage: AdapterUsageData
  • New Speedify Properties. Now you can simply refer to these referenced value types instead of subscribing to a protocol.
    • private(set) public var state: State?
    • private(set) public var version: Version?
    • private(set) public var adapterData: [AdapterData]?
    • private(set) public var serverInformation: ServerInformation?
    • private(set) public var settings: Settings?
    • private(set) public var stats: [ConnectionStats]?
  • Unit Testing. Navigate to SpeedifySDKTests.swift and change the username/password then inside of Xcode press cmd+u to start the tests.


Speedify 5.7.1 -> 5.8 Migration

5.7.1 5.8
ConnectionData AdapterData
ConnectionData.connectionID AdapterData.adapterID
ConnectionData.usageDaily AdapterUsageData.usageDaily
ConnectionData.usageMonthly AdapterUsageData.usageMonthly
NetworkState NetworkType
   
func setMode(mode: BondingMode,completionHandler:@escaping (_ message: [ConnectionData]?)->Void) func setMode(mode: BondingMode)
   
func setConnectionPriorities(connection: String, priority: ConnectionPriority, completionHandler:@escaping (_ message: SessionStats)->Void) func setConnectionPriorities(connection: String, priority: ConnectionPriority)
   
func setConnectionEncryption(connection: String, encrypt: Bool, completionHandler:@escaping (_ message: [ConnectionData]?)->Void) func setConnectionEncryption(adapterID: String, encrypt: Bool)
   
func setTunnelEncrypted(encrypted: Bool, completionHandler:@escaping (_ message: [ConnectionData]?)->Void) func setTunnelEncrypted(encrypted: Bool)
   
func setOverflowThreshold(bps: Double, completionHandler:@escaping (_ message: Dictionary<String, Any>)->Void func setOverflowThreshold(bps: Int64)
   
func addAdapterDailyDataLimitBoost(adapterID: String, additionalBytes: Double, completionHandler:@escaping (_ message: Dictionary<String, Any>)->Void) func addAdapterDailyDataLimitBoost(adapterID: String, additionalBytes: Int64)
   
func setAdapterDailyDataLimit(adapterID: String, allowedBytes: Double, completionHandler:@escaping (_ message: Dictionary<String, Any>)->Void) func setAdapterDailyDataLimit(adapterID: String, allowedBytes: Int64)
   
func setAdapterMonthlyDataLimit(adapterID: String, allowedBytes: Double, resetDay: Double, completionHandler:@escaping (_ message: Dictionary<String, Any>)->Void) func setAdapterMonthlyDataLimit(adapterID: String, allowedBytes: Int64, resetDay: Int64)

All rights reserved, Connectify, Inc.
Proprietary and Confidential