Carthage copy-frameworks + Filter changed extension reload
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 50;
|
objectVersion = 51;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
@@ -18,27 +18,21 @@
|
|||||||
543CDB2023EEE61900B7F323 /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 543CDB1F23EEE61900B7F323 /* PacketTunnelProvider.swift */; };
|
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, ); }; };
|
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 */; };
|
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 */; };
|
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 */; };
|
54953E3323DC752E0054345C /* SQDB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54B7562223D7B2DC008F0C41 /* SQDB.swift */; };
|
||||||
54953E5F23DEBE840054345C /* TVCDomains.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54953E5E23DEBE840054345C /* TVCDomains.swift */; };
|
54953E5F23DEBE840054345C /* TVCDomains.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54953E5E23DEBE840054345C /* TVCDomains.swift */; };
|
||||||
54953E6123E0D69A0054345C /* TVCHosts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54953E6023E0D69A0054345C /* TVCHosts.swift */; };
|
54953E6123E0D69A0054345C /* TVCHosts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54953E6023E0D69A0054345C /* TVCHosts.swift */; };
|
||||||
@@ -78,26 +72,6 @@
|
|||||||
name = "Embed App Extensions";
|
name = "Embed App Extensions";
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
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 */
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXFileReference 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 = "<group>"; };
|
546063B823FC254C008F505A /* Yaml.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Yaml.framework; path = Carthage/Build/iOS/Yaml.framework; sourceTree = "<group>"; };
|
||||||
546063B923FC254C008F505A /* MMDB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MMDB.framework; path = Carthage/Build/iOS/MMDB.framework; sourceTree = "<group>"; };
|
546063B923FC254C008F505A /* MMDB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MMDB.framework; path = Carthage/Build/iOS/MMDB.framework; sourceTree = "<group>"; };
|
||||||
546063BA23FC254C008F505A /* Resolver.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Resolver.framework; path = Carthage/Build/iOS/Resolver.framework; sourceTree = "<group>"; };
|
546063BA23FC254C008F505A /* Resolver.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Resolver.framework; path = Carthage/Build/iOS/Resolver.framework; sourceTree = "<group>"; };
|
||||||
|
54751E4C242303F200168273 /* output.xcfilelist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcfilelist; path = output.xcfilelist; sourceTree = "<group>"; };
|
||||||
|
54751E4D242303F200168273 /* input.xcfilelist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcfilelist; path = input.xcfilelist; sourceTree = "<group>"; };
|
||||||
|
54751E502423955000168273 /* FileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileManager.swift; sourceTree = "<group>"; };
|
||||||
548B1F9423D338EC005B047C /* main.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = main.entitlements; sourceTree = "<group>"; };
|
548B1F9423D338EC005B047C /* main.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = main.entitlements; sourceTree = "<group>"; };
|
||||||
54953E5E23DEBE840054345C /* TVCDomains.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TVCDomains.swift; sourceTree = "<group>"; };
|
54953E5E23DEBE840054345C /* TVCDomains.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TVCDomains.swift; sourceTree = "<group>"; };
|
||||||
54953E6023E0D69A0054345C /* TVCHosts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TVCHosts.swift; sourceTree = "<group>"; };
|
54953E6023E0D69A0054345C /* TVCHosts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TVCHosts.swift; sourceTree = "<group>"; };
|
||||||
@@ -157,16 +134,16 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
546063DC23FC2565008F505A /* Resolver.framework in Frameworks */,
|
54751E372422FCC200168273 /* MMDB.framework in Frameworks */,
|
||||||
546063D423FC2565008F505A /* CocoaLumberjackSwift.framework in Frameworks */,
|
54751E3D2422FCC700168273 /* CocoaLumberjack.framework in Frameworks */,
|
||||||
546063D023FC2565008F505A /* CocoaAsyncSocket.framework in Frameworks */,
|
54751E492422FD3500168273 /* CocoaAsyncSocket.framework in Frameworks */,
|
||||||
546063D223FC2565008F505A /* CocoaLumberjack.framework in Frameworks */,
|
54751E3B2422FCC500168273 /* CocoaLumberjackSwift.framework in Frameworks */,
|
||||||
546063DE23FC2565008F505A /* Sodium.framework in Frameworks */,
|
54751E342422FC9E00168273 /* NEKit.framework in Frameworks */,
|
||||||
546063D623FC2565008F505A /* lwip.framework in Frameworks */,
|
54751E472422FCCF00168273 /* Yaml.framework in Frameworks */,
|
||||||
546063D823FC2565008F505A /* MMDB.framework in Frameworks */,
|
54751E392422FCC300168273 /* lwip.framework in Frameworks */,
|
||||||
546063E223FC2565008F505A /* Yaml.framework in Frameworks */,
|
54751E452422FCCD00168273 /* tun2socks.framework in Frameworks */,
|
||||||
546063E023FC2565008F505A /* tun2socks.framework in Frameworks */,
|
54751E412422FCCA00168273 /* Resolver.framework in Frameworks */,
|
||||||
546063DA23FC2565008F505A /* NEKit.framework in Frameworks */,
|
54751E432422FCCC00168273 /* Sodium.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -263,6 +240,8 @@
|
|||||||
543CDB1E23EEE61900B7F323 /* GlassVPN */ = {
|
543CDB1E23EEE61900B7F323 /* GlassVPN */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
54751E4D242303F200168273 /* input.xcfilelist */,
|
||||||
|
54751E4C242303F200168273 /* output.xcfilelist */,
|
||||||
543CDB1F23EEE61900B7F323 /* PacketTunnelProvider.swift */,
|
543CDB1F23EEE61900B7F323 /* PacketTunnelProvider.swift */,
|
||||||
543CDB2123EEE61900B7F323 /* Info.plist */,
|
543CDB2123EEE61900B7F323 /* Info.plist */,
|
||||||
543CDB2223EEE61900B7F323 /* GlassVPN.entitlements */,
|
543CDB2223EEE61900B7F323 /* GlassVPN.entitlements */,
|
||||||
@@ -296,6 +275,7 @@
|
|||||||
54B345AA241BBA5B004C53CC /* AlertSheet.swift */,
|
54B345AA241BBA5B004C53CC /* AlertSheet.swift */,
|
||||||
54B345AC241BBB00004C53CC /* GroupedDomain.swift */,
|
54B345AC241BBB00004C53CC /* GroupedDomain.swift */,
|
||||||
54B34595240F0513004C53CC /* TableView.swift */,
|
54B34595240F0513004C53CC /* TableView.swift */,
|
||||||
|
54751E502423955000168273 /* FileManager.swift */,
|
||||||
);
|
);
|
||||||
path = Extensions;
|
path = Extensions;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -320,7 +300,6 @@
|
|||||||
541AC5D12399498A00A769D7 /* Frameworks */,
|
541AC5D12399498A00A769D7 /* Frameworks */,
|
||||||
541AC5D22399498A00A769D7 /* Resources */,
|
541AC5D22399498A00A769D7 /* Resources */,
|
||||||
541AC5FD239949BE00A769D7 /* Embed App Extensions */,
|
541AC5FD239949BE00A769D7 /* Embed App Extensions */,
|
||||||
54C056E023EAFBDF00214A3F /* ShellScript */,
|
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@@ -341,7 +320,7 @@
|
|||||||
543CDB1923EEE61900B7F323 /* Sources */,
|
543CDB1923EEE61900B7F323 /* Sources */,
|
||||||
543CDB1A23EEE61900B7F323 /* Frameworks */,
|
543CDB1A23EEE61900B7F323 /* Frameworks */,
|
||||||
543CDB1B23EEE61900B7F323 /* Resources */,
|
543CDB1B23EEE61900B7F323 /* Resources */,
|
||||||
546063E423FC2565008F505A /* Embed Frameworks */,
|
54751E4B242302EE00168273 /* ShellScript */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@@ -417,28 +396,32 @@
|
|||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
54751E4E242303F300168273 /* output.xcfilelist in Resources */,
|
||||||
|
54751E4F242303F300168273 /* input.xcfilelist in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
54C056E023EAFBDF00214A3F /* ShellScript */ = {
|
54751E4B242302EE00168273 /* ShellScript */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
);
|
);
|
||||||
inputFileListPaths = (
|
inputFileListPaths = (
|
||||||
|
"$(SRCROOT)/GlassVPN/input.xcfilelist",
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
);
|
);
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
|
"$(SRCROOT)/GlassVPN/output.xcfilelist",
|
||||||
);
|
);
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "#agvtool next-version -all\n";
|
shellScript = "~/bin/official/carthage copy-frameworks\n";
|
||||||
};
|
};
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
@@ -456,6 +439,7 @@
|
|||||||
54953E3323DC752E0054345C /* SQDB.swift in Sources */,
|
54953E3323DC752E0054345C /* SQDB.swift in Sources */,
|
||||||
54953E6123E0D69A0054345C /* TVCHosts.swift in Sources */,
|
54953E6123E0D69A0054345C /* TVCHosts.swift in Sources */,
|
||||||
540C6457240D929300E948F9 /* EditableRows.swift in Sources */,
|
540C6457240D929300E948F9 /* EditableRows.swift in Sources */,
|
||||||
|
54751E512423955100168273 /* FileManager.swift in Sources */,
|
||||||
542E2A9A24051556001462DC /* TVCSettings.swift in Sources */,
|
542E2A9A24051556001462DC /* TVCSettings.swift in Sources */,
|
||||||
54953E5F23DEBE840054345C /* TVCDomains.swift in Sources */,
|
54953E5F23DEBE840054345C /* TVCDomains.swift in Sources */,
|
||||||
54C056DB23E9E36E00214A3F /* AppInfoType.swift in Sources */,
|
54C056DB23E9E36E00214A3F /* AppInfoType.swift in Sources */,
|
||||||
@@ -472,6 +456,7 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
54751E522423955100168273 /* FileManager.swift in Sources */,
|
||||||
543CDB2023EEE61900B7F323 /* PacketTunnelProvider.swift in Sources */,
|
543CDB2023EEE61900B7F323 /* PacketTunnelProvider.swift in Sources */,
|
||||||
546063E523FEFAFE008F505A /* SQDB.swift in Sources */,
|
546063E523FEFAFE008F505A /* SQDB.swift in Sources */,
|
||||||
);
|
);
|
||||||
@@ -568,7 +553,6 @@
|
|||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -625,7 +609,6 @@
|
|||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_COMPILATION_MODE = wholemodule;
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
@@ -636,11 +619,7 @@
|
|||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = main/main.entitlements;
|
CODE_SIGN_ENTITLEMENTS = main/main.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 7;
|
CURRENT_PROJECT_VERSION = 9;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"$(PROJECT_DIR)/Carthage/Build/iOS",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = main/Info.plist;
|
INFOPLIST_FILE = main/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -650,7 +629,6 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck";
|
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck";
|
||||||
PRODUCT_NAME = AppCheck;
|
PRODUCT_NAME = AppCheck;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = 1;
|
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -660,11 +638,7 @@
|
|||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = main/main.entitlements;
|
CODE_SIGN_ENTITLEMENTS = main/main.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 7;
|
CURRENT_PROJECT_VERSION = 9;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"$(PROJECT_DIR)/Carthage/Build/iOS",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = main/Info.plist;
|
INFOPLIST_FILE = main/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -674,7 +648,6 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck";
|
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck";
|
||||||
PRODUCT_NAME = AppCheck;
|
PRODUCT_NAME = AppCheck;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = 1;
|
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -683,21 +656,19 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
CURRENT_PROJECT_VERSION = 9;
|
||||||
"$(inherited)",
|
FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/Carthage/Build/iOS";
|
||||||
"$(PROJECT_DIR)/Carthage/Build/iOS",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = GlassVPN/Info.plist;
|
INFOPLIST_FILE = GlassVPN/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
|
MARKETING_VERSION = 1.0.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -706,21 +677,19 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
CURRENT_PROJECT_VERSION = 9;
|
||||||
"$(inherited)",
|
FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/Carthage/Build/iOS";
|
||||||
"$(PROJECT_DIR)/Carthage/Build/iOS",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = GlassVPN/Info.plist;
|
INFOPLIST_FILE = GlassVPN/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
|
MARKETING_VERSION = 1.0.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -73,5 +73,14 @@
|
|||||||
<ArchiveAction
|
<ArchiveAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Release"
|
||||||
revealArchiveInOrganizer = "YES">
|
revealArchiveInOrganizer = "YES">
|
||||||
|
<PreActions>
|
||||||
|
<ExecutionAction
|
||||||
|
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
|
||||||
|
<ActionContent
|
||||||
|
title = "Run Script"
|
||||||
|
scriptText = "cd ${PROJECT_DIR} ; xcrun agvtool next-version -all ">
|
||||||
|
</ActionContent>
|
||||||
|
</ExecutionAction>
|
||||||
|
</PreActions>
|
||||||
</ArchiveAction>
|
</ArchiveAction>
|
||||||
</Scheme>
|
</Scheme>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
github "CocoaLumberjack/CocoaLumberjack" "3.6.1"
|
github "CocoaLumberjack/CocoaLumberjack" "3.6.1"
|
||||||
github "behrang/YamlSwift" "3.4.3"
|
github "behrang/YamlSwift" "3.4.3"
|
||||||
github "lexrus/MMDB-Swift" "0.5.0"
|
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/NEKit" "0.15.0"
|
||||||
github "zhuhaow/Resolver" "0.2.0"
|
github "zhuhaow/Resolver" "0.2.0"
|
||||||
github "zhuhaow/Sodium-framework" "v1.0.10.1"
|
github "zhuhaow/Sodium-framework" "v1.0.10.1"
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.0</string>
|
<string>$(MARKETING_VERSION)</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1</string>
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
<key>NSExtension</key>
|
<key>NSExtension</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSExtensionPointIdentifier</key>
|
<key>NSExtensionPointIdentifier</key>
|
||||||
|
|||||||
@@ -38,11 +38,15 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
|||||||
let proxyServerPort: UInt16 = 9090
|
let proxyServerPort: UInt16 = 9090
|
||||||
let proxyServerAddress = "127.0.0.1"
|
let proxyServerAddress = "127.0.0.1"
|
||||||
var proxyServer: GCDHTTPProxyServer!
|
var proxyServer: GCDHTTPProxyServer!
|
||||||
|
|
||||||
|
func reloadDomainFilter() {
|
||||||
|
domainFilters = db?.loadFilters() ?? [:]
|
||||||
|
}
|
||||||
|
|
||||||
override func startTunnel(options: [String : NSObject]?, completionHandler: @escaping (Error?) -> Void) {
|
override func startTunnel(options: [String : NSObject]?, completionHandler: @escaping (Error?) -> Void) {
|
||||||
ZLog("startTunnel")
|
ZLog("startTunnel")
|
||||||
do {
|
do {
|
||||||
db = try SQLiteDatabase.open(path: DB_PATH)
|
db = try SQLiteDatabase.open()
|
||||||
try db!.createTable(table: DNSQuery.self)
|
try db!.createTable(table: DNSQuery.self)
|
||||||
} catch {
|
} catch {
|
||||||
completionHandler(error)
|
completionHandler(error)
|
||||||
@@ -53,8 +57,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
|||||||
}
|
}
|
||||||
proxyServer = nil
|
proxyServer = nil
|
||||||
|
|
||||||
// Load domain filter
|
reloadDomainFilter()
|
||||||
domainFilters = db!.loadFilters() ?? [:]
|
|
||||||
|
|
||||||
// Create proxy
|
// Create proxy
|
||||||
let settings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: proxyServerAddress)
|
let settings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: proxyServerAddress)
|
||||||
@@ -111,9 +114,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
|||||||
|
|
||||||
override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) {
|
override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) {
|
||||||
ZLog("handleAppMessage")
|
ZLog("handleAppMessage")
|
||||||
if let handler = completionHandler {
|
reloadDomainFilter()
|
||||||
handler(messageData)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
10
GlassVPN/input.xcfilelist
Normal file
10
GlassVPN/input.xcfilelist
Normal file
@@ -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
|
||||||
10
GlassVPN/output.xcfilelist
Normal file
10
GlassVPN/output.xcfilelist
Normal file
@@ -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
|
||||||
@@ -12,10 +12,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||||
if UserDefaults.standard.bool(forKey: "kill_db") {
|
if UserDefaults.standard.bool(forKey: "kill_db") {
|
||||||
UserDefaults.standard.set(false, forKey: "kill_db")
|
UserDefaults.standard.set(false, forKey: "kill_db")
|
||||||
SQLiteDatabase.destroyDatabase(path: DB_PATH)
|
SQLiteDatabase.destroyDatabase()
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
let db = try SQLiteDatabase.open(path: DB_PATH)
|
let db = try SQLiteDatabase.open()
|
||||||
try db.createTable(table: DNSQuery.self)
|
try db.createTable(table: DNSQuery.self)
|
||||||
try db.createTable(table: DNSFilter.self)
|
try db.createTable(table: DNSFilter.self)
|
||||||
} catch {}
|
} catch {}
|
||||||
@@ -27,6 +27,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
self.postVPNState()
|
self.postVPNState()
|
||||||
}
|
}
|
||||||
NSNotification.Name.NEVPNStatusDidChange.observe(call: #selector(vpnStatusChanged(_:)), on: self)
|
NSNotification.Name.NEVPNStatusDidChange.observe(call: #selector(vpnStatusChanged(_:)), on: self)
|
||||||
|
NotifyFilterChanged.observe(call: #selector(filterDidChange), on: self)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,6 +35,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
postRawVPNState((notification.object as? NETunnelProviderSession)?.status ?? .invalid)
|
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) {
|
func setProxyEnabled(_ newState: Bool) {
|
||||||
guard let mgr = self.managerVPN else {
|
guard let mgr = self.managerVPN else {
|
||||||
self.createNewVPN { manager in
|
self.createNewVPN { manager in
|
||||||
@@ -42,7 +51,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let state = mgr.isEnabled && (mgr.connection.status == NEVPNStatus.connected)
|
let state = mgr.isEnabled && (mgr.connection.status == .connected)
|
||||||
if state != newState {
|
if state != newState {
|
||||||
self.updateVPN({ mgr.isEnabled = true }) {
|
self.updateVPN({ mgr.isEnabled = true }) {
|
||||||
newState ? try? mgr.connection.startVPNTunnel() : mgr.connection.stopVPNTunnel()
|
newState ? try? mgr.connection.startVPNTunnel() : mgr.connection.stopVPNTunnel()
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ class DBWrapper {
|
|||||||
let list = AppDB?.loadFilters() ?? [:]
|
let list = AppDB?.loadFilters() ?? [:]
|
||||||
Q.async(flags: .barrier) {
|
Q.async(flags: .barrier) {
|
||||||
self.dataF = list
|
self.dataF = list
|
||||||
NotifyFilterChanged.postOnMainThread()
|
NotifyFilterChanged.postAsyncMain()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,7 +82,7 @@ class DBWrapper {
|
|||||||
self.latestModification = max(parent.lastModified, self.latestModification)
|
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)
|
self.dataB_delegate(self.dataA[i].domain)?.replaceRow(self.dataB[i][u], at: u)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
NotifyFilterChanged.postOnMainThread()
|
NotifyFilterChanged.postAsyncMain()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import SQLite3
|
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
|
typealias Timestamp = Int64
|
||||||
struct GroupedDomain {
|
struct GroupedDomain {
|
||||||
let domain: String, total: Int32, blocked: Int32, lastModified: Timestamp
|
let domain: String, total: Int32, blocked: Int32, lastModified: Timestamp
|
||||||
@@ -29,7 +25,7 @@ enum SQLiteError: Error {
|
|||||||
|
|
||||||
// MARK: - SQLiteDatabase
|
// MARK: - SQLiteDatabase
|
||||||
|
|
||||||
var AppDB: SQLiteDatabase? { get { try? SQLiteDatabase.open(path: DB_PATH) } }
|
var AppDB: SQLiteDatabase? { get { try? SQLiteDatabase.open() } }
|
||||||
|
|
||||||
class SQLiteDatabase {
|
class SQLiteDatabase {
|
||||||
private let dbPointer: OpaquePointer?
|
private let dbPointer: OpaquePointer?
|
||||||
@@ -49,10 +45,9 @@ class SQLiteDatabase {
|
|||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
sqlite3_close(dbPointer)
|
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) {
|
if FileManager.default.fileExists(atPath: path) {
|
||||||
do { try FileManager.default.removeItem(atPath: path) }
|
do { try FileManager.default.removeItem(atPath: path) }
|
||||||
catch { print("Could not destroy database file: \(path)") }
|
catch { print("Could not destroy database file: \(path)") }
|
||||||
@@ -62,13 +57,13 @@ class SQLiteDatabase {
|
|||||||
// static func export() throws -> URL {
|
// static func export() throws -> URL {
|
||||||
// let fmt = DateFormatter()
|
// let fmt = DateFormatter()
|
||||||
// fmt.dateFormat = "yyyy-MM-dd"
|
// 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.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
|
// return dest
|
||||||
// }
|
// }
|
||||||
|
|
||||||
static func open(path: String) throws -> SQLiteDatabase {
|
static func open(path: String = URL.internalDB().relativePath) throws -> SQLiteDatabase {
|
||||||
var db: OpaquePointer?
|
var db: OpaquePointer?
|
||||||
//sqlite3_open_v2(path, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_SHAREDCACHE, nil)
|
//sqlite3_open_v2(path, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_SHAREDCACHE, nil)
|
||||||
if sqlite3_open(path, &db) == SQLITE_OK {
|
if sqlite3_open(path, &db) == SQLITE_OK {
|
||||||
|
|||||||
23
main/Extensions/FileManager.swift
Normal file
23
main/Extensions/FileManager.swift
Normal file
@@ -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() }
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@ extension NSNotification.Name {
|
|||||||
func post(_ obj: Any? = nil) {
|
func post(_ obj: Any? = nil) {
|
||||||
NotificationCenter.default.post(name: self, object: obj)
|
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) }
|
DispatchQueue.main.async { NotificationCenter.default.post(name: self, object: obj) }
|
||||||
}
|
}
|
||||||
/// You are responsible for removing the returned object in a `deinit` block.
|
/// You are responsible for removing the returned object in a `deinit` block.
|
||||||
|
|||||||
@@ -17,9 +17,13 @@
|
|||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>$(MARKETING_VERSION)</string>
|
<string>$(MARKETING_VERSION)</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>7</string>
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
<key>LSSupportsOpeningDocumentsInPlace</key>
|
||||||
|
<false/>
|
||||||
|
<key>UIFileSharingEnabled</key>
|
||||||
|
<false/>
|
||||||
<key>UILaunchStoryboardName</key>
|
<key>UILaunchStoryboardName</key>
|
||||||
<string>LaunchScreen</string>
|
<string>LaunchScreen</string>
|
||||||
<key>UIMainStoryboardFile</key>
|
<key>UIMainStoryboardFile</key>
|
||||||
@@ -41,9 +45,5 @@
|
|||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
</array>
|
</array>
|
||||||
<key>UIFileSharingEnabled</key>
|
|
||||||
<false/>
|
|
||||||
<key>LSSupportsOpeningDocumentsInPlace</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
@@ -31,10 +31,10 @@ class TVCSettings: UITableViewController {
|
|||||||
// TODO: export partly?
|
// TODO: export partly?
|
||||||
// TODO: show header-banner of success
|
// TODO: show header-banner of success
|
||||||
// Share Sheet
|
// 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)
|
self.present(sheet, animated: true)
|
||||||
// Save to Files app
|
// 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
|
// Shows Alert and exports to Documents directory
|
||||||
// AskAlert(title: "Export results?", text: """
|
// 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.
|
// 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.
|
||||||
|
|||||||
@@ -45,7 +45,9 @@ protocol EditActionsIgnoreBlockDelete : EditableRows {
|
|||||||
extension EditActionsIgnoreBlockDelete where Self: UITableViewController {
|
extension EditActionsIgnoreBlockDelete where Self: UITableViewController {
|
||||||
func editableRowActions(_ index: IndexPath) -> [(RowAction, String)] {
|
func editableRowActions(_ index: IndexPath) -> [(RowAction, String)] {
|
||||||
let x = dataSource[index.row]
|
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 b = x.options?.contains(.blocked) ?? false
|
||||||
let i = x.options?.contains(.ignored) ?? false
|
let i = x.options?.contains(.ignored) ?? false
|
||||||
return [(.delete, "Delete"), (.block, b ? "Unblock" : "Block"), (.ignore, i ? "Unignore" : "Ignore")]
|
return [(.delete, "Delete"), (.block, b ? "Unblock" : "Block"), (.ignore, i ? "Unignore" : "Ignore")]
|
||||||
|
|||||||
Reference in New Issue
Block a user