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/
|
||||
|
||||
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>"; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
@@ -446,7 +446,7 @@
|
||||
541AC5D52399498A00A769D7 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
541AC5D42399498A00A769D7 /* AppCheck.app */,
|
||||
541AC5D42399498A00A769D7 /* AppChk.app */,
|
||||
543CDB1D23EEE61900B7F323 /* GlassVPN.appex */,
|
||||
);
|
||||
name = Products;
|
||||
@@ -829,9 +829,9 @@
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
541AC5D32399498A00A769D7 /* AppCheck */ = {
|
||||
541AC5D32399498A00A769D7 /* AppChk */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 541AC5E62399498B00A769D7 /* Build configuration list for PBXNativeTarget "AppCheck" */;
|
||||
buildConfigurationList = 541AC5E62399498B00A769D7 /* Build configuration list for PBXNativeTarget "AppChk" */;
|
||||
buildPhases = (
|
||||
541AC5D02399498A00A769D7 /* Sources */,
|
||||
541AC5D12399498A00A769D7 /* Frameworks */,
|
||||
@@ -843,11 +843,11 @@
|
||||
dependencies = (
|
||||
543CDB2423EEE61900B7F323 /* PBXTargetDependency */,
|
||||
);
|
||||
name = AppCheck;
|
||||
name = AppChk;
|
||||
packageProductDependencies = (
|
||||
);
|
||||
productName = PrivacyScore;
|
||||
productReference = 541AC5D42399498A00A769D7 /* AppCheck.app */;
|
||||
productReference = 541AC5D42399498A00A769D7 /* AppChk.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
543CDB1C23EEE61900B7F323 /* GlassVPN */ = {
|
||||
@@ -876,7 +876,7 @@
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 1130;
|
||||
LastUpgradeCheck = 1200;
|
||||
LastUpgradeCheck = 1250;
|
||||
ORGANIZATIONNAME = relikd;
|
||||
TargetAttributes = {
|
||||
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";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
@@ -909,7 +909,7 @@
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
541AC5D32399498A00A769D7 /* AppCheck */,
|
||||
541AC5D32399498A00A769D7 /* AppChk */,
|
||||
543CDB1C23EEE61900B7F323 /* GlassVPN */,
|
||||
);
|
||||
};
|
||||
@@ -1307,7 +1307,7 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = main/main.entitlements;
|
||||
CURRENT_PROJECT_VERSION = 34;
|
||||
CURRENT_PROJECT_VERSION = 38;
|
||||
INFOPLIST_FILE = main/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -1315,8 +1315,9 @@
|
||||
);
|
||||
MARKETING_VERSION = 1.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck";
|
||||
PRODUCT_NAME = AppCheck;
|
||||
PRODUCT_NAME = AppChk;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -1326,7 +1327,7 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = main/main.entitlements;
|
||||
CURRENT_PROJECT_VERSION = 34;
|
||||
CURRENT_PROJECT_VERSION = 38;
|
||||
INFOPLIST_FILE = main/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -1334,8 +1335,9 @@
|
||||
);
|
||||
MARKETING_VERSION = 1.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck";
|
||||
PRODUCT_NAME = AppCheck;
|
||||
PRODUCT_NAME = AppChk;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
@@ -1345,7 +1347,7 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 34;
|
||||
CURRENT_PROJECT_VERSION = 38;
|
||||
INFOPLIST_FILE = GlassVPN/Info.plist;
|
||||
MARKETING_VERSION = 1.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
||||
@@ -1354,6 +1356,7 @@
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "GlassVPN/robbiehanson-CocoaAsyncSocket/CocoaAsyncSocket.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -1363,7 +1366,7 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 34;
|
||||
CURRENT_PROJECT_VERSION = 38;
|
||||
INFOPLIST_FILE = GlassVPN/Info.plist;
|
||||
MARKETING_VERSION = 1.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
||||
@@ -1371,13 +1374,14 @@
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "GlassVPN/robbiehanson-CocoaAsyncSocket/CocoaAsyncSocket.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
541AC5CF2399498A00A769D7 /* Build configuration list for PBXProject "AppCheck" */ = {
|
||||
541AC5CF2399498A00A769D7 /* Build configuration list for PBXProject "AppChk" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
541AC5E42399498B00A769D7 /* Debug */,
|
||||
@@ -1386,7 +1390,7 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
541AC5E62399498B00A769D7 /* Build configuration list for PBXNativeTarget "AppCheck" */ = {
|
||||
541AC5E62399498B00A769D7 /* Build configuration list for PBXNativeTarget "AppChk" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
541AC5E72399498B00A769D7 /* Debug */,
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1200"
|
||||
LastUpgradeVersion = "1250"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
@@ -15,9 +15,9 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
||||
BuildableName = "AppCheck.app"
|
||||
BlueprintName = "AppCheck"
|
||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
||||
BuildableName = "AppChk.app"
|
||||
BlueprintName = "AppChk"
|
||||
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
@@ -45,9 +45,9 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
||||
BuildableName = "AppCheck.app"
|
||||
BlueprintName = "AppCheck"
|
||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
||||
BuildableName = "AppChk.app"
|
||||
BlueprintName = "AppChk"
|
||||
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
@@ -61,9 +61,9 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
||||
BuildableName = "AppCheck.app"
|
||||
BlueprintName = "AppCheck"
|
||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
||||
BuildableName = "AppChk.app"
|
||||
BlueprintName = "AppChk"
|
||||
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</ProfileAction>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1200"
|
||||
LastUpgradeVersion = "1250"
|
||||
wasCreatedForAppExtension = "YES"
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
@@ -18,7 +18,7 @@
|
||||
BlueprintIdentifier = "543CDB1C23EEE61900B7F323"
|
||||
BuildableName = "GlassVPN.appex"
|
||||
BlueprintName = "GlassVPN"
|
||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
||||
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
@@ -30,9 +30,9 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
||||
BuildableName = "AppCheck.app"
|
||||
BlueprintName = "AppCheck"
|
||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
||||
BuildableName = "AppChk.app"
|
||||
BlueprintName = "AppChk"
|
||||
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
@@ -62,9 +62,9 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
||||
BuildableName = "AppCheck.app"
|
||||
BlueprintName = "AppCheck"
|
||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
||||
BuildableName = "AppChk.app"
|
||||
BlueprintName = "AppChk"
|
||||
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
@@ -74,15 +74,16 @@
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
askForAppToLaunch = "Yes"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "541AC5D32399498A00A769D7"
|
||||
BuildableName = "AppCheck.app"
|
||||
BlueprintName = "AppCheck"
|
||||
ReferencedContainer = "container:AppCheck.xcodeproj">
|
||||
BuildableName = "AppChk.app"
|
||||
BlueprintName = "AppChk"
|
||||
ReferencedContainer = "container:AppChk.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
@@ -20,6 +20,8 @@
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<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.
|
||||
@@ -8,35 +8,44 @@ A pocket DNS monitor and network filter.
|
||||
|
||||
## What is it?
|
||||
|
||||
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 applications that communicate with other parties.
|
||||
|
||||
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.
|
||||
|
||||
Join [Testflight beta](https://testflight.apple.com/join/9jjaFeHO)
|
||||
Join the [Testflight beta][testflight] or look at the evaluation results [appchk.de].
|
||||
|
||||
|
||||
### How does it work?
|
||||
|
||||
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.
|
||||
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 all the time.
|
||||
AppChk creates a local VPN proxy 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 running.
|
||||
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
|
||||
|
||||
- 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
|
||||
- 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)
|
||||
- Sort results by time, name, or occurrence count
|
||||
- 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?
|
||||
- Export results for custom analysis
|
||||
- Alert Monitor & reminder
|
||||
@@ -51,7 +60,19 @@ That means, AppCheck does not have to be active in the foreground all the time.
|
||||
|
||||
## 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/).
|
||||
Btw. we are searching for [help](https://appchk.de/help/) on our ongoing research project.
|
||||
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.
|
||||
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.
|
||||
func NotificationsDisabledAlert(presentIn viewController: UIViewController) {
|
||||
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
|
||||
URL(string: UIApplication.openSettingsURLString)?.open()
|
||||
}.presentIn(viewController)
|
||||
|
||||
@@ -521,7 +521,7 @@
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Guy-Ra-fpS" userLabel="Title">
|
||||
<rect key="frame" x="0.0" y="0.0" width="288" height="40"/>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<nil key="textColor"/>
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<?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"/>
|
||||
<dependencies>
|
||||
<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"/>
|
||||
</dependencies>
|
||||
<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">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<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>
|
||||
<tableViewSection headerTitle="VPN Proxy Settings" id="w58-6X-Jea">
|
||||
<cells>
|
||||
@@ -67,7 +68,7 @@
|
||||
<rect key="frame" x="113" y="13" width="73" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
</label>
|
||||
</subviews>
|
||||
@@ -94,7 +95,7 @@
|
||||
<rect key="frame" x="113" y="13" width="73" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
</label>
|
||||
</subviews>
|
||||
@@ -115,17 +116,17 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<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"/>
|
||||
<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"/>
|
||||
</label>
|
||||
</subviews>
|
||||
@@ -142,17 +143,17 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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">
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<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"/>
|
||||
<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"/>
|
||||
</label>
|
||||
</subviews>
|
||||
@@ -173,7 +174,7 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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">
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<nil key="textColor"/>
|
||||
@@ -183,7 +184,7 @@
|
||||
<rect key="frame" x="239.5" y="12" width="45.5" height="20.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
</label>
|
||||
</subviews>
|
||||
@@ -200,7 +201,7 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||
<state key="normal" title="Reset Introduction Alerts"/>
|
||||
@@ -222,11 +223,11 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||
<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>
|
||||
<connections>
|
||||
<action selector="clearDatabaseResults" destination="qdB-ZO-LHY" eventType="touchUpInside" id="heU-m1-oJq"/>
|
||||
@@ -251,17 +252,17 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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">
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</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">
|
||||
<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"/>
|
||||
<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"/>
|
||||
</label>
|
||||
<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"/>
|
||||
<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">
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<nil key="textColor"/>
|
||||
@@ -295,7 +296,7 @@
|
||||
<rect key="frame" x="15" y="25.5" width="220.5" height="14.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
</label>
|
||||
<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"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||
<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">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<prototypes>
|
||||
<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"/>
|
||||
@@ -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">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<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>
|
||||
<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.
|
||||
|
||||
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>
|
||||
<cells>
|
||||
@@ -508,7 +509,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<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"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
</label>
|
||||
</subviews>
|
||||
@@ -566,7 +567,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<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"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
</label>
|
||||
</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">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<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>
|
||||
<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"/>
|
||||
@@ -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">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<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>
|
||||
<tableViewSection headerTitle="Connection Alerts" footerTitle="Get a notification whenever a specific DNS request occurs." id="4OJ-qA-l8L">
|
||||
<cells>
|
||||
@@ -692,7 +693,7 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<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"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
</label>
|
||||
</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"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
</label>
|
||||
</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"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
</label>
|
||||
</subviews>
|
||||
@@ -902,6 +903,17 @@ If App Badge is enabled, display the letter "1" on the homescreen app icon, as l
|
||||
</scenes>
|
||||
<inferredMetricsTieBreakers>
|
||||
<segue reference="tUF-Kv-koO"/>
|
||||
<segue reference="EzT-Xq-wka"/>
|
||||
<segue reference="2ak-aX-wVl"/>
|
||||
</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>
|
||||
|
||||
@@ -89,7 +89,7 @@ final class GlassVPNManager {
|
||||
|
||||
private func createNewVPN(_ success: @escaping (_ manager: NETunnelProviderManager) -> Void) {
|
||||
let mgr = NETunnelProviderManager()
|
||||
mgr.localizedDescription = "AppCheck Monitor"
|
||||
mgr.localizedDescription = "AppChk Monitor"
|
||||
let proto = NETunnelProviderProtocol()
|
||||
proto.providerBundleIdentifier = GlassVPNManager.bundleIdentifier
|
||||
proto.serverAddress = "127.0.0.1"
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>LSSupportsOpeningDocumentsInPlace</key>
|
||||
|
||||
@@ -99,8 +99,8 @@ extension PushNotification {
|
||||
guard #available(iOS 10, *), PrefsShared.RestartReminder.WithText else { return }
|
||||
|
||||
schedule(.CantStopMeNowReminder,
|
||||
content: .make("AppCheck disabled",
|
||||
body: "AppCheck can't monitor network traffic because VPN has stopped.",
|
||||
content: .make("AppChk disabled",
|
||||
body: "AppChk can't monitor network traffic because VPN has stopped.",
|
||||
sound: .from(string: PrefsShared.RestartReminder.Sound)),
|
||||
trigger: .make(Date(timeIntervalSinceNow: 5 * 60)),
|
||||
waitUntilDone: true)
|
||||
|
||||
@@ -42,7 +42,7 @@ class TVCChooseAlertTone: UITableViewController {
|
||||
}
|
||||
|
||||
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 {
|
||||
@@ -70,7 +70,7 @@ fileprivate let AvailableSounds: [[(title: String, file: String)]] = [
|
||||
[ // System sounds
|
||||
("None", "#mute"),
|
||||
("Default", "#default")
|
||||
], [ // AppCheck sounds
|
||||
], [ // AppChk sounds
|
||||
("Clock", "clock"),
|
||||
("Drum 1", "drum1"),
|
||||
("Drum 2", "drum2"),
|
||||
|
||||
@@ -84,6 +84,44 @@ br.vet
|
||||
br.vlog
|
||||
br.wiki
|
||||
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.b
|
||||
co.com
|
||||
@@ -105,10 +143,10 @@ co.y
|
||||
er.com
|
||||
er.edu
|
||||
er.gov
|
||||
er.ind
|
||||
er.mil
|
||||
er.net
|
||||
er.org
|
||||
er.ind
|
||||
es.com
|
||||
es.edu
|
||||
es.gob
|
||||
@@ -207,6 +245,15 @@ in.res
|
||||
je.co
|
||||
je.net
|
||||
je.org
|
||||
jp.ac
|
||||
jp.ad
|
||||
jp.co
|
||||
jp.ed
|
||||
jp.go
|
||||
jp.gr
|
||||
jp.lg
|
||||
jp.ne
|
||||
jp.or
|
||||
kr.ac
|
||||
kr.busan
|
||||
kr.chungbuk
|
||||
@@ -256,6 +303,11 @@ lk.org
|
||||
lk.sch
|
||||
lk.soc
|
||||
lk.web
|
||||
mo.com
|
||||
mo.edu
|
||||
mo.gov
|
||||
mo.net
|
||||
mo.org
|
||||
ms.com
|
||||
ms.edu
|
||||
ms.gov
|
||||
@@ -477,6 +529,16 @@ tt.org
|
||||
tt.pro
|
||||
tt.tel
|
||||
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.cherkasy
|
||||
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:
|
||||
|
||||
<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.
|
||||
|
||||
_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?
|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
@@ -4,17 +4,17 @@ Before you begin, there are two types of recordings: app specific recordings and
|
||||
|
||||
### 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
|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
As soon as you start using your device, you should stop the recording to avoid distorting the results.
|
||||
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 further diverging the results.
|
||||
|
||||
## 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
|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
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.
|
||||
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, 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