Pango Platform
HomeConsole
  • What is Pango Developer Platform
  • Getting started
    • Sign up on the Management Console
    • Create a new project
    • Switch projects
    • Change console settings
    • Edit your profile
    • Try out the demo app
    • Keep exploring
    • Deprecation and Sunset
  • Console details
    • Dashboard
      • General
      • Location loading
    • Users
      • User page
    • Active sessions
    • Network
      • Countries
      • Locations
      • Pools
        • Optimal location
        • Location rules
    • Settings
      • General
        • Project config description (JSON format)
          • Server selector (JSON format)
          • Request selector (JSON format)
      • Authentication methods
        • Auth Plugin requirements
      • VPN
        • General
        • VPN Bypass list
        • Client Networks
      • Member
    • Export Data
    • Log
  • SDK
    • Unified VPN SDK
      • Features
        • Personal Bridge
      • Tunnel Vision and Tunnel Crack Prevention
      • Unified VPN SDK Feature Comparison By Platform
    • Unified VPN SDK for Android
      • Setup
        • Application Setup
        • Proguard Rules, Notification, and Analytics Configurations
        • Backend URL Configuration
      • Usage
        • Initialization
        • VPN Interface
        • Backend interface
      • Features
        • Hydra Protocol
          • Location profile (Hydra only)
        • Custom sdk dependencies
        • Deferred VPN Service Initialization
        • Authentication
        • Client Network List (CNL)
        • OpenVPN transport
        • Wireguard Transport
        • Reconnection strategy
        • Single Protocol SDK
        • Killswitch
        • Domain route via VPN
        • Process route via VPN
        • Process Bypass
        • Domain Bypass
        • Traffic rules
        • VPN Node DNS Configuration
        • Multihop
          • Optimal Location
      • Exceptions
      • Version migration
      • Changelog
    • Unified VPN SDK for Apple
      • Setup
        • Application Setup
        • Network Extension Setup
          • Network Extension Setup for tvOS
        • Backend URL Configuration
      • Usage
        • Single Protocol SDK
        • Unified SDK
        • Logging
        • Decoding Encoded VPN SDK Logs
        • Analytics Configuration
      • Features
        • Deferred VPN Service Initialization
        • Authentication
        • Wireguard Transport
        • Reconnection strategy
        • Killswitch
        • Domain Bypass
        • Multihop
          • Optimal Location
        • Client Network List (CNL)
        • Domain route via VPN
      • Changelog
      • API Reference
    • IPSEC VPN SDK for Apple
    • Unified VPN SDK for Windows
      • Setup
        • Backend URL Configuration
        • Service command line arguments
        • ARM Platform Support
      • Usage
        • CoreAPI
        • Events
        • Generating a Unique Device Identifier
        • Error processing
        • Pipe Messaging
      • Features
        • Traffic protection
          • Killswitch
          • Prevent IP Leaks
          • Block Local Networks
        • Other
          • Firewall
            • DNS Monitor
            • Process Bypass
            • Domain Bypass
            • Process route via VPN
            • Domain route via VPN
          • Throttling
          • Optimal Location
          • Common issues
        • Hydra Protocol
          • CustomDNS, UserDNS, MultiHop, VpnProfiles
        • OpenVPN Protocol
        • Wireguard Protocol
        • IPSec Protocol
      • Collecting Debug Logs
      • Changelog
    • Unified VPN SDK for Routers
      • SDK. Shared library.
      • Configuration Interface (CI)
        • Unix Domain Sockets CI
        • REST API CI
  • REST API
    • Partner API
  • Sample applications
    • Unified VPN SDK demo for Windows
    • Hydra VPN SDK demo for iOS
    • IPSEC VPN SDK demo for iOS
    • Unified VPN SDK demo for Android
    • Hydra VPN SDK demo for OpenWRT
    • OpenVPN configuration file
  • Resources
    • Use cases
      • Public VPN
      • Business VPN
        • Creating a Business VPN Project
        • Wi-Fi Security for Business
      • Application anti-blocking
    • How-to
      • Create a Firebase project for User Authentication
      • AWS CloudFront Distribution of the Platform URL
      • How can I get Shared Secret key from iTunes Connect for In-App Purchase
  • FAQ
    • General
      • VPN Platform Flow
      • What data is collected by the Platform?
      • What analytic data is collected by your SDK?
      • How the Platform restricts access to our data?
      • Why DNS Leak tests often indicate positive result?
      • Do we need to perform endpoint health checks?
      • How is the VPN exit node found?
      • How are streams re-marked if VPN is enabled/disabled on an active flow?
      • Is there a maximum number of supported devices?
      • Are both IPv4 and IPv6 supported?
      • What is the MTU of the tunnel?
      • Are any redundancy measures in terms of reliability provided?
      • Is there any load balancing?
      • Do you block broadcast and multicast to/from the VPN?
    • List of Open Source libs
Powered by GitBook
On this page
  • Compatibility
  • SDK Quick Installation Guide
  • Prepare Application
  • Install Hydra SDK

Was this helpful?

  1. Sample applications

Hydra VPN SDK demo for iOS

This is a demo application for iOS with basic usage of Hydra VPN SDK.

PreviousUnified VPN SDK demo for WindowsNextIPSEC VPN SDK demo for iOS

Last updated 1 year ago

Was this helpful?

Compatibility

  • iOS 9 or newer

SDK Quick Installation Guide

Download latest SDK:

Prepare Application

Create iOS application and additional Network Extension target, so you'll have:

  • Application target

  • Network Extension target

For both, the Application and the Network Extension targets, do the following:

  1. Add following system frameworks to your project dependencies:

  • NetworkExtension

  • Security

  • libz.tbd

2. In your project: Project > Build Settings:

  • Set Enable Bitcode to "NO"

  • Set Other Linker Flags to -ObjC.

3. Enable Network Extension and Personal VPN entitlements for both application and network extension targets, create App Group that will be used on both targets.

Install Hydra SDK

  • Add HydraApplicationSDK.framework for Application target

  • Add HydraTunnelProviderSDK.framework for Network Extension target

Make your PacketTunnelProvider class from Network Extension target extend AFPacketTunnelProvider and remove stub class implementation.

// PacketTunnelProvider.swift
import HydraTunnelProviderSDK

class PacketTunnelProvider: AFPacketTunnelProvider {}

In your AppDelegate or other shared Singleton object, initialize Hydra SDK:

// AppDelegate.swift or your own Hydra holding singleton
import HydraApplicationSDK
// ...
lazy var hydraClient : AFHydra = {
    AFHydra.withConfig(AFConfig.init(block: { (builder) in
        builder.baseUrl = "BASE_URL";
        builder.carrierId = "CARRIER_ID";
        builder.groupId = "group.YOUR.GROUP.NAME";
        builder.networkExtensionBundleId = "com.yourcompany.AWESOME_APP.neprovider";
    }))
}()

Replace placeholders with your values obtained from developer portal and your XCode or Apple Developer Portal configuration.

hydraClient.login(AFAuthMethod.anonymous(), completion: { [unowned self] (e, user) in
    // Process result
})

After you're logged in, you're good to go start VPN:

hydraClient.startVpn({ (country, error) in
    // VPN is being started to server in country `country`
    // Rely on notification center status notifications for exact VPN state
})

Handle VPN state notifications:

hydraClient.notificationCenter.addObserver(forName: NSNotification.Name.AFVPNStatusDidChange, object: nil, queue: nil) { [unowned self] (notification) in
    // Process VPN status changes here
    if hydraClient.vpnStatus() == .connected {
        // Do stuff
    }
}

If you have to choose VPN server country before connecting, you can call availableCountries and then startVpn with specific country.

// Get a list of countries 
hydraClient.availableCountries { [weak self] (e, countries) in
    // Do stuff
    self.someCountry = countries[0]
}

// Start VPN with different country
hydraClient.startVpn(with: self.someCountry, completion: { (country, e) in

})

For more detailed information refer to .

GitHub project link
HydraSDK for iOS
HydraSDK for macOS
Hydra SDK documentation