diff --git a/AppCheck.xcodeproj/project.pbxproj b/AppCheck.xcodeproj/project.pbxproj index 8a13156..e3451e7 100644 --- a/AppCheck.xcodeproj/project.pbxproj +++ b/AppCheck.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 51; objects = { /* Begin PBXBuildFile section */ @@ -18,27 +18,21 @@ 543CDB2023EEE61900B7F323 /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 543CDB1F23EEE61900B7F323 /* PacketTunnelProvider.swift */; }; 543CDB2523EEE61900B7F323 /* GlassVPN.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 543CDB1D23EEE61900B7F323 /* GlassVPN.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 544C95262407B1C700AB89D0 /* SharedState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 544C95252407B1C700AB89D0 /* SharedState.swift */; }; - 546063D023FC2565008F505A /* CocoaAsyncSocket.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B723FC254C008F505A /* CocoaAsyncSocket.framework */; }; - 546063D123FC2565008F505A /* CocoaAsyncSocket.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B723FC254C008F505A /* CocoaAsyncSocket.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 546063D223FC2565008F505A /* CocoaLumberjack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B523FC254B008F505A /* CocoaLumberjack.framework */; }; - 546063D323FC2565008F505A /* CocoaLumberjack.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B523FC254B008F505A /* CocoaLumberjack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 546063D423FC2565008F505A /* CocoaLumberjackSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B423FC254B008F505A /* CocoaLumberjackSwift.framework */; }; - 546063D523FC2565008F505A /* CocoaLumberjackSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B423FC254B008F505A /* CocoaLumberjackSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 546063D623FC2565008F505A /* lwip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B623FC254B008F505A /* lwip.framework */; }; - 546063D723FC2565008F505A /* lwip.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B623FC254B008F505A /* lwip.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 546063D823FC2565008F505A /* MMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B923FC254C008F505A /* MMDB.framework */; }; - 546063D923FC2565008F505A /* MMDB.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B923FC254C008F505A /* MMDB.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 546063DA23FC2565008F505A /* NEKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B223FC254B008F505A /* NEKit.framework */; }; - 546063DB23FC2565008F505A /* NEKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B223FC254B008F505A /* NEKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 546063DC23FC2565008F505A /* Resolver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063BA23FC254C008F505A /* Resolver.framework */; }; - 546063DD23FC2565008F505A /* Resolver.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 546063BA23FC254C008F505A /* Resolver.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 546063DE23FC2565008F505A /* Sodium.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B123FC254B008F505A /* Sodium.framework */; }; - 546063DF23FC2565008F505A /* Sodium.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B123FC254B008F505A /* Sodium.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 546063E023FC2565008F505A /* tun2socks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B323FC254B008F505A /* tun2socks.framework */; }; - 546063E123FC2565008F505A /* tun2socks.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B323FC254B008F505A /* tun2socks.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 546063E223FC2565008F505A /* Yaml.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B823FC254C008F505A /* Yaml.framework */; }; - 546063E323FC2565008F505A /* Yaml.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B823FC254C008F505A /* Yaml.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 546063E523FEFAFE008F505A /* SQDB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54B7562223D7B2DC008F0C41 /* SQDB.swift */; }; + 54751E342422FC9E00168273 /* NEKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B223FC254B008F505A /* NEKit.framework */; }; + 54751E372422FCC200168273 /* MMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B923FC254C008F505A /* MMDB.framework */; }; + 54751E392422FCC300168273 /* lwip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B623FC254B008F505A /* lwip.framework */; }; + 54751E3B2422FCC500168273 /* CocoaLumberjackSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B423FC254B008F505A /* CocoaLumberjackSwift.framework */; }; + 54751E3D2422FCC700168273 /* CocoaLumberjack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B523FC254B008F505A /* CocoaLumberjack.framework */; }; + 54751E412422FCCA00168273 /* Resolver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063BA23FC254C008F505A /* Resolver.framework */; }; + 54751E432422FCCC00168273 /* Sodium.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B123FC254B008F505A /* Sodium.framework */; }; + 54751E452422FCCD00168273 /* tun2socks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B323FC254B008F505A /* tun2socks.framework */; }; + 54751E472422FCCF00168273 /* Yaml.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B823FC254C008F505A /* Yaml.framework */; }; + 54751E492422FD3500168273 /* CocoaAsyncSocket.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546063B723FC254C008F505A /* CocoaAsyncSocket.framework */; }; + 54751E4E242303F300168273 /* output.xcfilelist in Resources */ = {isa = PBXBuildFile; fileRef = 54751E4C242303F200168273 /* output.xcfilelist */; }; + 54751E4F242303F300168273 /* input.xcfilelist in Resources */ = {isa = PBXBuildFile; fileRef = 54751E4D242303F200168273 /* input.xcfilelist */; }; + 54751E512423955100168273 /* FileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54751E502423955000168273 /* FileManager.swift */; }; + 54751E522423955100168273 /* FileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54751E502423955000168273 /* FileManager.swift */; }; 54953E3323DC752E0054345C /* SQDB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54B7562223D7B2DC008F0C41 /* SQDB.swift */; }; 54953E5F23DEBE840054345C /* TVCDomains.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54953E5E23DEBE840054345C /* TVCDomains.swift */; }; 54953E6123E0D69A0054345C /* TVCHosts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54953E6023E0D69A0054345C /* TVCHosts.swift */; }; @@ -78,26 +72,6 @@ name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; }; - 546063E423FC2565008F505A /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 546063D923FC2565008F505A /* MMDB.framework in Embed Frameworks */, - 546063D323FC2565008F505A /* CocoaLumberjack.framework in Embed Frameworks */, - 546063D123FC2565008F505A /* CocoaAsyncSocket.framework in Embed Frameworks */, - 546063D723FC2565008F505A /* lwip.framework in Embed Frameworks */, - 546063E123FC2565008F505A /* tun2socks.framework in Embed Frameworks */, - 546063E323FC2565008F505A /* Yaml.framework in Embed Frameworks */, - 546063DD23FC2565008F505A /* Resolver.framework in Embed Frameworks */, - 546063DF23FC2565008F505A /* Sodium.framework in Embed Frameworks */, - 546063DB23FC2565008F505A /* NEKit.framework in Embed Frameworks */, - 546063D523FC2565008F505A /* CocoaLumberjackSwift.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -127,6 +101,9 @@ 546063B823FC254C008F505A /* Yaml.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Yaml.framework; path = Carthage/Build/iOS/Yaml.framework; sourceTree = ""; }; 546063B923FC254C008F505A /* MMDB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MMDB.framework; path = Carthage/Build/iOS/MMDB.framework; sourceTree = ""; }; 546063BA23FC254C008F505A /* Resolver.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Resolver.framework; path = Carthage/Build/iOS/Resolver.framework; sourceTree = ""; }; + 54751E4C242303F200168273 /* output.xcfilelist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcfilelist; path = output.xcfilelist; sourceTree = ""; }; + 54751E4D242303F200168273 /* input.xcfilelist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcfilelist; path = input.xcfilelist; sourceTree = ""; }; + 54751E502423955000168273 /* FileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileManager.swift; sourceTree = ""; }; 548B1F9423D338EC005B047C /* main.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = main.entitlements; sourceTree = ""; }; 54953E5E23DEBE840054345C /* TVCDomains.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TVCDomains.swift; sourceTree = ""; }; 54953E6023E0D69A0054345C /* TVCHosts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TVCHosts.swift; sourceTree = ""; }; @@ -157,16 +134,16 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 546063DC23FC2565008F505A /* Resolver.framework in Frameworks */, - 546063D423FC2565008F505A /* CocoaLumberjackSwift.framework in Frameworks */, - 546063D023FC2565008F505A /* CocoaAsyncSocket.framework in Frameworks */, - 546063D223FC2565008F505A /* CocoaLumberjack.framework in Frameworks */, - 546063DE23FC2565008F505A /* Sodium.framework in Frameworks */, - 546063D623FC2565008F505A /* lwip.framework in Frameworks */, - 546063D823FC2565008F505A /* MMDB.framework in Frameworks */, - 546063E223FC2565008F505A /* Yaml.framework in Frameworks */, - 546063E023FC2565008F505A /* tun2socks.framework in Frameworks */, - 546063DA23FC2565008F505A /* NEKit.framework in Frameworks */, + 54751E372422FCC200168273 /* MMDB.framework in Frameworks */, + 54751E3D2422FCC700168273 /* CocoaLumberjack.framework in Frameworks */, + 54751E492422FD3500168273 /* CocoaAsyncSocket.framework in Frameworks */, + 54751E3B2422FCC500168273 /* CocoaLumberjackSwift.framework in Frameworks */, + 54751E342422FC9E00168273 /* NEKit.framework in Frameworks */, + 54751E472422FCCF00168273 /* Yaml.framework in Frameworks */, + 54751E392422FCC300168273 /* lwip.framework in Frameworks */, + 54751E452422FCCD00168273 /* tun2socks.framework in Frameworks */, + 54751E412422FCCA00168273 /* Resolver.framework in Frameworks */, + 54751E432422FCCC00168273 /* Sodium.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -263,6 +240,8 @@ 543CDB1E23EEE61900B7F323 /* GlassVPN */ = { isa = PBXGroup; children = ( + 54751E4D242303F200168273 /* input.xcfilelist */, + 54751E4C242303F200168273 /* output.xcfilelist */, 543CDB1F23EEE61900B7F323 /* PacketTunnelProvider.swift */, 543CDB2123EEE61900B7F323 /* Info.plist */, 543CDB2223EEE61900B7F323 /* GlassVPN.entitlements */, @@ -296,6 +275,7 @@ 54B345AA241BBA5B004C53CC /* AlertSheet.swift */, 54B345AC241BBB00004C53CC /* GroupedDomain.swift */, 54B34595240F0513004C53CC /* TableView.swift */, + 54751E502423955000168273 /* FileManager.swift */, ); path = Extensions; sourceTree = ""; @@ -320,7 +300,6 @@ 541AC5D12399498A00A769D7 /* Frameworks */, 541AC5D22399498A00A769D7 /* Resources */, 541AC5FD239949BE00A769D7 /* Embed App Extensions */, - 54C056E023EAFBDF00214A3F /* ShellScript */, ); buildRules = ( ); @@ -341,7 +320,7 @@ 543CDB1923EEE61900B7F323 /* Sources */, 543CDB1A23EEE61900B7F323 /* Frameworks */, 543CDB1B23EEE61900B7F323 /* Resources */, - 546063E423FC2565008F505A /* Embed Frameworks */, + 54751E4B242302EE00168273 /* ShellScript */, ); buildRules = ( ); @@ -417,28 +396,32 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 54751E4E242303F300168273 /* output.xcfilelist in Resources */, + 54751E4F242303F300168273 /* input.xcfilelist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 54C056E023EAFBDF00214A3F /* ShellScript */ = { + 54751E4B242302EE00168273 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "$(SRCROOT)/GlassVPN/input.xcfilelist", ); inputPaths = ( ); outputFileListPaths = ( + "$(SRCROOT)/GlassVPN/output.xcfilelist", ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#agvtool next-version -all\n"; + shellScript = "~/bin/official/carthage copy-frameworks\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -456,6 +439,7 @@ 54953E3323DC752E0054345C /* SQDB.swift in Sources */, 54953E6123E0D69A0054345C /* TVCHosts.swift in Sources */, 540C6457240D929300E948F9 /* EditableRows.swift in Sources */, + 54751E512423955100168273 /* FileManager.swift in Sources */, 542E2A9A24051556001462DC /* TVCSettings.swift in Sources */, 54953E5F23DEBE840054345C /* TVCDomains.swift in Sources */, 54C056DB23E9E36E00214A3F /* AppInfoType.swift in Sources */, @@ -472,6 +456,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 54751E522423955100168273 /* FileManager.swift in Sources */, 543CDB2023EEE61900B7F323 /* PacketTunnelProvider.swift in Sources */, 546063E523FEFAFE008F505A /* SQDB.swift in Sources */, ); @@ -568,7 +553,6 @@ SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -625,7 +609,6 @@ SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; @@ -636,11 +619,7 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = main/main.entitlements; - CURRENT_PROJECT_VERSION = 7; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); + CURRENT_PROJECT_VERSION = 9; INFOPLIST_FILE = main/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -650,7 +629,6 @@ PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck"; PRODUCT_NAME = AppCheck; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; }; name = Debug; }; @@ -660,11 +638,7 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = main/main.entitlements; - CURRENT_PROJECT_VERSION = 7; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); + CURRENT_PROJECT_VERSION = 9; INFOPLIST_FILE = main/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -674,7 +648,6 @@ PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck"; PRODUCT_NAME = AppCheck; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; }; name = Release; }; @@ -683,21 +656,19 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements; CODE_SIGN_STYLE = Automatic; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); + CURRENT_PROJECT_VERSION = 9; + FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/Carthage/Build/iOS"; INFOPLIST_FILE = GlassVPN/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); + MARKETING_VERSION = 1.0.0; PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -706,21 +677,19 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements; CODE_SIGN_STYLE = Automatic; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); + CURRENT_PROJECT_VERSION = 9; + FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/Carthage/Build/iOS"; INFOPLIST_FILE = GlassVPN/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); + MARKETING_VERSION = 1.0.0; PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; diff --git a/AppCheck.xcodeproj/xcshareddata/xcschemes/AppCheck.xcscheme b/AppCheck.xcodeproj/xcshareddata/xcschemes/AppCheck.xcscheme index 2dd6982..d280382 100644 --- a/AppCheck.xcodeproj/xcshareddata/xcschemes/AppCheck.xcscheme +++ b/AppCheck.xcodeproj/xcshareddata/xcschemes/AppCheck.xcscheme @@ -73,5 +73,14 @@ + + + + + + diff --git a/Cartfile.resolved b/Cartfile.resolved index 6f05e5f..07456a3 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,7 +1,7 @@ github "CocoaLumberjack/CocoaLumberjack" "3.6.1" github "behrang/YamlSwift" "3.4.3" github "lexrus/MMDB-Swift" "0.5.0" -github "robbiehanson/CocoaAsyncSocket" "7.6.3" +github "robbiehanson/CocoaAsyncSocket" "7.6.4" github "zhuhaow/NEKit" "0.15.0" github "zhuhaow/Resolver" "0.2.0" github "zhuhaow/Sodium-framework" "v1.0.10.1" diff --git a/GlassVPN/Info.plist b/GlassVPN/Info.plist index a725338..b05b9c6 100644 --- a/GlassVPN/Info.plist +++ b/GlassVPN/Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 1.0 + $(MARKETING_VERSION) CFBundleVersion - 1 + $(CURRENT_PROJECT_VERSION) NSExtension NSExtensionPointIdentifier diff --git a/GlassVPN/PacketTunnelProvider.swift b/GlassVPN/PacketTunnelProvider.swift index af36f1c..fd310a8 100644 --- a/GlassVPN/PacketTunnelProvider.swift +++ b/GlassVPN/PacketTunnelProvider.swift @@ -38,11 +38,15 @@ class PacketTunnelProvider: NEPacketTunnelProvider { let proxyServerPort: UInt16 = 9090 let proxyServerAddress = "127.0.0.1" var proxyServer: GCDHTTPProxyServer! + + func reloadDomainFilter() { + domainFilters = db?.loadFilters() ?? [:] + } override func startTunnel(options: [String : NSObject]?, completionHandler: @escaping (Error?) -> Void) { ZLog("startTunnel") do { - db = try SQLiteDatabase.open(path: DB_PATH) + db = try SQLiteDatabase.open() try db!.createTable(table: DNSQuery.self) } catch { completionHandler(error) @@ -53,8 +57,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider { } proxyServer = nil - // Load domain filter - domainFilters = db!.loadFilters() ?? [:] + reloadDomainFilter() // Create proxy let settings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: proxyServerAddress) @@ -111,9 +114,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider { override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) { ZLog("handleAppMessage") - if let handler = completionHandler { - handler(messageData) - } + reloadDomainFilter() } } diff --git a/GlassVPN/input.xcfilelist b/GlassVPN/input.xcfilelist new file mode 100644 index 0000000..cdaaacc --- /dev/null +++ b/GlassVPN/input.xcfilelist @@ -0,0 +1,10 @@ +$(SRCROOT)/Carthage/Build/iOS/CocoaAsyncSocket.framework +$(SRCROOT)/Carthage/Build/iOS/CocoaLumberjack.framework +$(SRCROOT)/Carthage/Build/iOS/CocoaLumberjackSwift.framework +$(SRCROOT)/Carthage/Build/iOS/lwip.framework +$(SRCROOT)/Carthage/Build/iOS/MMDB.framework +$(SRCROOT)/Carthage/Build/iOS/NEKit.framework +$(SRCROOT)/Carthage/Build/iOS/Resolver.framework +$(SRCROOT)/Carthage/Build/iOS/Sodium.framework +$(SRCROOT)/Carthage/Build/iOS/tun2socks.framework +$(SRCROOT)/Carthage/Build/iOS/Yaml.framework diff --git a/GlassVPN/output.xcfilelist b/GlassVPN/output.xcfilelist new file mode 100644 index 0000000..736acfe --- /dev/null +++ b/GlassVPN/output.xcfilelist @@ -0,0 +1,10 @@ +$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/CocoaAsyncSocket.framework +$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/CocoaLumberjack.framework +$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/CocoaLumberjackSwift.framework +$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/lwip.framework +$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/MMDB.framework +$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/NEKit.framework +$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Resolver.framework +$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Sodium.framework +$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/tun2socks.framework +$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Yaml.framework diff --git a/main/AppDelegate.swift b/main/AppDelegate.swift index 4281712..3c0e1da 100644 --- a/main/AppDelegate.swift +++ b/main/AppDelegate.swift @@ -12,10 +12,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { if UserDefaults.standard.bool(forKey: "kill_db") { UserDefaults.standard.set(false, forKey: "kill_db") - SQLiteDatabase.destroyDatabase(path: DB_PATH) + SQLiteDatabase.destroyDatabase() } do { - let db = try SQLiteDatabase.open(path: DB_PATH) + let db = try SQLiteDatabase.open() try db.createTable(table: DNSQuery.self) try db.createTable(table: DNSFilter.self) } catch {} @@ -27,6 +27,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { self.postVPNState() } NSNotification.Name.NEVPNStatusDidChange.observe(call: #selector(vpnStatusChanged(_:)), on: self) + NotifyFilterChanged.observe(call: #selector(filterDidChange), on: self) return true } @@ -34,6 +35,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate { postRawVPNState((notification.object as? NETunnelProviderSession)?.status ?? .invalid) } + @objc private func filterDidChange() { + // Notify VPN extension about changes + if let session = self.managerVPN?.connection as? NETunnelProviderSession, + session.status == .connected { + try? session.sendProviderMessage("filter-update".data(using: .ascii)!, responseHandler: nil) + } + } + func setProxyEnabled(_ newState: Bool) { guard let mgr = self.managerVPN else { self.createNewVPN { manager in @@ -42,7 +51,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } return } - let state = mgr.isEnabled && (mgr.connection.status == NEVPNStatus.connected) + let state = mgr.isEnabled && (mgr.connection.status == .connected) if state != newState { self.updateVPN({ mgr.isEnabled = true }) { newState ? try? mgr.connection.startVPNTunnel() : mgr.connection.stopVPNTunnel() diff --git a/main/DB/DBWrapper.swift b/main/DB/DBWrapper.swift index 6dc40af..7eb24e6 100644 --- a/main/DB/DBWrapper.swift +++ b/main/DB/DBWrapper.swift @@ -65,7 +65,7 @@ class DBWrapper { let list = AppDB?.loadFilters() ?? [:] Q.async(flags: .barrier) { self.dataF = list - NotifyFilterChanged.postOnMainThread() + NotifyFilterChanged.postAsyncMain() } } @@ -82,7 +82,7 @@ class DBWrapper { self.latestModification = max(parent.lastModified, self.latestModification) } } - NotifyLogHistoryReset.postOnMainThread() + NotifyLogHistoryReset.postAsyncMain() } } @@ -215,7 +215,7 @@ class DBWrapper { self.dataB_delegate(self.dataA[i].domain)?.replaceRow(self.dataB[i][u], at: u) } } - NotifyFilterChanged.postOnMainThread() + NotifyFilterChanged.postAsyncMain() } } diff --git a/main/DB/SQDB.swift b/main/DB/SQDB.swift index 29319dc..8168e78 100644 --- a/main/DB/SQDB.swift +++ b/main/DB/SQDB.swift @@ -1,10 +1,6 @@ import Foundation import SQLite3 -let exportPath = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) -let basePath = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.de.uni-bamberg.psi.AppCheck") -let DB_PATH = basePath!.appendingPathComponent("dns-logs.sqlite").relativePath - typealias Timestamp = Int64 struct GroupedDomain { let domain: String, total: Int32, blocked: Int32, lastModified: Timestamp @@ -29,7 +25,7 @@ enum SQLiteError: Error { // MARK: - SQLiteDatabase -var AppDB: SQLiteDatabase? { get { try? SQLiteDatabase.open(path: DB_PATH) } } +var AppDB: SQLiteDatabase? { get { try? SQLiteDatabase.open() } } class SQLiteDatabase { private let dbPointer: OpaquePointer? @@ -49,10 +45,9 @@ class SQLiteDatabase { deinit { sqlite3_close(dbPointer) -// SQLiteDatabase.destroyDatabase(path: DB_PATH) } - static func destroyDatabase(path: String) { + static func destroyDatabase(path: String = URL.internalDB().relativePath) { if FileManager.default.fileExists(atPath: path) { do { try FileManager.default.removeItem(atPath: path) } catch { print("Could not destroy database file: \(path)") } @@ -62,13 +57,13 @@ class SQLiteDatabase { // static func export() throws -> URL { // let fmt = DateFormatter() // fmt.dateFormat = "yyyy-MM-dd" -// let dest = exportPath.appendingPathComponent("\(fmt.string(from: Date()))-dns-log.sqlite") +// let dest = FileManager.default.exportDir().appendingPathComponent("\(fmt.string(from: Date()))-dns-log.sqlite") // try? FileManager.default.removeItem(at: dest) -// try FileManager.default.copyItem(atPath: DB_PATH, toPath: dest.relativePath) +// try FileManager.default.copyItem(at: FileManager.default.internalDB(), to: dest) // return dest // } - static func open(path: String) throws -> SQLiteDatabase { + static func open(path: String = URL.internalDB().relativePath) throws -> SQLiteDatabase { var db: OpaquePointer? //sqlite3_open_v2(path, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_SHAREDCACHE, nil) if sqlite3_open(path, &db) == SQLITE_OK { diff --git a/main/Extensions/FileManager.swift b/main/Extensions/FileManager.swift new file mode 100644 index 0000000..b7b4fd5 --- /dev/null +++ b/main/Extensions/FileManager.swift @@ -0,0 +1,23 @@ +import Foundation + +fileprivate extension FileManager { + func exportDir() -> URL { + try! url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) + } + func appGroupDir() -> URL { + containerURL(forSecurityApplicationGroupIdentifier: "group.de.uni-bamberg.psi.AppCheck")! + } + func internalDB() -> URL { + appGroupDir().appendingPathComponent("dns-logs.sqlite") + } + func appGroupIPC() -> URL { + appGroupDir().appendingPathComponent("data-exchange.dat") + } +} + +extension URL { + static func exportDir() -> URL { FileManager.default.exportDir() } + static func appGroupDir() -> URL { FileManager.default.appGroupDir() } + static func internalDB() -> URL { FileManager.default.internalDB() } + static func appGroupIPC() -> URL { FileManager.default.appGroupIPC() } +} diff --git a/main/Extensions/Notifications.swift b/main/Extensions/Notifications.swift index f7695cc..dda4929 100644 --- a/main/Extensions/Notifications.swift +++ b/main/Extensions/Notifications.swift @@ -9,7 +9,7 @@ extension NSNotification.Name { func post(_ obj: Any? = nil) { NotificationCenter.default.post(name: self, object: obj) } - func postOnMainThread(_ obj: Any? = nil) { + func postAsyncMain(_ obj: Any? = nil) { DispatchQueue.main.async { NotificationCenter.default.post(name: self, object: obj) } } /// You are responsible for removing the returned object in a `deinit` block. diff --git a/main/Info.plist b/main/Info.plist index 223868a..4692985 100644 --- a/main/Info.plist +++ b/main/Info.plist @@ -17,9 +17,13 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 7 + $(CURRENT_PROJECT_VERSION) LSRequiresIPhoneOS + LSSupportsOpeningDocumentsInPlace + + UIFileSharingEnabled + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile @@ -41,9 +45,5 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIFileSharingEnabled - - LSSupportsOpeningDocumentsInPlace - diff --git a/main/Settings/TVCSettings.swift b/main/Settings/TVCSettings.swift index f4f8634..f8bf742 100644 --- a/main/Settings/TVCSettings.swift +++ b/main/Settings/TVCSettings.swift @@ -31,10 +31,10 @@ class TVCSettings: UITableViewController { // TODO: export partly? // TODO: show header-banner of success // Share Sheet - let sheet = UIActivityViewController(activityItems: [URL(fileURLWithPath: DB_PATH)], applicationActivities: nil) + let sheet = UIActivityViewController(activityItems: [URL.internalDB()], applicationActivities: nil) self.present(sheet, animated: true) // Save to Files app -// self.present(UIDocumentPickerViewController(url: URL(fileURLWithPath: DB_PATH), in: .exportToService), animated: true) +// self.present(UIDocumentPickerViewController(url: FileManager.default.internalDB(), in: .exportToService), animated: true) // Shows Alert and exports to Documents directory // AskAlert(title: "Export results?", text: """ // This action will copy the internal database to the app's local Documents directory. You can use the Files app to access the database file. diff --git a/main/TVC Extensions/EditableRows.swift b/main/TVC Extensions/EditableRows.swift index 156f8de..1aab923 100644 --- a/main/TVC Extensions/EditableRows.swift +++ b/main/TVC Extensions/EditableRows.swift @@ -45,7 +45,9 @@ protocol EditActionsIgnoreBlockDelete : EditableRows { extension EditActionsIgnoreBlockDelete where Self: UITableViewController { func editableRowActions(_ index: IndexPath) -> [(RowAction, String)] { let x = dataSource[index.row] - QLog.m(x.domain) + if x.domain.starts(with: "#") { + return [(.delete, "Delete")] + } let b = x.options?.contains(.blocked) ?? false let i = x.options?.contains(.ignored) ?? false return [(.delete, "Delete"), (.block, b ? "Unblock" : "Block"), (.ignore, i ? "Unignore" : "Ignore")]