diff --git a/Configuration/Debug.xcconfig b/Configuration/Debug.xcconfig
new file mode 100755
index 0000000..49f22e0
--- /dev/null
+++ b/Configuration/Debug.xcconfig
@@ -0,0 +1,6 @@
+#include "Framework.xcconfig"
+
+ONLY_ACTIVE_ARCH = YES
+SWIFT_OPTIMIZATION_LEVEL = -Onone
+SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) DEBUG
+BITCODE_GENERATION_MODE = marker
diff --git a/Configuration/Framework.xcconfig b/Configuration/Framework.xcconfig
new file mode 100755
index 0000000..8109c13
--- /dev/null
+++ b/Configuration/Framework.xcconfig
@@ -0,0 +1,15 @@
+PRODUCT_NAME = OpenVPNAdapter
+PRODUCT_BUNDLE_IDENTIFIER = me.ss-abramchuk.openvpn-adapter
+INFOPLIST_FILE = Configuration/Info-Framework.plist
+MODULEMAP_FILE = OpenVPN Adapter/module.modulemap
+DYLIB_CURRENT_VERSION = $(CURRENT_PROJECT_VERSION)
+APPLICATION_EXTENSION_API_ONLY = YES
+CLANG_CXX_LANGUAGE_STANDARD = gnu++14
+CLANG_CXX_LIBRARY = libc++
+HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/OpenVPN Adapter/Vendors/asio" "$(PROJECT_DIR)/OpenVPN Adapter/Vendors/lz4/include" "$(PROJECT_DIR)/OpenVPN Adapter/Vendors/polarssl/include" "$(PROJECT_DIR)/OpenVPN Adapter/Vendors/openvpn"
+LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*] = "$(PROJECT_DIR)/OpenVPN Adapter/Vendors/lz4/lib/sim" "$(PROJECT_DIR)/OpenVPN Adapter/Vendors/polarssl/lib/sim"
+LIBRARY_SEARCH_PATHS[sdk=iphoneos*] = "$(PROJECT_DIR)/OpenVPN Adapter/Vendors/lz4/lib/ios" "$(PROJECT_DIR)/OpenVPN Adapter/Vendors/polarssl/lib/ios"
+LIBRARY_SEARCH_PATHS[sdk=macosx*] = "$(PROJECT_DIR)/OpenVPN Adapter/Vendors/lz4/lib/macos" "$(PROJECT_DIR)/OpenVPN Adapter/Vendors/polarssl/lib/macos"
+OTHER_LDFLAGS = -lmbedtls -llz4
+OTHER_CPLUSPLUSFLAGS = $(OTHER_CFLAGS) -DASIO_STANDALONE -DASIO_NO_DEPRECATED -DHAVE_LZ4 -DUSE_POLARSSL -DOPENVPN_FORCE_TUN_NULL -DUSE_TUN_BUILDER
+GCC_WARN_64_TO_32_BIT_CONVERSION = NO
diff --git a/OpenVPN Adapter/Info.plist b/Configuration/Info-Framework.plist
similarity index 100%
rename from OpenVPN Adapter/Info.plist
rename to Configuration/Info-Framework.plist
diff --git a/Configuration/Info-Tests.plist b/Configuration/Info-Tests.plist
new file mode 100644
index 0000000..6c6c23c
--- /dev/null
+++ b/Configuration/Info-Tests.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Configuration/Project.xcconfig b/Configuration/Project.xcconfig
new file mode 100755
index 0000000..2e71b19
--- /dev/null
+++ b/Configuration/Project.xcconfig
@@ -0,0 +1,29 @@
+SUPPORTED_PLATFORMS = iphoneos iphonesimulator macosx
+TARGETED_DEVICE_FAMILY = 1,2
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// iOS-specific settings
+//
+IPHONEOS_DEPLOYMENT_TARGET = 9.0
+
+VALID_ARCHS[sdk=iphoneos*] = arm64 armv7 armv7s
+VALID_ARCHS[sdk=iphonesimulator*] = i386 x86_64
+
+LD_RUNPATH_SEARCH_PATHS[sdk=iphoneos*] = @executable_path/Frameworks @loader_path/Frameworks
+LD_RUNPATH_SEARCH_PATHS[sdk=iphonesimulator*] = @executable_path/Frameworks @loader_path/Frameworks
+
+ENABLE_BITCODE[sdk=iphonesimulator*] = NO
+ENABLE_BITCODE[sdk=iphone*] = NO
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// macOS-specific settings
+//
+MACOSX_DEPLOYMENT_TARGET = 10.11
+
+VALID_ARCHS[sdk=macosx*] = i386 x86_64
+
+LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = @executable_path/../Frameworks @loader_path/../Frameworks
+
+ENABLE_BITCODE[sdk=macosx*] = NO
diff --git a/Configuration/Release.xcconfig b/Configuration/Release.xcconfig
new file mode 100755
index 0000000..72d6b83
--- /dev/null
+++ b/Configuration/Release.xcconfig
@@ -0,0 +1,5 @@
+#include "Framework.xcconfig"
+
+ONLY_ACTIVE_ARCH = NO
+SWIFT_OPTIMIZATION_LEVEL = -Owholemodule
+BITCODE_GENERATION_MODE = bitcode
diff --git a/Configuration/Tests.xcconfig b/Configuration/Tests.xcconfig
new file mode 100755
index 0000000..ea91c4f
--- /dev/null
+++ b/Configuration/Tests.xcconfig
@@ -0,0 +1,5 @@
+INFOPLIST_FILE = Configuration/Info-Tests.plist
+PRODUCT_NAME = OpenVPN Adapter Tests
+PRODUCT_BUNDLE_IDENTIFIER = me.ss-abramchuk.openvpn-adapter.test
+SWIFT_OPTIMIZATION_LEVEL = -Onone
+ONLY_ACTIVE_ARCH = YES
diff --git a/OpenVPN Adapter Tests/Bundle.swift b/OpenVPN Adapter Tests/Bundle.swift
new file mode 100644
index 0000000..1b8d8f7
--- /dev/null
+++ b/OpenVPN Adapter Tests/Bundle.swift
@@ -0,0 +1,19 @@
+//
+// Bundle.swift
+// OpenVPN iOS Client
+//
+// Created by Sergey Abramchuk on 09.03.17.
+//
+//
+
+import Foundation
+
+private final class BundleHelper {}
+
+extension Bundle {
+
+ static var current: Bundle {
+ return Bundle(for: BundleHelper.self)
+ }
+
+}
diff --git a/OpenVPN Adapter Tests/OpenVPNAdapterTests.swift b/OpenVPN Adapter Tests/OpenVPNAdapterTests.swift
new file mode 100644
index 0000000..ddfbd5b
--- /dev/null
+++ b/OpenVPN Adapter Tests/OpenVPNAdapterTests.swift
@@ -0,0 +1,89 @@
+//
+// OpenVPN_Adapter_Tests.swift
+// OpenVPN Adapter Tests
+//
+// Created by Sergey Abramchuk on 09.03.17.
+//
+//
+
+import XCTest
+import NetworkExtension
+@testable import OpenVPNAdapter
+
+class OpenVPNAdapterTests: XCTestCase {
+
+ let vpnConfiguration = "free_openvpn_udp"
+
+ var vpnAdapterExpectation: XCTestExpectation?
+
+ override func setUp() {
+ super.setUp()
+ }
+
+ override func tearDown() {
+ vpnAdapterExpectation = nil
+
+ super.tearDown()
+ }
+
+ // Test connection without specifying username and password
+ func testConectionWithoutCredentials() {
+ let configuration = getVPNConfiguration()
+
+ let adapter = OpenVPNAdapter()
+ do {
+ try adapter.configure(using: configuration)
+ } catch {
+ XCTFail("Failed to configure OpenVPN adapted due to error: \(error)")
+ }
+
+ vpnAdapterExpectation = expectation(description: "me.ss-abramchuk.openvpn-adapter.connection-w/o-credentials")
+
+ adapter.delegate = self
+ adapter.connect()
+
+ waitForExpectations(timeout: 10.0) { (error) in
+ adapter.disconnect()
+ }
+ }
+
+}
+
+extension OpenVPNAdapterTests {
+
+ func getVPNConfiguration() -> Data {
+ guard
+ let path = Bundle.current.url(forResource: vpnConfiguration, withExtension: "ovpn"),
+ let configuration = try? Data(contentsOf: path)
+ else {
+ fatalError("Failed to retrieve OpenVPN configuration")
+ }
+
+ return configuration
+ }
+
+}
+
+extension OpenVPNAdapterTests: OpenVPNAdapterDelegate {
+
+ func configureTunnel(settings: NEPacketTunnelNetworkSettings, callback: @escaping (OpenVPNAdapterPacketFlow?) -> Void) {
+ callback(self)
+ }
+
+ func handle(event: OpenVPNEvent, message: String?) {
+
+ }
+
+ func handle(error: Error) {
+
+ }
+
+}
+
+extension OpenVPNAdapterTests: OpenVPNAdapterPacketFlow {
+
+ func readPackets(completionHandler: @escaping ([Data], [NSNumber]) -> Void) { }
+
+ func writePackets(_ packets: [Data], withProtocols protocols: [NSNumber]) -> Bool { return true }
+
+}
diff --git a/OpenVPN Adapter Tests/Resources/free_openvpn_udp.ovpn b/OpenVPN Adapter Tests/Resources/free_openvpn_udp.ovpn
new file mode 100644
index 0000000..0805772
--- /dev/null
+++ b/OpenVPN Adapter Tests/Resources/free_openvpn_udp.ovpn
@@ -0,0 +1,84 @@
+###############################
+# FreeOpenVPN.Org config file #
+# https://www.freeopenvpn.org #
+###############################
+dev tun
+proto udp
+remote 71.83.197.219 1287
+cipher AES-128-CBC
+auth SHA1
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+client
+verb 3
+
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIFFBVZERgwDQYJKoZIhvcNAQELBQAwRjEbMBkGA1UEAwwS
+bzk1OTQ5d2s2cHhmZXMub3JnMRowGAYDVQQKDBFmbGhncSA1YTZwODMzbTdoOTEL
+MAkGA1UEBhMCVVMwHhcNMTcwMTE0MDEzNTA0WhcNMjQwODI4MDEzNTA0WjBGMRsw
+GQYDVQQDDBJvOTU5NDl3azZweGZlcy5vcmcxGjAYBgNVBAoMEWZsaGdxIDVhNnA4
+MzNtN2g5MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBANM5r0SjINmEXPnG6birUIcWIS+8Vxw2BX/baKfk7HF5K+/IsbRVWPO+gFdV
+1DHyw+uM8PhRvE68doGKMsb4TRMzk2FcFPu3QZ0gFX2qM+6GMF9EnoQa2zpIVba1
+etzWBJUyJ4ma/PPJbxt7iIL8S5q9wNPXsaukRRLw8ZGkoh2Hx25Q6KsUZhiyxpTX
+NiMrzl/bdNlhHr4oibIOHHR6F4Q2oH3Z/0xBLKUOdtLmyJU2SGdCP9Vodd5vBhIH
+NBEb1QsVutaFvMHO9Fmuk9Uu5Bm7wh5KBrc1RHWdpGtWVMMJK07bchbrJy0Uc38S
++Hko+yOJA/ieTraTMxL/qy/oj1cCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
+BgkqhkiG9w0BAQsFAAOCAQEAIUxFjVEdejXLIRnnEZjS/T/XGbH4NS5uclNWqxGP
+skbY0tGCUXQPiX9CgZJeuAS0a8FFp9gAnIwaRVJQ5mktsCV/bTmIVL4XzjLiVo0F
+FAGx99KasWClPUa89U9/13nwSBMh/Nw3LEuM0aZ9Q3oM2QkOooGQbQwErqUT9bBi
+wNuedZ4eo0sMOmSOr1wpo7u7Nt15Xp7jHaNv0uW92wpeAXpqGAHKINbiNBHaHLqK
+u6veAlEWSg5YVDYPfS379bRqm+2YvcdJKhbkbmNpVYEahLYTn/Y18e5ITF/Njk+K
+A1az9seo85coDXaH5YmvDDM5JjwrXGKMTIDr7ZkweT5qNQ==
+-----END CERTIFICATE-----
+
+
+-----BEGIN CERTIFICATE-----
+MIICxjCCAa4CAQAwDQYJKoZIhvcNAQEFBQAwKTEaMBgGA1UEAxMRVlBOR2F0ZUNs
+aWVudENlcnQxCzAJBgNVBAYTAkpQMB4XDTEzMDIxMTAzNDk0OVoXDTM3MDExOTAz
+MTQwN1owKTEaMBgGA1UEAxMRVlBOR2F0ZUNsaWVudENlcnQxCzAJBgNVBAYTAkpQ
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5h2lgQQYUjwoKYJbzVZA
+5VcIGd5otPc/qZRMt0KItCFA0s9RwReNVa9fDRFLRBhcITOlv3FBcW3E8h1Us7RD
+4W8GmJe8zapJnLsD39OSMRCzZJnczW4OCH1PZRZWKqDtjlNca9AF8a65jTmlDxCQ
+CjntLIWk5OLLVkFt9/tScc1GDtci55ofhaNAYMPiH7V8+1g66pGHXAoWK6AQVH67
+XCKJnGB5nlQ+HsMYPV/O49Ld91ZN/2tHkcaLLyNtywxVPRSsRh480jju0fcCsv6h
+p/0yXnTB//mWutBGpdUlIbwiITbAmrsbYnjigRvnPqX1RNJUbi9Fp6C2c/HIFJGD
+ywIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQChO5hgcw/4oWfoEFLu9kBa1B//kxH8
+hQkChVNn8BRC7Y0URQitPl3DKEed9URBDdg2KOAz77bb6ENPiliD+a38UJHIRMqe
+UBHhllOHIzvDhHFbaovALBQceeBzdkQxsKQESKmQmR832950UCovoyRB61UyAV7h
++mZhYPGRKXKSJI6s0Egg/Cri+Cwk4bjJfrb5hVse11yh4D9MHhwSfCOH+0z4hPUT
+Fku7dGavURO5SVxMn/sL6En5D+oSeXkadHpDs+Airym2YHh15h0+jPSOoR6yiVp/
+6zZeZkrN43kuS73KpKDFjfFPh8t4r1gOIjttkNcQqBccusnplQ7HJpsk
+-----END CERTIFICATE-----
+
+
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA5h2lgQQYUjwoKYJbzVZA5VcIGd5otPc/qZRMt0KItCFA0s9R
+wReNVa9fDRFLRBhcITOlv3FBcW3E8h1Us7RD4W8GmJe8zapJnLsD39OSMRCzZJnc
+zW4OCH1PZRZWKqDtjlNca9AF8a65jTmlDxCQCjntLIWk5OLLVkFt9/tScc1GDtci
+55ofhaNAYMPiH7V8+1g66pGHXAoWK6AQVH67XCKJnGB5nlQ+HsMYPV/O49Ld91ZN
+/2tHkcaLLyNtywxVPRSsRh480jju0fcCsv6hp/0yXnTB//mWutBGpdUlIbwiITbA
+mrsbYnjigRvnPqX1RNJUbi9Fp6C2c/HIFJGDywIDAQABAoIBAERV7X5AvxA8uRiK
+k8SIpsD0dX1pJOMIwakUVyvc4EfN0DhKRNb4rYoSiEGTLyzLpyBc/A28Dlkm5eOY
+fjzXfYkGtYi/Ftxkg3O9vcrMQ4+6i+uGHaIL2rL+s4MrfO8v1xv6+Wky33EEGCou
+QiwVGRFQXnRoQ62NBCFbUNLhmXwdj1akZzLU4p5R4zA3QhdxwEIatVLt0+7owLQ3
+lP8sfXhppPOXjTqMD4QkYwzPAa8/zF7acn4kryrUP7Q6PAfd0zEVqNy9ZCZ9ffho
+zXedFj486IFoc5gnTp2N6jsnVj4LCGIhlVHlYGozKKFqJcQVGsHCqq1oz2zjW6LS
+oRYIHgECgYEA8zZrkCwNYSXJuODJ3m/hOLVxcxgJuwXoiErWd0E42vPanjjVMhnt
+KY5l8qGMJ6FhK9LYx2qCrf/E0XtUAZ2wVq3ORTyGnsMWre9tLYs55X+ZN10Tc75z
+4hacbU0hqKN1HiDmsMRY3/2NaZHoy7MKnwJJBaG48l9CCTlVwMHocIECgYEA8jby
+dGjxTH+6XHWNizb5SRbZxAnyEeJeRwTMh0gGzwGPpH/sZYGzyu0SySXWCnZh3Rgq
+5uLlNxtrXrljZlyi2nQdQgsq2YrWUs0+zgU+22uQsZpSAftmhVrtvet6MjVjbByY
+DADciEVUdJYIXk+qnFUJyeroLIkTj7WYKZ6RjksCgYBoCFIwRDeg42oK89RFmnOr
+LymNAq4+2oMhsWlVb4ejWIWeAk9nc+GXUfrXszRhS01mUnU5r5ygUvRcarV/T3U7
+TnMZ+I7Y4DgWRIDd51znhxIBtYV5j/C/t85HjqOkH+8b6RTkbchaX3mau7fpUfds
+Fq0nhIq42fhEO8srfYYwgQKBgQCyhi1N/8taRwpk+3/IDEzQwjbfdzUkWWSDk9Xs
+H/pkuRHWfTMP3flWqEYgW/LW40peW2HDq5imdV8+AgZxe/XMbaji9Lgwf1RY005n
+KxaZQz7yqHupWlLGF68DPHxkZVVSagDnV/sztWX6SFsCqFVnxIXifXGC4cW5Nm9g
+va8q4QKBgQCEhLVeUfdwKvkZ94g/GFz731Z2hrdVhgMZaU/u6t0V95+YezPNCQZB
+wmE9Mmlbq1emDeROivjCfoGhR3kZXW1pTKlLh6ZMUQUOpptdXva8XxfoqQwa3enA
+M7muBbF0XN7VO80iJPv+PmIZdEIAkpwKfi201YB+BafCIuGxIF50Vg==
+-----END RSA PRIVATE KEY-----
+
diff --git a/OpenVPN Adapter/OpenVPNAdapter+Public.h b/OpenVPN Adapter/OpenVPNAdapter+Public.h
index 188f819..121c022 100644
--- a/OpenVPN Adapter/OpenVPNAdapter+Public.h
+++ b/OpenVPN Adapter/OpenVPNAdapter+Public.h
@@ -12,6 +12,8 @@
@class NEPacketTunnelNetworkSettings;
+// TODO: Add documentation to properties and methods
+
@protocol OpenVPNAdapterPacketFlow
- (void)readPacketsWithCompletionHandler:(nonnull void (^)(NSArray * _Nonnull packets, NSArray * _Nonnull protocols))completionHandler;
diff --git a/OpenVPN Adapter/Umbrella-Header.h b/OpenVPN Adapter/Umbrella-Header.h
index b44c35c..fc7989d 100644
--- a/OpenVPN Adapter/Umbrella-Header.h
+++ b/OpenVPN Adapter/Umbrella-Header.h
@@ -5,8 +5,11 @@
// Created by Sergey Abramchuk on 09.03.17.
//
//
-
-#import
+#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATO
+@import UIKit;
+#else
+@import AppKit;
+#endif
//! Project version number for OpenVPNAdapter.
FOUNDATION_EXPORT double OpenVPNAdapterVersionNumber;
diff --git a/OpenVPN Adapter/Vendors/lz4/lib/macos/liblz4.a b/OpenVPN Adapter/Vendors/lz4/lib/macos/liblz4.a
new file mode 100644
index 0000000..e701a08
Binary files /dev/null and b/OpenVPN Adapter/Vendors/lz4/lib/macos/liblz4.a differ
diff --git a/OpenVPN Adapter/Vendors/polarssl/lib/macos/libmbedtls.a b/OpenVPN Adapter/Vendors/polarssl/lib/macos/libmbedtls.a
new file mode 100644
index 0000000..c16ff70
Binary files /dev/null and b/OpenVPN Adapter/Vendors/polarssl/lib/macos/libmbedtls.a differ
diff --git a/OpenVPN iOS Client.xcodeproj/project.pbxproj b/OpenVPN Client.xcodeproj/project.pbxproj
similarity index 70%
rename from OpenVPN iOS Client.xcodeproj/project.pbxproj
rename to OpenVPN Client.xcodeproj/project.pbxproj
index 2769b48..6b59adc 100644
--- a/OpenVPN iOS Client.xcodeproj/project.pbxproj
+++ b/OpenVPN Client.xcodeproj/project.pbxproj
@@ -7,14 +7,18 @@
objects = {
/* Begin PBXBuildFile section */
+ C90BAD201E73ECE800DEFB32 /* OpenVPNAdapter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */; };
+ C90BAD311E73FF6C00DEFB32 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C90BAD301E73FF6C00DEFB32 /* SystemConfiguration.framework */; };
C91031061E47237A0004DFFE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C91031051E47237A0004DFFE /* AppDelegate.swift */; };
C910310B1E47237A0004DFFE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C91031091E47237A0004DFFE /* Main.storyboard */; };
C910310D1E47237A0004DFFE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C910310C1E47237A0004DFFE /* Assets.xcassets */; };
C91031101E47237A0004DFFE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C910310E1E47237A0004DFFE /* LaunchScreen.storyboard */; };
C91031271E4727E20004DFFE /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C91031261E4727E20004DFFE /* PacketTunnelProvider.swift */; };
- C910312B1E4727E20004DFFE /* OpenVPN Tunnel Provider.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = C91031221E4727E20004DFFE /* OpenVPN Tunnel Provider.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ C910312B1E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = C91031221E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
C91031381E472C870004DFFE /* KeychainAccess.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C91031371E472C870004DFFE /* KeychainAccess.framework */; };
C91031391E472C9C0004DFFE /* KeychainAccess.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C91031371E472C870004DFFE /* KeychainAccess.framework */; };
+ C92638FC1E71B4B500B3D77A /* NEPacketTunnelFlow+OpenVPN.swift in Sources */ = {isa = PBXBuildFile; fileRef = C92638FB1E71B4B500B3D77A /* NEPacketTunnelFlow+OpenVPN.swift */; };
+ C92638FF1E71BF9C00B3D77A /* Then.swift in Sources */ = {isa = PBXBuildFile; fileRef = C92638FE1E71BF9C00B3D77A /* Then.swift */; };
C928AD731E6E952F00DA04BD /* KeychainAccess+Reference.swift in Sources */ = {isa = PBXBuildFile; fileRef = C928AD721E6E952F00DA04BD /* KeychainAccess+Reference.swift */; };
C9BB47601E71663A00F3F98C /* Umbrella-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB475E1E71663A00F3F98C /* Umbrella-Header.h */; settings = {ATTRIBUTES = (Public, ); }; };
C9BB476C1E716AEE00F3F98C /* ovpncli.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9BB476A1E716AEE00F3F98C /* ovpncli.hpp */; };
@@ -30,7 +34,10 @@
C9BB47811E7173C700F3F98C /* OpenVPNAdapter+Public.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB477D1E7173C700F3F98C /* OpenVPNAdapter+Public.h */; settings = {ATTRIBUTES = (Public, ); }; };
C9BB47821E7173C700F3F98C /* OpenVPNAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9BB477E1E7173C700F3F98C /* OpenVPNAdapter.mm */; };
C9BB47841E71762C00F3F98C /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9BB47831E71762C00F3F98C /* NetworkExtension.framework */; };
- C9BB47851E71770C00F3F98C /* OpenVPNAdapter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */; };
+ C9BB47911E71821A00F3F98C /* OpenVPNAdapterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BB47901E71821A00F3F98C /* OpenVPNAdapterTests.swift */; };
+ C9BB47931E71821A00F3F98C /* OpenVPNAdapter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */; };
+ C9BB479C1E71836100F3F98C /* free_openvpn_udp.ovpn in Resources */ = {isa = PBXBuildFile; fileRef = C9BB479B1E71836100F3F98C /* free_openvpn_udp.ovpn */; };
+ C9BB47A21E7183DB00F3F98C /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BB47A11E7183DB00F3F98C /* Bundle.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -41,6 +48,13 @@
remoteGlobalIDString = C91031211E4727E20004DFFE;
remoteInfo = "OpenVPN Tunnel Provider";
};
+ C9BB47941E71821A00F3F98C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = C91030F81E471D760004DFFE /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = C9BB475B1E71663A00F3F98C;
+ remoteInfo = "OpenVPN Adapter";
+ };
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -50,7 +64,7 @@
dstPath = "";
dstSubfolderSpec = 13;
files = (
- C910312B1E4727E20004DFFE /* OpenVPN Tunnel Provider.appex in Embed App Extensions */,
+ C910312B1E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.appex in Embed App Extensions */,
);
name = "Embed App Extensions";
runOnlyForDeploymentPostprocessing = 0;
@@ -58,22 +72,32 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- C91031021E47237A0004DFFE /* OpenVPN Client.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "OpenVPN Client.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ C90BAD1E1E73E44E00DEFB32 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
+ C90BAD261E73F47E00DEFB32 /* Info-Framework.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Framework.plist"; sourceTree = ""; };
+ C90BAD271E73F47E00DEFB32 /* Info-Tests.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Tests.plist"; sourceTree = ""; };
+ C90BAD291E73F56800DEFB32 /* Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Framework.xcconfig; sourceTree = ""; };
+ C90BAD2A1E73F5AF00DEFB32 /* Project.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; };
+ C90BAD2B1E73F69500DEFB32 /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
+ C90BAD2C1E73F69500DEFB32 /* Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
+ C90BAD2F1E73FA7400DEFB32 /* Tests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Tests.xcconfig; sourceTree = ""; };
+ C90BAD301E73FF6C00DEFB32 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
+ C91031021E47237A0004DFFE /* OpenVPN iOS Client.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "OpenVPN iOS Client.app"; sourceTree = BUILT_PRODUCTS_DIR; };
C91031051E47237A0004DFFE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
C910310A1E47237A0004DFFE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
C910310C1E47237A0004DFFE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
C910310F1E47237A0004DFFE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
C91031111E47237A0004DFFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- C91031221E4727E20004DFFE /* OpenVPN Tunnel Provider.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "OpenVPN Tunnel Provider.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
- C91031251E4727E20004DFFE /* OpenVPN Tunnel Provider.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "OpenVPN Tunnel Provider.entitlements"; sourceTree = ""; };
+ C91031221E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "OpenVPN iOS Tunnel Provider.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
+ C91031251E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "OpenVPN iOS Tunnel Provider.entitlements"; sourceTree = ""; };
C91031261E4727E20004DFFE /* PacketTunnelProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacketTunnelProvider.swift; sourceTree = ""; };
C91031281E4727E20004DFFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
C91031371E472C870004DFFE /* KeychainAccess.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = KeychainAccess.framework; path = Carthage/Build/iOS/KeychainAccess.framework; sourceTree = ""; };
+ C92638FB1E71B4B500B3D77A /* NEPacketTunnelFlow+OpenVPN.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NEPacketTunnelFlow+OpenVPN.swift"; sourceTree = ""; };
+ C92638FE1E71BF9C00B3D77A /* Then.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Then.swift; sourceTree = ""; };
C928AD721E6E952F00DA04BD /* KeychainAccess+Reference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "KeychainAccess+Reference.swift"; sourceTree = ""; };
- C9990B361E62F0E800474227 /* OpenVPN Client.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "OpenVPN Client.entitlements"; sourceTree = ""; };
+ C9990B361E62F0E800474227 /* OpenVPN iOS Client.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "OpenVPN iOS Client.entitlements"; sourceTree = ""; };
C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OpenVPNAdapter.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C9BB475E1E71663A00F3F98C /* Umbrella-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Umbrella-Header.h"; sourceTree = ""; };
- C9BB475F1E71663A00F3F98C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
C9BB476A1E716AEE00F3F98C /* ovpncli.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ovpncli.hpp; path = Vendors/openvpn/openvpn/client/ovpncli.hpp; sourceTree = ""; };
C9BB476B1E716AEE00F3F98C /* ovpncli.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ovpncli.cpp; path = Vendors/openvpn/openvpn/client/ovpncli.cpp; sourceTree = ""; };
C9BB476F1E7171A100F3F98C /* OpenVPNError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = OpenVPNError.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
@@ -87,6 +111,10 @@
C9BB477D1E7173C700F3F98C /* OpenVPNAdapter+Public.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenVPNAdapter+Public.h"; sourceTree = ""; };
C9BB477E1E7173C700F3F98C /* OpenVPNAdapter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = OpenVPNAdapter.mm; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
C9BB47831E71762C00F3F98C /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk/System/Library/Frameworks/NetworkExtension.framework; sourceTree = DEVELOPER_DIR; };
+ C9BB478E1E71821A00F3F98C /* OpenVPN Adapter Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OpenVPN Adapter Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+ C9BB47901E71821A00F3F98C /* OpenVPNAdapterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenVPNAdapterTests.swift; sourceTree = ""; };
+ C9BB479B1E71836100F3F98C /* free_openvpn_udp.ovpn */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = free_openvpn_udp.ovpn; sourceTree = ""; };
+ C9BB47A11E7183DB00F3F98C /* Bundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -102,7 +130,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- C9BB47851E71770C00F3F98C /* OpenVPNAdapter.framework in Frameworks */,
+ C90BAD201E73ECE800DEFB32 /* OpenVPNAdapter.framework in Frameworks */,
C91031381E472C870004DFFE /* KeychainAccess.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -111,19 +139,44 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ C90BAD311E73FF6C00DEFB32 /* SystemConfiguration.framework in Frameworks */,
C9BB47841E71762C00F3F98C /* NetworkExtension.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
+ C9BB478B1E71821A00F3F98C /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C9BB47931E71821A00F3F98C /* OpenVPNAdapter.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ C90BAD251E73F47E00DEFB32 /* Configuration */ = {
+ isa = PBXGroup;
+ children = (
+ C90BAD2A1E73F5AF00DEFB32 /* Project.xcconfig */,
+ C90BAD291E73F56800DEFB32 /* Framework.xcconfig */,
+ C90BAD2B1E73F69500DEFB32 /* Debug.xcconfig */,
+ C90BAD2C1E73F69500DEFB32 /* Release.xcconfig */,
+ C90BAD2F1E73FA7400DEFB32 /* Tests.xcconfig */,
+ C90BAD261E73F47E00DEFB32 /* Info-Framework.plist */,
+ C90BAD271E73F47E00DEFB32 /* Info-Tests.plist */,
+ );
+ path = Configuration;
+ sourceTree = "";
+ };
C91030F71E471D760004DFFE = {
isa = PBXGroup;
children = (
- C91031041E47237A0004DFFE /* OpenVPN Client */,
+ C90BAD251E73F47E00DEFB32 /* Configuration */,
C9BB475D1E71663A00F3F98C /* OpenVPN Adapter */,
- C91031231E4727E20004DFFE /* OpenVPN Tunnel Provider */,
+ C9BB478F1E71821A00F3F98C /* OpenVPN Adapter Tests */,
+ C91031041E47237A0004DFFE /* OpenVPN iOS Client */,
+ C91031231E4727E20004DFFE /* OpenVPN iOS Tunnel Provider */,
C91031031E47237A0004DFFE /* Products */,
C91031361E472C870004DFFE /* Frameworks */,
);
@@ -132,14 +185,15 @@
C91031031E47237A0004DFFE /* Products */ = {
isa = PBXGroup;
children = (
- C91031021E47237A0004DFFE /* OpenVPN Client.app */,
- C91031221E4727E20004DFFE /* OpenVPN Tunnel Provider.appex */,
+ C91031021E47237A0004DFFE /* OpenVPN iOS Client.app */,
+ C91031221E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.appex */,
C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */,
+ C9BB478E1E71821A00F3F98C /* OpenVPN Adapter Tests.xctest */,
);
name = Products;
sourceTree = "";
};
- C91031041E47237A0004DFFE /* OpenVPN Client */ = {
+ C91031041E47237A0004DFFE /* OpenVPN iOS Client */ = {
isa = PBXGroup;
children = (
C91031151E47242D0004DFFE /* Controllers */,
@@ -148,7 +202,7 @@
C910311C1E4724FE0004DFFE /* Resources */,
C91031161E4724660004DFFE /* Application */,
);
- path = "OpenVPN Client";
+ path = "OpenVPN iOS Client";
sourceTree = "";
};
C91031151E47242D0004DFFE /* Controllers */ = {
@@ -179,7 +233,7 @@
C91031181E4724A90004DFFE /* Configuration */ = {
isa = PBXGroup;
children = (
- C9990B361E62F0E800474227 /* OpenVPN Client.entitlements */,
+ C9990B361E62F0E800474227 /* OpenVPN iOS Client.entitlements */,
C91031111E47237A0004DFFE /* Info.plist */,
);
name = Configuration;
@@ -217,22 +271,20 @@
name = Resources;
sourceTree = "";
};
- C91031231E4727E20004DFFE /* OpenVPN Tunnel Provider */ = {
+ C91031231E4727E20004DFFE /* OpenVPN iOS Tunnel Provider */ = {
isa = PBXGroup;
children = (
C91031301E4728F10004DFFE /* Libraries */,
C91031321E4729120004DFFE /* Provider */,
);
- path = "OpenVPN Tunnel Provider";
+ path = "OpenVPN iOS Tunnel Provider";
sourceTree = "";
};
C91031301E4728F10004DFFE /* Libraries */ = {
isa = PBXGroup;
children = (
- C91031331E4729220004DFFE /* Base */,
C91031341E4729270004DFFE /* Helpers */,
C91031311E4728F70004DFFE /* Configuration */,
- C91031351E4729D60004DFFE /* Vendors */,
);
name = Libraries;
sourceTree = "";
@@ -241,7 +293,7 @@
isa = PBXGroup;
children = (
C91031281E4727E20004DFFE /* Info.plist */,
- C91031251E4727E20004DFFE /* OpenVPN Tunnel Provider.entitlements */,
+ C91031251E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.entitlements */,
);
name = Configuration;
sourceTree = "";
@@ -254,41 +306,39 @@
name = Provider;
sourceTree = "";
};
- C91031331E4729220004DFFE /* Base */ = {
- isa = PBXGroup;
- children = (
- );
- name = Base;
- sourceTree = "";
- };
C91031341E4729270004DFFE /* Helpers */ = {
isa = PBXGroup;
children = (
C928AD711E6E94FE00DA04BD /* Extensions */,
+ C92638FD1E71BF7D00B3D77A /* Utils */,
);
name = Helpers;
sourceTree = "";
};
- C91031351E4729D60004DFFE /* Vendors */ = {
- isa = PBXGroup;
- children = (
- );
- name = Vendors;
- sourceTree = "";
- };
C91031361E472C870004DFFE /* Frameworks */ = {
isa = PBXGroup;
children = (
+ C90BAD301E73FF6C00DEFB32 /* SystemConfiguration.framework */,
+ C90BAD1E1E73E44E00DEFB32 /* NetworkExtension.framework */,
C9BB47831E71762C00F3F98C /* NetworkExtension.framework */,
C91031371E472C870004DFFE /* KeychainAccess.framework */,
);
name = Frameworks;
sourceTree = "";
};
+ C92638FD1E71BF7D00B3D77A /* Utils */ = {
+ isa = PBXGroup;
+ children = (
+ C92638FE1E71BF9C00B3D77A /* Then.swift */,
+ );
+ name = Utils;
+ sourceTree = "";
+ };
C928AD711E6E94FE00DA04BD /* Extensions */ = {
isa = PBXGroup;
children = (
C928AD721E6E952F00DA04BD /* KeychainAccess+Reference.swift */,
+ C92638FB1E71B4B500B3D77A /* NEPacketTunnelFlow+OpenVPN.swift */,
);
name = Extensions;
sourceTree = "";
@@ -307,7 +357,6 @@
isa = PBXGroup;
children = (
C9BB47681E716ABF00F3F98C /* Vendors */,
- C9BB47661E7169C400F3F98C /* Configuration */,
);
name = Libraries;
sourceTree = "";
@@ -320,14 +369,6 @@
name = Framework;
sourceTree = "";
};
- C9BB47661E7169C400F3F98C /* Configuration */ = {
- isa = PBXGroup;
- children = (
- C9BB475F1E71663A00F3F98C /* Info.plist */,
- );
- name = Configuration;
- sourceTree = "";
- };
C9BB47671E7169F000F3F98C /* Adapter */ = {
isa = PBXGroup;
children = (
@@ -362,6 +403,56 @@
name = OpenVPN;
sourceTree = "";
};
+ C9BB478F1E71821A00F3F98C /* OpenVPN Adapter Tests */ = {
+ isa = PBXGroup;
+ children = (
+ C9BB479D1E71837200F3F98C /* Adapter Tests */,
+ C9BB479E1E7183B800F3F98C /* Libraries */,
+ C9BB479A1E71836100F3F98C /* Resources */,
+ );
+ path = "OpenVPN Adapter Tests";
+ sourceTree = "";
+ };
+ C9BB479A1E71836100F3F98C /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ C9BB479B1E71836100F3F98C /* free_openvpn_udp.ovpn */,
+ );
+ path = Resources;
+ sourceTree = "";
+ };
+ C9BB479D1E71837200F3F98C /* Adapter Tests */ = {
+ isa = PBXGroup;
+ children = (
+ C9BB47901E71821A00F3F98C /* OpenVPNAdapterTests.swift */,
+ );
+ name = "Adapter Tests";
+ sourceTree = "";
+ };
+ C9BB479E1E7183B800F3F98C /* Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ C9BB479F1E7183C200F3F98C /* Helpers */,
+ );
+ name = Libraries;
+ sourceTree = "";
+ };
+ C9BB479F1E7183C200F3F98C /* Helpers */ = {
+ isa = PBXGroup;
+ children = (
+ C9BB47A01E7183CA00F3F98C /* Utils */,
+ );
+ name = Helpers;
+ sourceTree = "";
+ };
+ C9BB47A01E7183CA00F3F98C /* Utils */ = {
+ isa = PBXGroup;
+ children = (
+ C9BB47A11E7183DB00F3F98C /* Bundle.swift */,
+ );
+ name = Utils;
+ sourceTree = "";
+ };
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
@@ -384,9 +475,9 @@
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
- C91031011E47237A0004DFFE /* OpenVPN Client */ = {
+ C91031011E47237A0004DFFE /* OpenVPN iOS Client */ = {
isa = PBXNativeTarget;
- buildConfigurationList = C91031141E47237A0004DFFE /* Build configuration list for PBXNativeTarget "OpenVPN Client" */;
+ buildConfigurationList = C91031141E47237A0004DFFE /* Build configuration list for PBXNativeTarget "OpenVPN iOS Client" */;
buildPhases = (
C910311D1E4725740004DFFE /* Check Warning And Error Tags */,
C91030FE1E47237A0004DFFE /* Sources */,
@@ -400,14 +491,14 @@
dependencies = (
C910312A1E4727E20004DFFE /* PBXTargetDependency */,
);
- name = "OpenVPN Client";
+ name = "OpenVPN iOS Client";
productName = "OpenVPN Client";
- productReference = C91031021E47237A0004DFFE /* OpenVPN Client.app */;
+ productReference = C91031021E47237A0004DFFE /* OpenVPN iOS Client.app */;
productType = "com.apple.product-type.application";
};
- C91031211E4727E20004DFFE /* OpenVPN Tunnel Provider */ = {
+ C91031211E4727E20004DFFE /* OpenVPN iOS Tunnel Provider */ = {
isa = PBXNativeTarget;
- buildConfigurationList = C910312C1E4727E20004DFFE /* Build configuration list for PBXNativeTarget "OpenVPN Tunnel Provider" */;
+ buildConfigurationList = C910312C1E4727E20004DFFE /* Build configuration list for PBXNativeTarget "OpenVPN iOS Tunnel Provider" */;
buildPhases = (
C910313D1E472E170004DFFE /* Check Warning And Error Tags */,
C910311E1E4727E20004DFFE /* Sources */,
@@ -419,9 +510,9 @@
);
dependencies = (
);
- name = "OpenVPN Tunnel Provider";
+ name = "OpenVPN iOS Tunnel Provider";
productName = "OpenVPN Tunnel Provider";
- productReference = C91031221E4727E20004DFFE /* OpenVPN Tunnel Provider.appex */;
+ productReference = C91031221E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.appex */;
productType = "com.apple.product-type.app-extension";
};
C9BB475B1E71663A00F3F98C /* OpenVPN Adapter */ = {
@@ -443,6 +534,24 @@
productReference = C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */;
productType = "com.apple.product-type.framework";
};
+ C9BB478D1E71821A00F3F98C /* OpenVPN Adapter Tests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C9BB47961E71821A00F3F98C /* Build configuration list for PBXNativeTarget "OpenVPN Adapter Tests" */;
+ buildPhases = (
+ C9BB478A1E71821A00F3F98C /* Sources */,
+ C9BB478B1E71821A00F3F98C /* Frameworks */,
+ C9BB478C1E71821A00F3F98C /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ C9BB47951E71821A00F3F98C /* PBXTargetDependency */,
+ );
+ name = "OpenVPN Adapter Tests";
+ productName = "OpenVPN Adapter Tests";
+ productReference = C9BB478E1E71821A00F3F98C /* OpenVPN Adapter Tests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
/* End PBXNativeTarget section */
/* Begin PBXProject section */
@@ -483,9 +592,14 @@
CreatedOnToolsVersion = 8.2.1;
ProvisioningStyle = Manual;
};
+ C9BB478D1E71821A00F3F98C = {
+ CreatedOnToolsVersion = 8.2.1;
+ DevelopmentTeam = 2TWXCGG7R3;
+ ProvisioningStyle = Manual;
+ };
};
};
- buildConfigurationList = C91030FB1E471D760004DFFE /* Build configuration list for PBXProject "OpenVPN iOS Client" */;
+ buildConfigurationList = C91030FB1E471D760004DFFE /* Build configuration list for PBXProject "OpenVPN Client" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
@@ -498,9 +612,10 @@
projectDirPath = "";
projectRoot = "";
targets = (
- C91031011E47237A0004DFFE /* OpenVPN Client */,
C9BB475B1E71663A00F3F98C /* OpenVPN Adapter */,
- C91031211E4727E20004DFFE /* OpenVPN Tunnel Provider */,
+ C9BB478D1E71821A00F3F98C /* OpenVPN Adapter Tests */,
+ C91031011E47237A0004DFFE /* OpenVPN iOS Client */,
+ C91031211E4727E20004DFFE /* OpenVPN iOS Tunnel Provider */,
);
};
/* End PBXProject section */
@@ -530,6 +645,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ C9BB478C1E71821A00F3F98C /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C9BB479C1E71836100F3F98C /* free_openvpn_udp.ovpn in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
@@ -603,7 +726,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "TAGS=\"TODO:|FIXME:|\\?\\?\\?|\\!\\!\\!\"\nERRORTAG=\"ERROR:\"\nfind \"${SRCROOT}/${TARGET_NAME}\" \\( -name \"*.h\" -or -name \"*.mm\" -or -name \"*.m\" -or -name \"*.swift\" \\) ! -path \"*/Vendors/*\" -print0 | xargs -0 egrep --with-filename --line-number --only-matching \"($TAGS).*\\$|($ERRORTAG).*\\$\" | perl -p -e \"s/($TAGS)/ warning: \\$1/\" | perl -p -e \"s/($ERRORTAG)/ error: \\$1/\"";
+ shellScript = "TAGS=\"TODO:|FIXME:|\\?\\?\\?|\\!\\!\\!\"\nERRORTAG=\"ERROR:\"\nfind \"${SRCROOT}/OpenVPN Adapter\" \\( -name \"*.h\" -or -name \"*.mm\" -or -name \"*.m\" -or -name \"*.swift\" \\) ! -path \"*/Vendors/*\" -print0 | xargs -0 egrep --with-filename --line-number --only-matching \"($TAGS).*\\$|($ERRORTAG).*\\$\" | perl -p -e \"s/($TAGS)/ warning: \\$1/\" | perl -p -e \"s/($ERRORTAG)/ error: \\$1/\"";
};
/* End PBXShellScriptBuildPhase section */
@@ -620,6 +743,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ C92638FF1E71BF9C00B3D77A /* Then.swift in Sources */,
+ C92638FC1E71B4B500B3D77A /* NEPacketTunnelFlow+OpenVPN.swift in Sources */,
C91031271E4727E20004DFFE /* PacketTunnelProvider.swift in Sources */,
C928AD731E6E952F00DA04BD /* KeychainAccess+Reference.swift in Sources */,
);
@@ -636,14 +761,28 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ C9BB478A1E71821A00F3F98C /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C9BB47911E71821A00F3F98C /* OpenVPNAdapterTests.swift in Sources */,
+ C9BB47A21E7183DB00F3F98C /* Bundle.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
C910312A1E4727E20004DFFE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = C91031211E4727E20004DFFE /* OpenVPN Tunnel Provider */;
+ target = C91031211E4727E20004DFFE /* OpenVPN iOS Tunnel Provider */;
targetProxy = C91031291E4727E20004DFFE /* PBXContainerItemProxy */;
};
+ C9BB47951E71821A00F3F98C /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = C9BB475B1E71663A00F3F98C /* OpenVPN Adapter */;
+ targetProxy = C9BB47941E71821A00F3F98C /* PBXContainerItemProxy */;
+ };
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
@@ -670,6 +809,7 @@
/* Begin XCBuildConfiguration section */
C91030FC1E471D760004DFFE /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = C90BAD2A1E73F5AF00DEFB32 /* Project.xcconfig */;
buildSettings = {
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
};
@@ -677,6 +817,7 @@
};
C91030FD1E471D760004DFFE /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = C90BAD2A1E73F5AF00DEFB32 /* Project.xcconfig */;
buildSettings = {
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
};
@@ -705,7 +846,7 @@
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_ENTITLEMENTS = "OpenVPN Client/OpenVPN Client.entitlements";
+ CODE_SIGN_ENTITLEMENTS = "OpenVPN iOS Client/OpenVPN iOS Client.entitlements";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
@@ -731,14 +872,14 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- INFOPLIST_FILE = "OpenVPN Client/Info.plist";
+ INFOPLIST_FILE = "$(SRCROOT)/OpenVPN iOS Client/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "me.ss-abramchuk.openvpn-ios-client";
PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE = "c6bdf97a-4a6e-45f5-af63-045d8b3f0ffc";
- PROVISIONING_PROFILE_SPECIFIER = "OpenVPN Client Dev Profile";
+ PROVISIONING_PROFILE = "65d9b784-150e-4ccb-a551-8b59e2a558db";
+ PROVISIONING_PROFILE_SPECIFIER = "OpenVPN iOS Client Dev Profile";
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -770,7 +911,7 @@
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_ENTITLEMENTS = "OpenVPN Client/OpenVPN Client.entitlements";
+ CODE_SIGN_ENTITLEMENTS = "OpenVPN iOS Client/OpenVPN iOS Client.entitlements";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -790,7 +931,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- INFOPLIST_FILE = "OpenVPN Client/Info.plist";
+ INFOPLIST_FILE = "$(SRCROOT)/OpenVPN iOS Client/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "me.ss-abramchuk.openvpn-ios-client";
@@ -824,7 +965,7 @@
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_ENTITLEMENTS = "OpenVPN Tunnel Provider/OpenVPN Tunnel Provider.entitlements";
+ CODE_SIGN_ENTITLEMENTS = "OpenVPN iOS Tunnel Provider/OpenVPN iOS Tunnel Provider.entitlements";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
@@ -856,8 +997,8 @@
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "me.ss-abramchuk.openvpn-ios-client.tunnel-provider";
PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE = "7eef51df-5e5e-48fe-8743-0409498969ac";
- PROVISIONING_PROFILE_SPECIFIER = "OpenVPN Tunnel Provider Dev Profile";
+ PROVISIONING_PROFILE = "3b8150a9-e826-4354-a88b-cf6ac7093f1d";
+ PROVISIONING_PROFILE_SPECIFIER = "OpenVPN iOS Tunnel Provider Dev Profile";
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
@@ -889,7 +1030,7 @@
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_ENTITLEMENTS = "OpenVPN Tunnel Provider/OpenVPN Tunnel Provider.entitlements";
+ CODE_SIGN_ENTITLEMENTS = "OpenVPN iOS Tunnel Provider/OpenVPN iOS Tunnel Provider.entitlements";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -926,12 +1067,11 @@
};
C9BB47611E71663A00F3F98C /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = C90BAD2B1E73F69500DEFB32 /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
CLANG_ANALYZER_NONNULL = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
@@ -947,7 +1087,6 @@
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
- DEBUG_INFORMATION_FORMAT = dwarf;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -956,55 +1095,17 @@
ENABLE_BITCODE = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = (
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/asio\"",
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/lz4/include\"",
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/polarssl/include\"",
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/openvpn\"",
- );
- INFOPLIST_FILE = "$(SRCROOT)/OpenVPN Adapter/Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- "LIBRARY_SEARCH_PATHS[sdk=iphoneos*]" = (
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/lz4/lib/ios\"",
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/polarssl/lib/ios\"",
- );
- "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*]" = (
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/lz4/lib/sim\"",
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/polarssl/lib/sim\"",
- );
- MODULEMAP_FILE = "${TARGET_NAME}/module.modulemap";
MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- OTHER_CFLAGS = "-DAF_APP_EXTENSIONS";
- OTHER_CPLUSPLUSFLAGS = (
- "$(OTHER_CFLAGS)",
- "-DASIO_STANDALONE",
- "-DASIO_NO_DEPRECATED",
- "-DHAVE_LZ4",
- "-DUSE_POLARSSL",
- );
- OTHER_LDFLAGS = (
- "-lmbedtls",
- "-llz4",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "me.ss-abramchuk.openvpn-adapter";
- PRODUCT_NAME = OpenVPNAdapter;
- SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -1017,12 +1118,11 @@
};
C9BB47621E71663A00F3F98C /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = C90BAD2C1E73F69500DEFB32 /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
CLANG_ANALYZER_NONNULL = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
@@ -1035,10 +1135,9 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -1047,7 +1146,7 @@
ENABLE_BITCODE = NO;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
+ ENABLE_TESTABILITY = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
@@ -1055,54 +1154,123 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = (
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/asio\"",
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/lz4/include\"",
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/polarssl/include\"",
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/openvpn\"",
- );
- INFOPLIST_FILE = "$(SRCROOT)/OpenVPN Adapter/Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- "LIBRARY_SEARCH_PATHS[sdk=iphoneos*]" = (
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/lz4/lib/ios\"",
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/polarssl/lib/ios\"",
- );
- "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*]" = (
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/lz4/lib/sim\"",
- "\"$(PROJECT_DIR)/${TARGET_NAME}/Vendors/polarssl/lib/sim\"",
- );
- MODULEMAP_FILE = "${TARGET_NAME}/module.modulemap";
MTL_ENABLE_DEBUG_INFO = NO;
- OTHER_CFLAGS = "-DAF_APP_EXTENSIONS";
- OTHER_CPLUSPLUSFLAGS = (
- "$(OTHER_CFLAGS)",
- "-DASIO_STANDALONE",
- "-DASIO_NO_DEPRECATED",
- "-DHAVE_LZ4",
- "-DUSE_POLARSSL",
- );
- OTHER_LDFLAGS = (
- "-lmbedtls",
- "-llz4",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "me.ss-abramchuk.openvpn-adapter";
- PRODUCT_NAME = OpenVPNAdapter;
- SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Release;
};
+ C9BB47971E71821A00F3F98C /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = C90BAD2F1E73FA7400DEFB32 /* Tests.xcconfig */;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ DEVELOPMENT_TEAM = 2TWXCGG7R3;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.2;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MTL_ENABLE_DEBUG_INFO = YES;
+ PRODUCT_BUNDLE_IDENTIFIER = "me.ss-abramchuk.OpenVPN-Adapter-Tests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 3.0;
+ };
+ name = Debug;
+ };
+ C9BB47981E71821A00F3F98C /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = C90BAD2F1E73FA7400DEFB32 /* Tests.xcconfig */;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ DEVELOPMENT_TEAM = 2TWXCGG7R3;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.2;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MTL_ENABLE_DEBUG_INFO = NO;
+ PRODUCT_BUNDLE_IDENTIFIER = "me.ss-abramchuk.OpenVPN-Adapter-Tests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 3.0;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
- C91030FB1E471D760004DFFE /* Build configuration list for PBXProject "OpenVPN iOS Client" */ = {
+ C91030FB1E471D760004DFFE /* Build configuration list for PBXProject "OpenVPN Client" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C91030FC1E471D760004DFFE /* Debug */,
@@ -1111,7 +1279,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- C91031141E47237A0004DFFE /* Build configuration list for PBXNativeTarget "OpenVPN Client" */ = {
+ C91031141E47237A0004DFFE /* Build configuration list for PBXNativeTarget "OpenVPN iOS Client" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C91031121E47237A0004DFFE /* Debug */,
@@ -1120,7 +1288,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- C910312C1E4727E20004DFFE /* Build configuration list for PBXNativeTarget "OpenVPN Tunnel Provider" */ = {
+ C910312C1E4727E20004DFFE /* Build configuration list for PBXNativeTarget "OpenVPN iOS Tunnel Provider" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C910312D1E4727E20004DFFE /* Debug */,
@@ -1136,6 +1304,16 @@
C9BB47621E71663A00F3F98C /* Release */,
);
defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C9BB47961E71821A00F3F98C /* Build configuration list for PBXNativeTarget "OpenVPN Adapter Tests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C9BB47971E71821A00F3F98C /* Debug */,
+ C9BB47981E71821A00F3F98C /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
diff --git a/OpenVPN Client.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/OpenVPN Client.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..523a004
--- /dev/null
+++ b/OpenVPN Client.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/OpenVPN Client.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter.xcscheme b/OpenVPN Client.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter.xcscheme
new file mode 100644
index 0000000..b6da6c8
--- /dev/null
+++ b/OpenVPN Client.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter.xcscheme
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenVPN iOS Client.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/OpenVPN iOS Client.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index f93a747..0000000
--- a/OpenVPN iOS Client.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/OpenVPN Client/AppDelegate.swift b/OpenVPN iOS Client/AppDelegate.swift
similarity index 100%
rename from OpenVPN Client/AppDelegate.swift
rename to OpenVPN iOS Client/AppDelegate.swift
diff --git a/OpenVPN Client/Assets.xcassets/AppIcon.appiconset/Contents.json b/OpenVPN iOS Client/Assets.xcassets/AppIcon.appiconset/Contents.json
similarity index 100%
rename from OpenVPN Client/Assets.xcassets/AppIcon.appiconset/Contents.json
rename to OpenVPN iOS Client/Assets.xcassets/AppIcon.appiconset/Contents.json
diff --git a/OpenVPN Client/Base.lproj/LaunchScreen.storyboard b/OpenVPN iOS Client/Base.lproj/LaunchScreen.storyboard
similarity index 100%
rename from OpenVPN Client/Base.lproj/LaunchScreen.storyboard
rename to OpenVPN iOS Client/Base.lproj/LaunchScreen.storyboard
diff --git a/OpenVPN Client/Base.lproj/Main.storyboard b/OpenVPN iOS Client/Base.lproj/Main.storyboard
similarity index 100%
rename from OpenVPN Client/Base.lproj/Main.storyboard
rename to OpenVPN iOS Client/Base.lproj/Main.storyboard
diff --git a/OpenVPN Client/Info.plist b/OpenVPN iOS Client/Info.plist
similarity index 100%
rename from OpenVPN Client/Info.plist
rename to OpenVPN iOS Client/Info.plist
diff --git a/OpenVPN Client/OpenVPN Client.entitlements b/OpenVPN iOS Client/OpenVPN iOS Client.entitlements
similarity index 100%
rename from OpenVPN Client/OpenVPN Client.entitlements
rename to OpenVPN iOS Client/OpenVPN iOS Client.entitlements
diff --git a/OpenVPN Tunnel Provider/Info.plist b/OpenVPN iOS Tunnel Provider/Info.plist
similarity index 95%
rename from OpenVPN Tunnel Provider/Info.plist
rename to OpenVPN iOS Tunnel Provider/Info.plist
index abaa3b3..855ea39 100644
--- a/OpenVPN Tunnel Provider/Info.plist
+++ b/OpenVPN iOS Tunnel Provider/Info.plist
@@ -5,7 +5,7 @@
CFBundleDevelopmentRegion
en
CFBundleDisplayName
- OpenVPN Tunnel Provider
+ OpenVPN iOS Tunnel Provider
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
diff --git a/OpenVPN Tunnel Provider/KeychainAccess+Reference.swift b/OpenVPN iOS Tunnel Provider/KeychainAccess+Reference.swift
similarity index 100%
rename from OpenVPN Tunnel Provider/KeychainAccess+Reference.swift
rename to OpenVPN iOS Tunnel Provider/KeychainAccess+Reference.swift
diff --git a/OpenVPN Tunnel Provider/NEPacketTunnelFlow+OpenVPN.swift b/OpenVPN iOS Tunnel Provider/NEPacketTunnelFlow+OpenVPN.swift
similarity index 100%
rename from OpenVPN Tunnel Provider/NEPacketTunnelFlow+OpenVPN.swift
rename to OpenVPN iOS Tunnel Provider/NEPacketTunnelFlow+OpenVPN.swift
diff --git a/OpenVPN Tunnel Provider/OpenVPN Tunnel Provider.entitlements b/OpenVPN iOS Tunnel Provider/OpenVPN iOS Tunnel Provider.entitlements
similarity index 100%
rename from OpenVPN Tunnel Provider/OpenVPN Tunnel Provider.entitlements
rename to OpenVPN iOS Tunnel Provider/OpenVPN iOS Tunnel Provider.entitlements
diff --git a/OpenVPN Tunnel Provider/PacketTunnelProvider.swift b/OpenVPN iOS Tunnel Provider/PacketTunnelProvider.swift
similarity index 81%
rename from OpenVPN Tunnel Provider/PacketTunnelProvider.swift
rename to OpenVPN iOS Tunnel Provider/PacketTunnelProvider.swift
index cc34c7f..45efedb 100644
--- a/OpenVPN Tunnel Provider/PacketTunnelProvider.swift
+++ b/OpenVPN iOS Tunnel Provider/PacketTunnelProvider.swift
@@ -11,31 +11,28 @@ import KeychainAccess
import OpenVPNAdapter
enum PacketTunnelProviderError: Error {
-
- case startFailure(message: String)
-
+ case fatalError(message: String)
}
class PacketTunnelProvider: NEPacketTunnelProvider {
let keychain = Keychain(service: "me.ss-abramchuk.openvpn-ios-client", accessGroup: "2TWXCGG7R3.keychain-shared")
- var vpnAdapter: OpenVPNAdapter?
+ lazy var vpnAdapter: OpenVPNAdapter = {
+ return OpenVPNAdapter().then { $0.delegate = self }
+ }()
var startHandler: ((Error?) -> Void)?
var stopHandler: (() -> Void)?
override func startTunnel(options: [String : NSObject]? = nil, completionHandler: @escaping (Error?) -> Void) {
guard let settings = options?["Settings"] as? Data else {
- let error = PacketTunnelProviderError.startFailure(message: "Failed to retrieve OpenVPN settings from options")
+ let error = PacketTunnelProviderError.fatalError(message: "Failed to retrieve OpenVPN settings from options")
completionHandler(error)
return
}
- let vpnAdapter = OpenVPNAdapter()
- vpnAdapter.delegate = self
-
if let username = protocolConfiguration.username {
vpnAdapter.username = username
}
@@ -43,7 +40,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
if let reference = protocolConfiguration.passwordReference {
do {
guard let password = try keychain.get(ref: reference) else {
- throw PacketTunnelProviderError.startFailure(message: "Failed to retrieve password from keychain")
+ throw PacketTunnelProviderError.fatalError(message: "Failed to retrieve password from keychain")
}
vpnAdapter.password = password
@@ -59,15 +56,14 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
completionHandler(error)
return
}
-
- self.vpnAdapter = vpnAdapter
+
startHandler = completionHandler
-
vpnAdapter.connect()
}
override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
-
+ stopHandler = completionHandler
+ vpnAdapter.disconnect()
}
}
diff --git a/OpenVPN Tunnel Provider/Then.swift b/OpenVPN iOS Tunnel Provider/Then.swift
similarity index 100%
rename from OpenVPN Tunnel Provider/Then.swift
rename to OpenVPN iOS Tunnel Provider/Then.swift