OpenVPN Adapter now can be compiled for both macOS and iOS

This commit is contained in:
Sergey Abramchuk
2017-03-11 13:48:47 +03:00
parent fd528d6274
commit 146ea30114
30 changed files with 705 additions and 172 deletions

6
Configuration/Debug.xcconfig Executable file
View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

29
Configuration/Project.xcconfig Executable file
View File

@@ -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

5
Configuration/Release.xcconfig Executable file
View File

@@ -0,0 +1,5 @@
#include "Framework.xcconfig"
ONLY_ACTIVE_ARCH = NO
SWIFT_OPTIMIZATION_LEVEL = -Owholemodule
BITCODE_GENERATION_MODE = bitcode

5
Configuration/Tests.xcconfig Executable file
View File

@@ -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

View File

@@ -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)
}
}

View File

@@ -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 }
}

View File

@@ -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
<ca>
-----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-----
</ca>
<cert>
-----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-----
</cert>
<key>
-----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-----
</key>

View File

@@ -12,6 +12,8 @@
@class NEPacketTunnelNetworkSettings;
// TODO: Add documentation to properties and methods
@protocol OpenVPNAdapterPacketFlow <NSObject>
- (void)readPacketsWithCompletionHandler:(nonnull void (^)(NSArray<NSData *> * _Nonnull packets, NSArray<NSNumber *> * _Nonnull protocols))completionHandler;

View File

@@ -5,8 +5,11 @@
// Created by Sergey Abramchuk on 09.03.17.
//
//
#import <UIKit/UIKit.h>
#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATO
@import UIKit;
#else
@import AppKit;
#endif
//! Project version number for OpenVPNAdapter.
FOUNDATION_EXPORT double OpenVPNAdapterVersionNumber;

Binary file not shown.

View File

@@ -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 = "<group>"; };
C90BAD271E73F47E00DEFB32 /* Info-Tests.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Tests.plist"; sourceTree = "<group>"; };
C90BAD291E73F56800DEFB32 /* Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Framework.xcconfig; sourceTree = "<group>"; };
C90BAD2A1E73F5AF00DEFB32 /* Project.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = "<group>"; };
C90BAD2B1E73F69500DEFB32 /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
C90BAD2C1E73F69500DEFB32 /* Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
C90BAD2F1E73FA7400DEFB32 /* Tests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Tests.xcconfig; sourceTree = "<group>"; };
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 = "<group>"; };
C910310A1E47237A0004DFFE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
C910310C1E47237A0004DFFE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
C910310F1E47237A0004DFFE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
C91031111E47237A0004DFFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
C91031261E4727E20004DFFE /* PacketTunnelProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacketTunnelProvider.swift; sourceTree = "<group>"; };
C91031281E4727E20004DFFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
C91031371E472C870004DFFE /* KeychainAccess.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = KeychainAccess.framework; path = Carthage/Build/iOS/KeychainAccess.framework; sourceTree = "<group>"; };
C92638FB1E71B4B500B3D77A /* NEPacketTunnelFlow+OpenVPN.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NEPacketTunnelFlow+OpenVPN.swift"; sourceTree = "<group>"; };
C92638FE1E71BF9C00B3D77A /* Then.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Then.swift; sourceTree = "<group>"; };
C928AD721E6E952F00DA04BD /* KeychainAccess+Reference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "KeychainAccess+Reference.swift"; sourceTree = "<group>"; };
C9990B361E62F0E800474227 /* OpenVPN Client.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "OpenVPN Client.entitlements"; sourceTree = "<group>"; };
C9990B361E62F0E800474227 /* OpenVPN iOS Client.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "OpenVPN iOS Client.entitlements"; sourceTree = "<group>"; };
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 = "<group>"; };
C9BB475F1E71663A00F3F98C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
C9BB476A1E716AEE00F3F98C /* ovpncli.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ovpncli.hpp; path = Vendors/openvpn/openvpn/client/ovpncli.hpp; sourceTree = "<group>"; };
C9BB476B1E716AEE00F3F98C /* ovpncli.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ovpncli.cpp; path = Vendors/openvpn/openvpn/client/ovpncli.cpp; sourceTree = "<group>"; };
C9BB476F1E7171A100F3F98C /* OpenVPNError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = OpenVPNError.h; sourceTree = "<group>"; 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 = "<group>"; };
C9BB477E1E7173C700F3F98C /* OpenVPNAdapter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = OpenVPNAdapter.mm; sourceTree = "<group>"; 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 = "<group>"; };
C9BB479B1E71836100F3F98C /* free_openvpn_udp.ovpn */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = free_openvpn_udp.ovpn; sourceTree = "<group>"; };
C9BB47A11E7183DB00F3F98C /* Bundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = "<group>"; };
/* 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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
C91031301E4728F10004DFFE /* Libraries */ = {
isa = PBXGroup;
children = (
C91031331E4729220004DFFE /* Base */,
C91031341E4729270004DFFE /* Helpers */,
C91031311E4728F70004DFFE /* Configuration */,
C91031351E4729D60004DFFE /* Vendors */,
);
name = Libraries;
sourceTree = "<group>";
@@ -241,7 +293,7 @@
isa = PBXGroup;
children = (
C91031281E4727E20004DFFE /* Info.plist */,
C91031251E4727E20004DFFE /* OpenVPN Tunnel Provider.entitlements */,
C91031251E4727E20004DFFE /* OpenVPN iOS Tunnel Provider.entitlements */,
);
name = Configuration;
sourceTree = "<group>";
@@ -254,41 +306,39 @@
name = Provider;
sourceTree = "<group>";
};
C91031331E4729220004DFFE /* Base */ = {
isa = PBXGroup;
children = (
);
name = Base;
sourceTree = "<group>";
};
C91031341E4729270004DFFE /* Helpers */ = {
isa = PBXGroup;
children = (
C928AD711E6E94FE00DA04BD /* Extensions */,
C92638FD1E71BF7D00B3D77A /* Utils */,
);
name = Helpers;
sourceTree = "<group>";
};
C91031351E4729D60004DFFE /* Vendors */ = {
isa = PBXGroup;
children = (
);
name = Vendors;
sourceTree = "<group>";
};
C91031361E472C870004DFFE /* Frameworks */ = {
isa = PBXGroup;
children = (
C90BAD301E73FF6C00DEFB32 /* SystemConfiguration.framework */,
C90BAD1E1E73E44E00DEFB32 /* NetworkExtension.framework */,
C9BB47831E71762C00F3F98C /* NetworkExtension.framework */,
C91031371E472C870004DFFE /* KeychainAccess.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
C92638FD1E71BF7D00B3D77A /* Utils */ = {
isa = PBXGroup;
children = (
C92638FE1E71BF9C00B3D77A /* Then.swift */,
);
name = Utils;
sourceTree = "<group>";
};
C928AD711E6E94FE00DA04BD /* Extensions */ = {
isa = PBXGroup;
children = (
C928AD721E6E952F00DA04BD /* KeychainAccess+Reference.swift */,
C92638FB1E71B4B500B3D77A /* NEPacketTunnelFlow+OpenVPN.swift */,
);
name = Extensions;
sourceTree = "<group>";
@@ -307,7 +357,6 @@
isa = PBXGroup;
children = (
C9BB47681E716ABF00F3F98C /* Vendors */,
C9BB47661E7169C400F3F98C /* Configuration */,
);
name = Libraries;
sourceTree = "<group>";
@@ -320,14 +369,6 @@
name = Framework;
sourceTree = "<group>";
};
C9BB47661E7169C400F3F98C /* Configuration */ = {
isa = PBXGroup;
children = (
C9BB475F1E71663A00F3F98C /* Info.plist */,
);
name = Configuration;
sourceTree = "<group>";
};
C9BB47671E7169F000F3F98C /* Adapter */ = {
isa = PBXGroup;
children = (
@@ -362,6 +403,56 @@
name = OpenVPN;
sourceTree = "<group>";
};
C9BB478F1E71821A00F3F98C /* OpenVPN Adapter Tests */ = {
isa = PBXGroup;
children = (
C9BB479D1E71837200F3F98C /* Adapter Tests */,
C9BB479E1E7183B800F3F98C /* Libraries */,
C9BB479A1E71836100F3F98C /* Resources */,
);
path = "OpenVPN Adapter Tests";
sourceTree = "<group>";
};
C9BB479A1E71836100F3F98C /* Resources */ = {
isa = PBXGroup;
children = (
C9BB479B1E71836100F3F98C /* free_openvpn_udp.ovpn */,
);
path = Resources;
sourceTree = "<group>";
};
C9BB479D1E71837200F3F98C /* Adapter Tests */ = {
isa = PBXGroup;
children = (
C9BB47901E71821A00F3F98C /* OpenVPNAdapterTests.swift */,
);
name = "Adapter Tests";
sourceTree = "<group>";
};
C9BB479E1E7183B800F3F98C /* Libraries */ = {
isa = PBXGroup;
children = (
C9BB479F1E7183C200F3F98C /* Helpers */,
);
name = Libraries;
sourceTree = "<group>";
};
C9BB479F1E7183C200F3F98C /* Helpers */ = {
isa = PBXGroup;
children = (
C9BB47A01E7183CA00F3F98C /* Utils */,
);
name = Helpers;
sourceTree = "<group>";
};
C9BB47A01E7183CA00F3F98C /* Utils */ = {
isa = PBXGroup;
children = (
C9BB47A11E7183DB00F3F98C /* Bundle.swift */,
);
name = Utils;
sourceTree = "<group>";
};
/* 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 */
};

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:/Users/ss.abramchuk/Sources.localized/open-source.localized/openvpn-ios-client/OpenVPN Client.xcodeproj">
</FileRef>
</Workspace>

View File

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0820"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C9BB475B1E71663A00F3F98C"
BuildableName = "OpenVPNAdapter.framework"
BlueprintName = "OpenVPN Adapter"
ReferencedContainer = "container:OpenVPN Client.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C9BB475B1E71663A00F3F98C"
BuildableName = "OpenVPNAdapter.framework"
BlueprintName = "OpenVPN Adapter"
ReferencedContainer = "container:OpenVPN Client.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C9BB475B1E71663A00F3F98C"
BuildableName = "OpenVPNAdapter.framework"
BlueprintName = "OpenVPN Adapter"
ReferencedContainer = "container:OpenVPN Client.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:OpenVPN iOS Client.xcodeproj">
</FileRef>
</Workspace>

View File

@@ -5,7 +5,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>OpenVPN Tunnel Provider</string>
<string>OpenVPN iOS Tunnel Provider</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>

View File

@@ -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()
}
}