Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e65d84b6ab | ||
|
|
36cb499bf8 | ||
|
|
f78146f48d | ||
|
|
34ffd33316 | ||
|
|
e0158845d3 | ||
|
|
1e8101a699 | ||
|
|
dabbe10a2c | ||
|
|
92560bc48d | ||
|
|
3607fa9564 | ||
|
|
dfa368cff2 |
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
GlassVPN/SwiftSocket/** linguist-vendored
|
||||||
|
GlassVPN/robbiehanson-CocoaAsyncSocket/** linguist-vendored
|
||||||
|
GlassVPN/zhuhaow-NEKit/** linguist-vendored
|
||||||
|
GlassVPN/zhuhaow-Resolver/** linguist-vendored
|
||||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -4,4 +4,6 @@ build/
|
|||||||
DerivedData/
|
DerivedData/
|
||||||
|
|
||||||
Carthage/Checkouts
|
Carthage/Checkouts
|
||||||
Carthage/Build
|
Carthage/Build
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
|||||||
@@ -218,7 +218,7 @@
|
|||||||
5412FCC024C628F9000DE429 /* TVCChooseAlertTone.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TVCChooseAlertTone.swift; sourceTree = "<group>"; };
|
5412FCC024C628F9000DE429 /* TVCChooseAlertTone.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TVCChooseAlertTone.swift; sourceTree = "<group>"; };
|
||||||
5412FCC124C628FA000DE429 /* TVCConnectionAlerts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TVCConnectionAlerts.swift; sourceTree = "<group>"; };
|
5412FCC124C628FA000DE429 /* TVCConnectionAlerts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TVCConnectionAlerts.swift; sourceTree = "<group>"; };
|
||||||
541A957523E602DF00C09C19 /* LaunchIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = LaunchIcon.png; sourceTree = "<group>"; };
|
541A957523E602DF00C09C19 /* LaunchIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = LaunchIcon.png; sourceTree = "<group>"; };
|
||||||
541AC5D42399498A00A769D7 /* AppCheck.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AppCheck.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
541AC5D42399498A00A769D7 /* AppChk.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AppChk.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
541AC5D72399498A00A769D7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
541AC5D72399498A00A769D7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
541AC5DC2399498A00A769D7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
541AC5DC2399498A00A769D7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||||
541AC5DE2399498B00A769D7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
541AC5DE2399498B00A769D7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
@@ -446,7 +446,7 @@
|
|||||||
541AC5D52399498A00A769D7 /* Products */ = {
|
541AC5D52399498A00A769D7 /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
541AC5D42399498A00A769D7 /* AppCheck.app */,
|
541AC5D42399498A00A769D7 /* AppChk.app */,
|
||||||
543CDB1D23EEE61900B7F323 /* GlassVPN.appex */,
|
543CDB1D23EEE61900B7F323 /* GlassVPN.appex */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
@@ -829,9 +829,9 @@
|
|||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
541AC5D32399498A00A769D7 /* AppCheck */ = {
|
541AC5D32399498A00A769D7 /* AppChk */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 541AC5E62399498B00A769D7 /* Build configuration list for PBXNativeTarget "AppCheck" */;
|
buildConfigurationList = 541AC5E62399498B00A769D7 /* Build configuration list for PBXNativeTarget "AppChk" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
541AC5D02399498A00A769D7 /* Sources */,
|
541AC5D02399498A00A769D7 /* Sources */,
|
||||||
541AC5D12399498A00A769D7 /* Frameworks */,
|
541AC5D12399498A00A769D7 /* Frameworks */,
|
||||||
@@ -843,11 +843,11 @@
|
|||||||
dependencies = (
|
dependencies = (
|
||||||
543CDB2423EEE61900B7F323 /* PBXTargetDependency */,
|
543CDB2423EEE61900B7F323 /* PBXTargetDependency */,
|
||||||
);
|
);
|
||||||
name = AppCheck;
|
name = AppChk;
|
||||||
packageProductDependencies = (
|
packageProductDependencies = (
|
||||||
);
|
);
|
||||||
productName = PrivacyScore;
|
productName = PrivacyScore;
|
||||||
productReference = 541AC5D42399498A00A769D7 /* AppCheck.app */;
|
productReference = 541AC5D42399498A00A769D7 /* AppChk.app */;
|
||||||
productType = "com.apple.product-type.application";
|
productType = "com.apple.product-type.application";
|
||||||
};
|
};
|
||||||
543CDB1C23EEE61900B7F323 /* GlassVPN */ = {
|
543CDB1C23EEE61900B7F323 /* GlassVPN */ = {
|
||||||
@@ -876,7 +876,7 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 1130;
|
LastSwiftUpdateCheck = 1130;
|
||||||
LastUpgradeCheck = 1200;
|
LastUpgradeCheck = 1250;
|
||||||
ORGANIZATIONNAME = relikd;
|
ORGANIZATIONNAME = relikd;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
541AC5D32399498A00A769D7 = {
|
541AC5D32399498A00A769D7 = {
|
||||||
@@ -894,7 +894,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
buildConfigurationList = 541AC5CF2399498A00A769D7 /* Build configuration list for PBXProject "AppCheck" */;
|
buildConfigurationList = 541AC5CF2399498A00A769D7 /* Build configuration list for PBXProject "AppChk" */;
|
||||||
compatibilityVersion = "Xcode 9.3";
|
compatibilityVersion = "Xcode 9.3";
|
||||||
developmentRegion = en;
|
developmentRegion = en;
|
||||||
hasScannedForEncodings = 0;
|
hasScannedForEncodings = 0;
|
||||||
@@ -909,7 +909,7 @@
|
|||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
projectRoot = "";
|
projectRoot = "";
|
||||||
targets = (
|
targets = (
|
||||||
541AC5D32399498A00A769D7 /* AppCheck */,
|
541AC5D32399498A00A769D7 /* AppChk */,
|
||||||
543CDB1C23EEE61900B7F323 /* GlassVPN */,
|
543CDB1C23EEE61900B7F323 /* GlassVPN */,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@@ -1307,7 +1307,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 = 34;
|
CURRENT_PROJECT_VERSION = 38;
|
||||||
INFOPLIST_FILE = main/Info.plist;
|
INFOPLIST_FILE = main/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -1315,8 +1315,9 @@
|
|||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.0;
|
MARKETING_VERSION = 1.0.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck";
|
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck";
|
||||||
PRODUCT_NAME = AppCheck;
|
PRODUCT_NAME = AppChk;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -1326,7 +1327,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 = 34;
|
CURRENT_PROJECT_VERSION = 38;
|
||||||
INFOPLIST_FILE = main/Info.plist;
|
INFOPLIST_FILE = main/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -1334,8 +1335,9 @@
|
|||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.0;
|
MARKETING_VERSION = 1.0.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck";
|
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck";
|
||||||
PRODUCT_NAME = AppCheck;
|
PRODUCT_NAME = AppChk;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -1345,7 +1347,7 @@
|
|||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 34;
|
CURRENT_PROJECT_VERSION = 38;
|
||||||
INFOPLIST_FILE = GlassVPN/Info.plist;
|
INFOPLIST_FILE = GlassVPN/Info.plist;
|
||||||
MARKETING_VERSION = 1.0.0;
|
MARKETING_VERSION = 1.0.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
||||||
@@ -1354,6 +1356,7 @@
|
|||||||
SWIFT_OBJC_BRIDGING_HEADER = "GlassVPN/robbiehanson-CocoaAsyncSocket/CocoaAsyncSocket.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "GlassVPN/robbiehanson-CocoaAsyncSocket/CocoaAsyncSocket.h";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -1363,7 +1366,7 @@
|
|||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 34;
|
CURRENT_PROJECT_VERSION = 38;
|
||||||
INFOPLIST_FILE = GlassVPN/Info.plist;
|
INFOPLIST_FILE = GlassVPN/Info.plist;
|
||||||
MARKETING_VERSION = 1.0.0;
|
MARKETING_VERSION = 1.0.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
||||||
@@ -1371,13 +1374,14 @@
|
|||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "GlassVPN/robbiehanson-CocoaAsyncSocket/CocoaAsyncSocket.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "GlassVPN/robbiehanson-CocoaAsyncSocket/CocoaAsyncSocket.h";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
/* End XCBuildConfiguration section */
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
/* Begin XCConfigurationList section */
|
||||||
541AC5CF2399498A00A769D7 /* Build configuration list for PBXProject "AppCheck" */ = {
|
541AC5CF2399498A00A769D7 /* Build configuration list for PBXProject "AppChk" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
541AC5E42399498B00A769D7 /* Debug */,
|
541AC5E42399498B00A769D7 /* Debug */,
|
||||||
@@ -1386,7 +1390,7 @@
|
|||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
541AC5E62399498B00A769D7 /* Build configuration list for PBXNativeTarget "AppCheck" */ = {
|
541AC5E62399498B00A769D7 /* Build configuration list for PBXNativeTarget "AppChk" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
541AC5E72399498B00A769D7 /* Debug */,
|
541AC5E72399498B00A769D7 /* Debug */,
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1200"
|
LastUpgradeVersion = "1250"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -15,9 +15,9 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
||||||
BuildableName = "AppCheck.app"
|
BuildableName = "AppChk.app"
|
||||||
BlueprintName = "AppCheck"
|
BlueprintName = "AppChk"
|
||||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildActionEntry>
|
</BuildActionEntry>
|
||||||
</BuildActionEntries>
|
</BuildActionEntries>
|
||||||
@@ -45,9 +45,9 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
||||||
BuildableName = "AppCheck.app"
|
BuildableName = "AppChk.app"
|
||||||
BlueprintName = "AppCheck"
|
BlueprintName = "AppChk"
|
||||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
@@ -61,9 +61,9 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
||||||
BuildableName = "AppCheck.app"
|
BuildableName = "AppChk.app"
|
||||||
BlueprintName = "AppCheck"
|
BlueprintName = "AppChk"
|
||||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
</ProfileAction>
|
</ProfileAction>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1200"
|
LastUpgradeVersion = "1250"
|
||||||
wasCreatedForAppExtension = "YES"
|
wasCreatedForAppExtension = "YES"
|
||||||
version = "2.0">
|
version = "2.0">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
BlueprintIdentifier = "543CDB1C23EEE61900B7F323"
|
BlueprintIdentifier = "543CDB1C23EEE61900B7F323"
|
||||||
BuildableName = "GlassVPN.appex"
|
BuildableName = "GlassVPN.appex"
|
||||||
BlueprintName = "GlassVPN"
|
BlueprintName = "GlassVPN"
|
||||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildActionEntry>
|
</BuildActionEntry>
|
||||||
<BuildActionEntry
|
<BuildActionEntry
|
||||||
@@ -30,9 +30,9 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
||||||
BuildableName = "AppCheck.app"
|
BuildableName = "AppChk.app"
|
||||||
BlueprintName = "AppCheck"
|
BlueprintName = "AppChk"
|
||||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildActionEntry>
|
</BuildActionEntry>
|
||||||
</BuildActionEntries>
|
</BuildActionEntries>
|
||||||
@@ -62,9 +62,9 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
||||||
BuildableName = "AppCheck.app"
|
BuildableName = "AppChk.app"
|
||||||
BlueprintName = "AppCheck"
|
BlueprintName = "AppChk"
|
||||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
@@ -74,15 +74,16 @@
|
|||||||
savedToolIdentifier = ""
|
savedToolIdentifier = ""
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
debugDocumentVersioning = "YES"
|
debugDocumentVersioning = "YES"
|
||||||
|
askForAppToLaunch = "Yes"
|
||||||
launchAutomaticallySubstyle = "2">
|
launchAutomaticallySubstyle = "2">
|
||||||
<BuildableProductRunnable
|
<BuildableProductRunnable
|
||||||
runnableDebuggingMode = "0">
|
runnableDebuggingMode = "0">
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
||||||
BuildableName = "AppCheck.app"
|
BuildableName = "AppChk.app"
|
||||||
BlueprintName = "AppCheck"
|
BlueprintName = "AppChk"
|
||||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
</ProfileAction>
|
</ProfileAction>
|
||||||
@@ -20,6 +20,8 @@
|
|||||||
<string>$(MARKETING_VERSION)</string>
|
<string>$(MARKETING_VERSION)</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
|
<false/>
|
||||||
<key>NSExtension</key>
|
<key>NSExtension</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSExtensionPointIdentifier</key>
|
<key>NSExtensionPointIdentifier</key>
|
||||||
|
|||||||
59
README.md
59
README.md
@@ -1,4 +1,4 @@
|
|||||||
AppCheck – Privacy Monitor
|
AppChk – Privacy Monitor
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
A pocket DNS monitor and network filter.
|
A pocket DNS monitor and network filter.
|
||||||
@@ -8,35 +8,44 @@ A pocket DNS monitor and network filter.
|
|||||||
|
|
||||||
## What is it?
|
## What is it?
|
||||||
|
|
||||||
AppCheck helps you identify which applications communicate with third parties.
|
AppChk helps you identify applications that communicate with other parties.
|
||||||
It does so by logging network requests.
|
|
||||||
AppCheck learns only the destination addresses, not the actual data that is exchanged.
|
|
||||||
|
|
||||||
Your data belongs to you.
|
Join the [Testflight beta][testflight] or look at the evaluation results [appchk.de].
|
||||||
Therefore, monitoring and analysis take place on your device only.
|
|
||||||
The app does not share any data with us or any other third-party – unless you choose to.
|
|
||||||
|
|
||||||
Join [Testflight beta](https://testflight.apple.com/join/9jjaFeHO)
|
|
||||||
|
|
||||||
|
|
||||||
### How does it work?
|
### How does it work?
|
||||||
|
|
||||||
AppCheck creates a local VPN tunnel to intercept all network connections.
|
AppChk creates a local VPN proxy to intercept all network connections.
|
||||||
For each connection AppCheck looks into the DNS headers only, namely the domain names.
|
For each connection, AppChk looks into the DNS headers only, namely the domain names.
|
||||||
These domain names are logged in the background while the VPN is active.
|
These domain names are logged in the background while the VPN is running.
|
||||||
That means, AppCheck does not have to be active in the foreground all the time.
|
AppChk does not need to be active all the time.
|
||||||
|
|
||||||
|
|
||||||
|
### What about privacy?
|
||||||
|
|
||||||
|
Your data belongs to you.
|
||||||
|
Therefore, monitoring takes place on your device only.
|
||||||
|
AppChk learns only the destination addresses, not the actual data that is exchanged.
|
||||||
|
The app does not share any data with us or any other third-party – unless you choose to.
|
||||||
|
|
||||||
|
|
||||||
|
### How can I contribute?
|
||||||
|
|
||||||
|
AppChk allows you to record app-specific activity.
|
||||||
|
You can share these recordings with the community; it can help you and others avoid phony applications, even before you install an app.
|
||||||
|
|
||||||
|
Join the [Testflight beta][testflight]
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- See outgoing (DNS) network requests in real-time
|
- See outgoing (DNS) network requests in real-time
|
||||||
- See history of previous connections
|
- See the history of previous connections
|
||||||
- Block unwanted traffic based on domain names
|
- Block unwanted traffic based on domain names
|
||||||
- Record app specific activity<sup>1</sup>
|
- Record app-specific activity<sup>1</sup>
|
||||||
- Apply logging filters (block or ignore) and display filters (specific range or last x minutes)
|
- Apply logging filters (block or ignore) and display filters (specific range or last x minutes)
|
||||||
- Sort results by time, name, or occurrence count
|
- Sort results by time, name, or occurrence count
|
||||||
- Context Analysis
|
- Context Analysis
|
||||||
- What other domains occur often at the same time?
|
- What other domains often occur at the same time?
|
||||||
- What happened immediately before or after the action?
|
- What happened immediately before or after the action?
|
||||||
- Export results for custom analysis
|
- Export results for custom analysis
|
||||||
- Alert Monitor & reminder
|
- Alert Monitor & reminder
|
||||||
@@ -51,7 +60,19 @@ That means, AppCheck does not have to be active in the foreground all the time.
|
|||||||
|
|
||||||
## Research Project
|
## Research Project
|
||||||
|
|
||||||
*information will be added soon™*
|
This research project is an effort to shine a light on the background activity of iOS apps, making the otherwise hidden network connections visible to everyone.
|
||||||
|
The goal is to make privacy more accessible to the general public.
|
||||||
|
And thus create incentives for app developers to respect users' privacy.
|
||||||
|
|
||||||
For now, go to the results page at [https://appchk.de/](https://appchk.de/).
|
We want to offer users, activists, data protection authorities, and data protection officers an easily accessible and flexible tool to assess the privacy measures of iOS applications.
|
||||||
Btw. we are searching for [help](https://appchk.de/help/) on our ongoing research project.
|
AppChk allows users to:
|
||||||
|
|
||||||
|
- get a visual overview of an apps communication signature
|
||||||
|
- assess how an app ranks within its peer group or category
|
||||||
|
- influence the ranking according to their preferences
|
||||||
|
|
||||||
|
The evaluation results page is at [appchk.de] and the research paper at [arxiv](https://arxiv.org/abs/2104.06167).
|
||||||
|
|
||||||
|
|
||||||
|
[testflight]: https://testflight.apple.com/join/9jjaFeHO
|
||||||
|
[appchk.de]: https://appchk.de/
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 141 KiB |
@@ -40,7 +40,7 @@ func AskAlert(title: String?, text: String?, buttonText: String = "Continue", ca
|
|||||||
/// Show alert hinting the user to go to system settings and re-enable notifications.
|
/// Show alert hinting the user to go to system settings and re-enable notifications.
|
||||||
func NotificationsDisabledAlert(presentIn viewController: UIViewController) {
|
func NotificationsDisabledAlert(presentIn viewController: UIViewController) {
|
||||||
AskAlert(title: "Notifications Disabled",
|
AskAlert(title: "Notifications Disabled",
|
||||||
text: "Go to System Settings > Notifications > AppCheck to re-enable notifications.",
|
text: "Go to System Settings > Notifications > AppChk to re-enable notifications.",
|
||||||
buttonText: "Open settings") { _ in
|
buttonText: "Open settings") { _ in
|
||||||
URL(string: UIApplication.openSettingsURLString)?.open()
|
URL(string: UIApplication.openSettingsURLString)?.open()
|
||||||
}.presentIn(viewController)
|
}.presentIn(viewController)
|
||||||
|
|||||||
@@ -521,7 +521,7 @@
|
|||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Guy-Ra-fpS" userLabel="Title">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Guy-Ra-fpS" userLabel="Title">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="288" height="40"/>
|
<rect key="frame" x="0.0" y="0.0" width="288" height="40"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="AppCheck" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Et0-8d-CId">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="AppChk" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Et0-8d-CId">
|
||||||
<rect key="frame" x="0.0" y="2" width="80" height="20.5"/>
|
<rect key="frame" x="0.0" y="2" width="80" height="20.5"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16097.3" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="qdB-ZO-LHY">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17156" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="qdB-ZO-LHY">
|
||||||
<device id="retina4_0" orientation="portrait" appearance="light"/>
|
<device id="retina4_0" orientation="portrait" appearance="light"/>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17125"/>
|
||||||
|
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<scenes>
|
<scenes>
|
||||||
@@ -14,7 +15,7 @@
|
|||||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="44" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="8kq-PY-wp7">
|
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="44" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="8kq-PY-wp7">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
<color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<sections>
|
<sections>
|
||||||
<tableViewSection headerTitle="VPN Proxy Settings" id="w58-6X-Jea">
|
<tableViewSection headerTitle="VPN Proxy Settings" id="w58-6X-Jea">
|
||||||
<cells>
|
<cells>
|
||||||
@@ -67,7 +68,7 @@
|
|||||||
<rect key="frame" x="113" y="13" width="73" height="18"/>
|
<rect key="frame" x="113" y="13" width="73" height="18"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -94,7 +95,7 @@
|
|||||||
<rect key="frame" x="113" y="13" width="73" height="18"/>
|
<rect key="frame" x="113" y="13" width="73" height="18"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -115,17 +116,17 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Reminders" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="pN1-lL-bGz">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Reminders" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="pN1-lL-bGz">
|
||||||
<rect key="frame" x="16" y="12" width="81.5" height="20.5"/>
|
<rect key="frame" x="16" y="12" width="81" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Disabled" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ldE-NT-c2c">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Disabled" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ldE-NT-c2c">
|
||||||
<rect key="frame" x="218" y="12" width="67" height="20.5"/>
|
<rect key="frame" x="218.5" y="12" width="66.5" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -142,17 +143,17 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Connection Alerts" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="o7c-vQ-haI">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Connection Alerts" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="o7c-vQ-haI">
|
||||||
<rect key="frame" x="16" y="12" width="137.5" height="20.5"/>
|
<rect key="frame" x="16" y="12" width="137" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Disabled" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="VeV-go-DXR">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Disabled" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="VeV-go-DXR">
|
||||||
<rect key="frame" x="218" y="12" width="67" height="20.5"/>
|
<rect key="frame" x="218.5" y="12" width="66.5" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -173,7 +174,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Auto-Delete Logs" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="8gD-At-D8n">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Auto-Delete Logs" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="8gD-At-D8n">
|
||||||
<rect key="frame" x="16" y="12" width="134" height="20.5"/>
|
<rect key="frame" x="16" y="12" width="133.5" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
@@ -183,7 +184,7 @@
|
|||||||
<rect key="frame" x="239.5" y="12" width="45.5" height="20.5"/>
|
<rect key="frame" x="239.5" y="12" width="45.5" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -200,7 +201,7 @@
|
|||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6B5-l4-Hgz">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6B5-l4-Hgz">
|
||||||
<rect key="frame" x="74.5" y="7" width="171" height="30"/>
|
<rect key="frame" x="74.5" y="7" width="171" height="30"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||||
<state key="normal" title="Reset Introduction Alerts"/>
|
<state key="normal" title="Reset Introduction Alerts"/>
|
||||||
@@ -222,11 +223,11 @@
|
|||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="sE3-Vh-0lM">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="sE3-Vh-0lM">
|
||||||
<rect key="frame" x="111.5" y="7" width="97" height="30"/>
|
<rect key="frame" x="111.5" y="7" width="97" height="30"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||||
<state key="normal" title="Delete all logs">
|
<state key="normal" title="Delete all logs">
|
||||||
<color key="titleColor" systemColor="systemRedColor" red="1" green="0.23137254900000001" blue="0.18823529410000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="titleColor" systemColor="systemRedColor"/>
|
||||||
</state>
|
</state>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="clearDatabaseResults" destination="qdB-ZO-LHY" eventType="touchUpInside" id="heU-m1-oJq"/>
|
<action selector="clearDatabaseResults" destination="qdB-ZO-LHY" eventType="touchUpInside" id="heU-m1-oJq"/>
|
||||||
@@ -251,17 +252,17 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Force disconnect unresolvable" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="rio-m6-pXN">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Force disconnect unresolvable" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="rio-m6-pXN">
|
||||||
<rect key="frame" x="15" y="5" width="234" height="20.5"/>
|
<rect key="frame" x="15" y="5" width="233" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="in case DNS returns empty IP" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="rr4-sR-VxD">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="in case DNS returns empty IP" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="rr4-sR-VxD">
|
||||||
<rect key="frame" x="15" y="25.5" width="166" height="14.5"/>
|
<rect key="frame" x="15" y="25.5" width="165.5" height="14.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleCaption1"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleCaption1"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="TSu-IP-KFG">
|
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="TSu-IP-KFG">
|
||||||
@@ -285,7 +286,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Force disconnect swcd" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="x5u-5T-XTO">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Force disconnect swcd" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="x5u-5T-XTO">
|
||||||
<rect key="frame" x="15" y="5" width="177" height="20.5"/>
|
<rect key="frame" x="15" y="5" width="176" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
@@ -295,7 +296,7 @@
|
|||||||
<rect key="frame" x="15" y="25.5" width="220.5" height="14.5"/>
|
<rect key="frame" x="15" y="25.5" width="220.5" height="14.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleCaption1"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleCaption1"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="c5N-PN-qWU">
|
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="c5N-PN-qWU">
|
||||||
@@ -318,7 +319,7 @@
|
|||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vZa-EO-FAZ">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vZa-EO-FAZ">
|
||||||
<rect key="frame" x="125" y="7" width="70" height="30"/>
|
<rect key="frame" x="125" y="7" width="70" height="30"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||||
<state key="normal" title="Export DB"/>
|
<state key="normal" title="Export DB"/>
|
||||||
@@ -366,7 +367,7 @@
|
|||||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" id="GSg-ZZ-F8J">
|
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" id="GSg-ZZ-F8J">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
<prototypes>
|
<prototypes>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="DomainFilterCell" textLabel="MrS-rb-RLB" style="IBUITableViewCellStyleDefault" id="EO2-ww-xuz">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="DomainFilterCell" textLabel="MrS-rb-RLB" style="IBUITableViewCellStyleDefault" id="EO2-ww-xuz">
|
||||||
<rect key="frame" x="0.0" y="28" width="320" height="43.5"/>
|
<rect key="frame" x="0.0" y="28" width="320" height="43.5"/>
|
||||||
@@ -410,12 +411,12 @@
|
|||||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="Dop-3B-Uvh">
|
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="Dop-3B-Uvh">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
<color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<sections>
|
<sections>
|
||||||
<tableViewSection headerTitle="Restart Reminder" id="UOi-fT-8Vh">
|
<tableViewSection headerTitle="Restart Reminder" id="UOi-fT-8Vh">
|
||||||
<string key="footerTitle">If VPN stops accidentally, show a notification 5 minutes later. It will remind you to re-enable the VPN after system reboot.
|
<string key="footerTitle">If VPN stops accidentally, show a notification 5 minutes later. It will remind you to re-enable the VPN after system reboot.
|
||||||
|
|
||||||
if Notification is enabled, show a notification banner once, stating the VPN has stopped.
|
If Notification is enabled, show a notification banner once, stating the VPN has stopped.
|
||||||
|
|
||||||
If App Badge is enabled, display the letter "1" on the homescreen app icon, as long as the VPN is not running.</string>
|
If App Badge is enabled, display the letter "1" on the homescreen app icon, as long as the VPN is not running.</string>
|
||||||
<cells>
|
<cells>
|
||||||
@@ -508,7 +509,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Sound" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="UBT-zI-VNd">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Sound" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="UBT-zI-VNd">
|
||||||
<rect key="frame" x="16" y="12" width="49.5" height="20.5"/>
|
<rect key="frame" x="16" y="12" width="49" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
@@ -518,7 +519,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
|||||||
<rect key="frame" x="241" y="12" width="44" height="20.5"/>
|
<rect key="frame" x="241" y="12" width="44" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -566,7 +567,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Sound" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="VYC-xF-awf">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Sound" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="VYC-xF-awf">
|
||||||
<rect key="frame" x="16" y="12" width="49.5" height="20.5"/>
|
<rect key="frame" x="16" y="12" width="49" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
@@ -576,7 +577,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
|||||||
<rect key="frame" x="241" y="12" width="44" height="20.5"/>
|
<rect key="frame" x="241" y="12" width="44" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -614,7 +615,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
|||||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="w2R-BE-lM4">
|
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="w2R-BE-lM4">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
<color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<prototypes>
|
<prototypes>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="checkmark" indentationWidth="10" reuseIdentifier="SettingsAlertToneCell" textLabel="O50-Db-5TI" style="IBUITableViewCellStyleDefault" id="38V-eP-HSv">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="checkmark" indentationWidth="10" reuseIdentifier="SettingsAlertToneCell" textLabel="O50-Db-5TI" style="IBUITableViewCellStyleDefault" id="38V-eP-HSv">
|
||||||
<rect key="frame" x="0.0" y="55.5" width="320" height="43.5"/>
|
<rect key="frame" x="0.0" y="55.5" width="320" height="43.5"/>
|
||||||
@@ -653,7 +654,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
|||||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="u0e-LW-1Qh">
|
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="u0e-LW-1Qh">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
<color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<sections>
|
<sections>
|
||||||
<tableViewSection headerTitle="Connection Alerts" footerTitle="Get a notification whenever a specific DNS request occurs." id="4OJ-qA-l8L">
|
<tableViewSection headerTitle="Connection Alerts" footerTitle="Get a notification whenever a specific DNS request occurs." id="4OJ-qA-l8L">
|
||||||
<cells>
|
<cells>
|
||||||
@@ -692,7 +693,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Sound" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="pck-pT-tnX">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Sound" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="pck-pT-tnX">
|
||||||
<rect key="frame" x="16" y="12" width="49.5" height="20.5"/>
|
<rect key="frame" x="16" y="12" width="49" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
@@ -702,7 +703,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
|||||||
<rect key="frame" x="241" y="12" width="44" height="20.5"/>
|
<rect key="frame" x="241" y="12" width="44" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -843,7 +844,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
|||||||
<rect key="frame" x="113" y="13" width="73" height="18"/>
|
<rect key="frame" x="113" y="13" width="73" height="18"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -870,7 +871,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
|||||||
<rect key="frame" x="113" y="13" width="73" height="18"/>
|
<rect key="frame" x="113" y="13" width="73" height="18"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -902,6 +903,17 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
|||||||
</scenes>
|
</scenes>
|
||||||
<inferredMetricsTieBreakers>
|
<inferredMetricsTieBreakers>
|
||||||
<segue reference="tUF-Kv-koO"/>
|
<segue reference="tUF-Kv-koO"/>
|
||||||
<segue reference="EzT-Xq-wka"/>
|
<segue reference="2ak-aX-wVl"/>
|
||||||
</inferredMetricsTieBreakers>
|
</inferredMetricsTieBreakers>
|
||||||
|
<resources>
|
||||||
|
<systemColor name="secondaryLabelColor">
|
||||||
|
<color red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
|
<systemColor name="systemBackgroundColor">
|
||||||
|
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</systemColor>
|
||||||
|
<systemColor name="systemRedColor">
|
||||||
|
<color red="1" green="0.23137254901960785" blue="0.18823529411764706" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
|
</resources>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ final class GlassVPNManager {
|
|||||||
|
|
||||||
private func createNewVPN(_ success: @escaping (_ manager: NETunnelProviderManager) -> Void) {
|
private func createNewVPN(_ success: @escaping (_ manager: NETunnelProviderManager) -> Void) {
|
||||||
let mgr = NETunnelProviderManager()
|
let mgr = NETunnelProviderManager()
|
||||||
mgr.localizedDescription = "AppCheck Monitor"
|
mgr.localizedDescription = "AppChk Monitor"
|
||||||
let proto = NETunnelProviderProtocol()
|
let proto = NETunnelProviderProtocol()
|
||||||
proto.providerBundleIdentifier = GlassVPNManager.bundleIdentifier
|
proto.providerBundleIdentifier = GlassVPNManager.bundleIdentifier
|
||||||
proto.serverAddress = "127.0.0.1"
|
proto.serverAddress = "127.0.0.1"
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
<string>$(MARKETING_VERSION)</string>
|
<string>$(MARKETING_VERSION)</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
|
<false/>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>LSSupportsOpeningDocumentsInPlace</key>
|
<key>LSSupportsOpeningDocumentsInPlace</key>
|
||||||
|
|||||||
@@ -99,8 +99,8 @@ extension PushNotification {
|
|||||||
guard #available(iOS 10, *), PrefsShared.RestartReminder.WithText else { return }
|
guard #available(iOS 10, *), PrefsShared.RestartReminder.WithText else { return }
|
||||||
|
|
||||||
schedule(.CantStopMeNowReminder,
|
schedule(.CantStopMeNowReminder,
|
||||||
content: .make("AppCheck disabled",
|
content: .make("AppChk disabled",
|
||||||
body: "AppCheck can't monitor network traffic because VPN has stopped.",
|
body: "AppChk can't monitor network traffic because VPN has stopped.",
|
||||||
sound: .from(string: PrefsShared.RestartReminder.Sound)),
|
sound: .from(string: PrefsShared.RestartReminder.Sound)),
|
||||||
trigger: .make(Date(timeIntervalSinceNow: 5 * 60)),
|
trigger: .make(Date(timeIntervalSinceNow: 5 * 60)),
|
||||||
waitUntilDone: true)
|
waitUntilDone: true)
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ class TVCChooseAlertTone: UITableViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override func tableView(_: UITableView, titleForHeaderInSection section: Int) -> String? {
|
override func tableView(_: UITableView, titleForHeaderInSection section: Int) -> String? {
|
||||||
section == 1 ? "AppCheck" : nil
|
section == 1 ? "AppChk" : nil
|
||||||
}
|
}
|
||||||
|
|
||||||
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||||
@@ -70,7 +70,7 @@ fileprivate let AvailableSounds: [[(title: String, file: String)]] = [
|
|||||||
[ // System sounds
|
[ // System sounds
|
||||||
("None", "#mute"),
|
("None", "#mute"),
|
||||||
("Default", "#default")
|
("Default", "#default")
|
||||||
], [ // AppCheck sounds
|
], [ // AppChk sounds
|
||||||
("Clock", "clock"),
|
("Clock", "clock"),
|
||||||
("Drum 1", "drum1"),
|
("Drum 1", "drum1"),
|
||||||
("Drum 2", "drum2"),
|
("Drum 2", "drum2"),
|
||||||
|
|||||||
@@ -84,6 +84,44 @@ br.vet
|
|||||||
br.vlog
|
br.vlog
|
||||||
br.wiki
|
br.wiki
|
||||||
br.zlg
|
br.zlg
|
||||||
|
cn.ac
|
||||||
|
cn.ah
|
||||||
|
cn.bj
|
||||||
|
cn.com
|
||||||
|
cn.cq
|
||||||
|
cn.edu
|
||||||
|
cn.fj
|
||||||
|
cn.gd
|
||||||
|
cn.gov
|
||||||
|
cn.gs
|
||||||
|
cn.gx
|
||||||
|
cn.gz
|
||||||
|
cn.ha
|
||||||
|
cn.hb
|
||||||
|
cn.he
|
||||||
|
cn.hi
|
||||||
|
cn.hl
|
||||||
|
cn.hn
|
||||||
|
cn.jl
|
||||||
|
cn.js
|
||||||
|
cn.jx
|
||||||
|
cn.ln
|
||||||
|
cn.mil
|
||||||
|
cn.net
|
||||||
|
cn.nm
|
||||||
|
cn.nx
|
||||||
|
cn.org
|
||||||
|
cn.qh
|
||||||
|
cn.sc
|
||||||
|
cn.sd
|
||||||
|
cn.sh
|
||||||
|
cn.sn
|
||||||
|
cn.sx
|
||||||
|
cn.tj
|
||||||
|
cn.xj
|
||||||
|
cn.xz
|
||||||
|
cn.yn
|
||||||
|
cn.zj
|
||||||
co.a
|
co.a
|
||||||
co.b
|
co.b
|
||||||
co.com
|
co.com
|
||||||
@@ -105,10 +143,10 @@ co.y
|
|||||||
er.com
|
er.com
|
||||||
er.edu
|
er.edu
|
||||||
er.gov
|
er.gov
|
||||||
|
er.ind
|
||||||
er.mil
|
er.mil
|
||||||
er.net
|
er.net
|
||||||
er.org
|
er.org
|
||||||
er.ind
|
|
||||||
es.com
|
es.com
|
||||||
es.edu
|
es.edu
|
||||||
es.gob
|
es.gob
|
||||||
@@ -207,6 +245,15 @@ in.res
|
|||||||
je.co
|
je.co
|
||||||
je.net
|
je.net
|
||||||
je.org
|
je.org
|
||||||
|
jp.ac
|
||||||
|
jp.ad
|
||||||
|
jp.co
|
||||||
|
jp.ed
|
||||||
|
jp.go
|
||||||
|
jp.gr
|
||||||
|
jp.lg
|
||||||
|
jp.ne
|
||||||
|
jp.or
|
||||||
kr.ac
|
kr.ac
|
||||||
kr.busan
|
kr.busan
|
||||||
kr.chungbuk
|
kr.chungbuk
|
||||||
@@ -256,6 +303,11 @@ lk.org
|
|||||||
lk.sch
|
lk.sch
|
||||||
lk.soc
|
lk.soc
|
||||||
lk.web
|
lk.web
|
||||||
|
mo.com
|
||||||
|
mo.edu
|
||||||
|
mo.gov
|
||||||
|
mo.net
|
||||||
|
mo.org
|
||||||
ms.com
|
ms.com
|
||||||
ms.edu
|
ms.edu
|
||||||
ms.gov
|
ms.gov
|
||||||
@@ -477,6 +529,16 @@ tt.org
|
|||||||
tt.pro
|
tt.pro
|
||||||
tt.tel
|
tt.tel
|
||||||
tt.travel
|
tt.travel
|
||||||
|
tw.club
|
||||||
|
tw.com
|
||||||
|
tw.ebiz
|
||||||
|
tw.edu
|
||||||
|
tw.game
|
||||||
|
tw.gov
|
||||||
|
tw.idv
|
||||||
|
tw.mil
|
||||||
|
tw.net
|
||||||
|
tw.org
|
||||||
ua.cherkassy
|
ua.cherkassy
|
||||||
ua.cherkasy
|
ua.cherkasy
|
||||||
ua.chernigov
|
ua.chernigov
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
___Co-Occurrence___ allows you to find requests that happen often at the same time as the selected domain. Hence it will give you a hint what Apps might be involved in the activity.
|
___Co-Occurrence___ allows you to find requests that happen often at the same time as the selected domain. Hence, it will give you a hint what apps might be involved in the activity.
|
||||||
|
|
||||||
How do you interpret these results? Lets look at an example:
|
How do you interpret these results? Lets look at an example:
|
||||||
|
|
||||||
<IMG>
|
<IMG>
|
||||||
|
|
||||||
The domain __example.org__ had __14__ requests with an _average time divergence_ of __0.71 seconds__. That is, these 14 domain calls happend, on average, less then a second before or after the original request of the selected domain.
|
The domain __example.org__ has __14__ requests with an _average time divergence_ of __0.71 seconds__. That is, these 14 domain calls happend, on average, less then a second before or after the original request of the selected domain.
|
||||||
|
|
||||||
Close temporal proximity and high occurrence counts are both indicators for domain correlation. Results are sorted by a ranking index (__9.__) which strikes a balance between the two. Preferring entries with higher counts as well as low time divergence.
|
Close temporal proximity and high occurrence counts are both indicators for domain correlation. Results are sorted by a ranking index (__9.__) which strikes a balance between the two. Preferring entries with higher counts as well as low time divergence.
|
||||||
|
|
||||||
_Tip:_ As a visual guide you can look for the colored bar beside each value. The larger the bar, the greater the correlation.
|
_Tip:_ As a visual guide, you can look for the colored bar beside each value. The larger the bar, the greater the correlation.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# What are Recordings?
|
# What are Recordings?
|
||||||
|
|
||||||
Similar to the default logging, recordings will intercept every request and log it for later review. App recordings are usually 1 – 4 minutes long and cover a single application. You can utilize recordings for App analysis or to get a ground truth on background traffic.
|
Similar to the default logging, recordings will intercept every request and log it for later review. App recordings are usually 1 – 4 minutes long and cover a single application. You can utilize recordings for app analysis or to get a ground truth on background traffic.
|
||||||
|
|
||||||
Optionally, you can help us by providing your app specific recordings. Together with your findings we can create a community driven privacy monitor. The research results will help you and others avoid Apps that unnecessarily share data with third-party providers.
|
Optionally, you can help us by providing your app recordings. With your findings we can create a community driven privacy monitor. The research results will help you and others avoid apps that, unnecessarily, share data with third-party providers.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Contribute
|
# Contribute
|
||||||
|
|
||||||
This step is completely __optional__. You can choose to share your results with us. We can compare similar applications and suggest privacy friendly alternatives. Together with other likeminded individuals we can increase the awareness for privacy friendly design.
|
This step is completely __optional__. You can choose to share your results with us. We can compare similar applications and suggest privacy friendly alternatives. Together with other likeminded individuals, we can increase the awareness for privacy friendly design.
|
||||||
|
|
||||||
Thank you very much.
|
Thank you very much.
|
||||||
|
|||||||
@@ -4,17 +4,17 @@ Before you begin, there are two types of recordings: app specific recordings and
|
|||||||
|
|
||||||
### Important notice
|
### Important notice
|
||||||
|
|
||||||
During the recording all logging filter are paused. This means blocked domains are not being blocked and ignored domains show up regardless. This is necessary for comparability reasons.
|
During the recording all logging filters are paused. This means, blocked domains are not being blocked and ignored domains show up regardless. This is necessary for comparability reasons.
|
||||||
|
|
||||||
## App recording
|
## App recording
|
||||||
|
|
||||||
Before you begin make sure that you quit all running applications and wait a few seconds. Tap on the 'App' recording button and switch to the application you'd like to inspect. Use the App as you would normally. Try to get to all corners and functionality the App provides. When you feel that you have captured enough content, come back to _AppCheck_ and stop the recording.
|
Before you begin, make sure that you quit all running applications and wait a few seconds. Tap on the 'App' recording button and switch to the application you would like to inspect. Use the app as you would normally. Try to get to all corners and functionality the app provides. When you feel that you have captured enough content, come back to _AppChk_ and stop the recording.
|
||||||
|
|
||||||
## Background recording
|
## Background recording
|
||||||
|
|
||||||
Will answer one simple question: What communications happen while you aren't using your device. You should solely start a background recording when you know you aren't going to use your device in the near future. For example, before you go to bed.
|
Answers one simple question: What communications happen while you aren't using your device. You should only start a background recording when you know you aren't going to use your device in the near future. For example, before you go to bed.
|
||||||
As soon as you start using your device, you should stop the recording to avoid distorting the results.
|
As soon as you start using your device, you should stop the recording to avoid further diverging the results.
|
||||||
|
|
||||||
## Afterwards
|
## Afterwards
|
||||||
|
|
||||||
Upon completion you will find your recording in the section below. You can review your results and remove any user specific information if necessary.
|
Upon completion you will find your recording in the section below. You can review your results and remove any sensitive user information if necessary.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Welcome
|
# Welcome
|
||||||
|
|
||||||
AppCheck helps you identify which applications communicate with third parties. It does so by logging network requests. AppCheck learns only the destination addresses, not the actual data that is exchanged.
|
AppChk helps you identify which applications communicate with third parties. It does so by logging network requests. AppChk learns only the destination addresses, not the actual data that is exchanged.
|
||||||
|
|
||||||
Your data belongs to you. Therefore, monitoring and analysis take place on your device only. The app does not share any data with us or any other third-party. Unless you choose to.
|
Your data belongs to you. Therefore, monitoring and analysis take place on your device only. AppChk does not share any data with us or any other third-party. Unless you choose to.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# How it works
|
# How it works
|
||||||
|
|
||||||
AppCheck creates a local VPN tunnel to intercept all network connections. For each connection AppCheck looks into the DNS headers only, namely the domain names.
|
AppChk creates a local VPN tunnel to intercept all network connections. For each connection, AppChk looks into the DNS headers only, namely the domain names.
|
||||||
These domain names are logged in the background while the VPN is active. That means, AppCheck does not have to be active in the foreground. You can close the app and come back later to see the results.
|
These domain names are logged in the background while the VPN is active. That means, AppChk does not have to be active in the foreground. You can close the app and come back later to see the results.
|
||||||
|
|||||||
Reference in New Issue
Block a user