Update iOS app

This commit is contained in:
Neil Alexander 2022-11-01 18:25:42 +00:00
parent 56919b83a8
commit c60f7f18fb
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
20 changed files with 328 additions and 719 deletions

View file

@ -14,6 +14,6 @@ import AppKit
extension Notification.Name {
static let YggdrasilSelfUpdated = Notification.Name("YggdrasilSelfUpdated")
static let YggdrasilPeersUpdated = Notification.Name("YggdrasilPeersUpdated")
static let YggdrasilSwitchPeersUpdated = Notification.Name("YggdrasilSwitchPeersUpdated")
static let YggdrasilSettingsUpdated = Notification.Name("YggdrasilSettingsUpdated")
static let YggdrasilDHTUpdated = Notification.Name("YggdrasilPeersUpdated")
}

View file

@ -1,23 +1,56 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "img1.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "img1w.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "img2.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "img2w.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "img3.png",
"idiom" : "universal",
"scale" : "3x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "img3w.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

View file

@ -1,12 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="18122" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina4_7" orientation="portrait" appearance="dark"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="18093"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
@ -19,20 +18,21 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="YggdrasilNetwork" translatesAutoresizingMaskIntoConstraints="NO" id="3Lc-gG-kep">
<rect key="frame" x="28" y="229.5" width="319" height="128"/>
<rect key="frame" x="28" y="219.5" width="319" height="128"/>
<color key="tintColor" systemColor="labelColor"/>
<constraints>
<constraint firstAttribute="width" secondItem="3Lc-gG-kep" secondAttribute="height" multiplier="159:64" id="NYe-AY-mCL"/>
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="400" id="lIj-gT-vW9"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Experimental" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0Nr-Vm-h9W">
<rect key="frame" x="137.5" y="626" width="100" height="21"/>
<rect key="frame" x="138" y="626" width="99" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="3Lc-gG-kep" secondAttribute="trailing" constant="28" id="J9j-Ek-mVq"/>
<constraint firstItem="3Lc-gG-kep" firstAttribute="centerY" secondItem="6Tk-OE-BBY" secondAttribute="centerY" constant="-50" id="MLF-C3-5Is"/>
@ -41,7 +41,6 @@
<constraint firstItem="0Nr-Vm-h9W" firstAttribute="centerX" secondItem="6Tk-OE-BBY" secondAttribute="centerX" id="ZHc-EA-sHG"/>
<constraint firstItem="3Lc-gG-kep" firstAttribute="centerX" secondItem="6Tk-OE-BBY" secondAttribute="centerX" id="xej-Yh-XPz"/>
</constraints>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
@ -50,6 +49,12 @@
</scene>
</scenes>
<resources>
<image name="YggdrasilNetwork" width="785.45452880859375" height="256.90908813476562"/>
<image name="YggdrasilNetwork" width="480" height="157"/>
<systemColor name="labelColor">
<color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>

View file

@ -1,9 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="sjP-mj-LKX">
<device id="retina4_0" orientation="portrait" appearance="light"/>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="18122" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="sjP-mj-LKX">
<device id="ipad10_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15510"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="18093"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
@ -11,20 +13,19 @@
<scene sceneID="YjI-Ak-tYt">
<objects>
<tableViewController title="Peers" id="Aro-kj-1Us" customClass="PeersViewController" customModule="YggdrasilNetwork" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="jrG-5P-x67">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="insetGrouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="jrG-5P-x67">
<rect key="frame" x="0.0" y="0.0" width="704" height="995.5"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="configuredPeerPrototype" textLabel="s5X-wa-HWH" style="IBUITableViewCellStyleDefault" id="8Oo-lj-bGn">
<rect key="frame" x="0.0" y="55.5" width="320" height="43.5"/>
<rect key="frame" x="20" y="49.5" width="664" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="8Oo-lj-bGn" id="l78-DB-hkK">
<rect key="frame" x="0.0" y="0.0" width="320" height="43.5"/>
<rect key="frame" x="0.0" y="0.0" width="664" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="(discovered)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="s5X-wa-HWH">
<rect key="frame" x="16" y="0.0" width="288" height="43.5"/>
<rect key="frame" x="16" y="0.0" width="632" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
@ -34,14 +35,14 @@
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="discoveredPeerPrototype" textLabel="DBc-bQ-Fql" detailTextLabel="6Zr-Ab-5mg" style="IBUITableViewCellStyleSubtitle" id="GeY-vZ-Kfa">
<rect key="frame" x="0.0" y="99" width="320" height="55.5"/>
<rect key="frame" x="20" y="93" width="664" height="55.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="GeY-vZ-Kfa" id="CVl-gJ-x3R">
<rect key="frame" x="0.0" y="0.0" width="320" height="55.5"/>
<rect key="frame" x="0.0" y="0.0" width="664" height="55.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="(static)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="DBc-bQ-Fql">
<rect key="frame" x="16" y="10" width="54.5" height="20.5"/>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="(static)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="DBc-bQ-Fql" customClass="CopyableLabel" customModule="YggdrasilNetwork" customModuleProvider="target">
<rect key="frame" x="16" y="10" width="54" height="20.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
@ -58,14 +59,14 @@
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="menuPrototype" textLabel="hGp-hS-MXO" style="IBUITableViewCellStyleDefault" id="X8B-Ij-Uxu">
<rect key="frame" x="0.0" y="154.5" width="320" height="43.5"/>
<rect key="frame" x="20" y="148.5" width="664" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="X8B-Ij-Uxu" id="VFl-pZ-ioq">
<rect key="frame" x="0.0" y="0.0" width="293" height="43.5"/>
<rect key="frame" x="0.0" y="0.0" width="638.5" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Menu item" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hGp-hS-MXO">
<rect key="frame" x="16" y="0.0" width="269" height="43.5"/>
<rect key="frame" x="16" y="0.0" width="614.5" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
@ -75,20 +76,20 @@
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="togglePrototype" id="7yi-ur-bht" customClass="ToggleTableViewCell" customModule="YggdrasilNetwork" customModuleProvider="target">
<rect key="frame" x="0.0" y="198" width="320" height="44"/>
<rect key="frame" x="20" y="192" width="664" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="7yi-ur-bht" id="xEb-l3-99b">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="664" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Toggle item" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ij2-ls-8ZT">
<rect key="frame" x="16" y="12.5" width="231" height="21"/>
<rect key="frame" x="16" y="12.5" width="575" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="MYo-S3-kzH">
<rect key="frame" x="255" y="7" width="51" height="31.5"/>
<rect key="frame" x="599" y="7" width="51" height="31.5"/>
</switch>
</subviews>
<constraints>
@ -135,7 +136,7 @@
<objects>
<navigationController title="Peers" id="LPj-bu-hdp" sceneMemberID="viewController">
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="ifJ-0T-bJ4">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="499.5" height="50"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<connections>
@ -150,22 +151,21 @@
<scene sceneID="VfF-sj-c5P">
<objects>
<tableViewController title="Settings" id="FeQ-BB-bF5" customClass="SettingsViewController" customModule="YggdrasilNetwork" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="Cd3-Fg-6d3">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="insetGrouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="Cd3-Fg-6d3">
<rect key="frame" x="0.0" y="0.0" width="499.5" height="1180"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
<sections>
<tableViewSection headerTitle="Node Info" footerTitle="Information entered here is public and may be shown on network maps." id="su8-4b-N3L">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" id="nxn-IW-t8I">
<rect key="frame" x="0.0" y="55.5" width="320" height="44"/>
<rect key="frame" x="20" y="49.5" width="459.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="nxn-IW-t8I" id="a0m-Mn-9fE">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="459.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField opaque="NO" contentMode="scaleToFill" horizontalCompressionResistancePriority="250" contentHorizontalAlignment="trailing" contentVerticalAlignment="center" placeholder="None" textAlignment="right" adjustsFontForContentSizeCategory="YES" minimumFontSize="9" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="iRg-tv-diq">
<rect key="frame" x="134" y="1" width="171" height="43"/>
<rect key="frame" x="134" y="1" width="310.5" height="43"/>
<constraints>
<constraint firstAttribute="height" constant="43" id="cRe-aZ-mWa"/>
</constraints>
@ -199,17 +199,17 @@
</tableViewCell>
</cells>
</tableViewSection>
<tableViewSection headerTitle="Automatically Start On" footerTitle="Yggdrasil will be automatically started when connected to the above networks." id="bjf-vx-Swh">
<tableViewSection headerTitle="Automatically Start On" footerTitle="Yggdrasil will be started automatically when connected to the above networks." id="bjf-vx-Swh">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="checkmark" indentationWidth="10" textLabel="NYE-Pu-5Gk" style="IBUITableViewCellStyleDefault" id="pwi-5Y-UxD">
<rect key="frame" x="0.0" y="191" width="320" height="44"/>
<rect key="frame" x="20" y="159.5" width="459.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="pwi-5Y-UxD" id="631-3X-gfX">
<rect key="frame" x="0.0" y="0.0" width="280" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="423" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Wi-Fi" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="NYE-Pu-5Gk">
<rect key="frame" x="16" y="0.0" width="256" height="44"/>
<rect key="frame" x="16" y="0.0" width="399" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
@ -220,14 +220,14 @@
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="checkmark" indentationWidth="10" textLabel="ZdY-uX-KE6" style="IBUITableViewCellStyleDefault" id="iwW-oY-kqV">
<rect key="frame" x="0.0" y="235" width="320" height="44"/>
<rect key="frame" x="20" y="203.5" width="459.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="iwW-oY-kqV" id="Pe0-bO-Sd1">
<rect key="frame" x="0.0" y="0.0" width="280" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="423" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Mobile Network" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ZdY-uX-KE6">
<rect key="frame" x="16" y="0.0" width="256" height="44"/>
<rect key="frame" x="16" y="0.0" width="399" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
@ -239,110 +239,20 @@
</tableViewCell>
</cells>
</tableViewSection>
<tableViewSection headerTitle="Allow traffic from" id="s6m-tK-gtR">
<string key="footerTitle">The above options allow you to control whether your device is reachable from other devices on the network. "All outgoing traffic" allows connections only to devices that you initiate first. This does not affect peerings.</string>
<tableViewSection headerTitle="Public Key" footerTitle="Your public key forms your identity on the network. It is safe to be shared." id="Bqi-0N-6vQ">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="checkmark" indentationWidth="10" textLabel="X1a-uW-3xE" style="IBUITableViewCellStyleDefault" id="SLl-8Z-hnZ">
<rect key="frame" x="0.0" y="370.5" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="SLl-8Z-hnZ" id="erI-m7-1Qf">
<rect key="frame" x="0.0" y="0.0" width="280" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Peered devices" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="X1a-uW-3xE">
<rect key="frame" x="16" y="0.0" width="256" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="checkmark" indentationWidth="10" textLabel="aBz-rP-L1T" style="IBUITableViewCellStyleDefault" id="D0S-Qw-28s">
<rect key="frame" x="0.0" y="414.5" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="D0S-Qw-28s" id="PQQ-JM-w0f">
<rect key="frame" x="0.0" y="0.0" width="280" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Other devices" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="aBz-rP-L1T">
<rect key="frame" x="16" y="0.0" width="256" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="checkmark" indentationWidth="10" textLabel="1NE-eU-QbN" style="IBUITableViewCellStyleDefault" id="LgH-VV-ofl">
<rect key="frame" x="0.0" y="458.5" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="LgH-VV-ofl" id="TYk-M2-yjB">
<rect key="frame" x="0.0" y="0.0" width="280" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="All outgoing traffic" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="1NE-eU-QbN">
<rect key="frame" x="16" y="0.0" width="256" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
</cells>
</tableViewSection>
<tableViewSection headerTitle="Public Keys" footerTitle="Your public keys form your identity on the network. They are safe to be shared." id="Bqi-0N-6vQ">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" textLabel="HTU-3c-4CN" detailTextLabel="P02-mF-z69" style="IBUITableViewCellStyleValue1" id="Osh-HO-1v1">
<rect key="frame" x="0.0" y="642" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Osh-HO-1v1" id="GnT-sE-p01">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Encryption" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="HTU-3c-4CN">
<rect key="frame" x="16" y="12" width="82.5" height="20.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Unknown" textAlignment="right" lineBreakMode="headTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="P02-mF-z69" customClass="CopyableLabel" customModule="YggdrasilNetwork" customModuleProvider="target">
<rect key="frame" x="232" y="12" width="72" height="20.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" textLabel="SeD-oT-h3h" detailTextLabel="ISL-Pq-1z4" style="IBUITableViewCellStyleValue1" id="80f-wf-ING">
<rect key="frame" x="0.0" y="686" width="320" height="44"/>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" textLabel="SeD-oT-h3h" style="IBUITableViewCellStyleDefault" id="80f-wf-ING">
<rect key="frame" x="20" y="327.5" width="459.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="80f-wf-ING" id="fed-pT-rbF">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="459.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Signing" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="SeD-oT-h3h">
<rect key="frame" x="16" y="12" width="57.5" height="20.5"/>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Signing" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="SeD-oT-h3h" customClass="CopyableLabel" customModule="YggdrasilNetwork" customModuleProvider="target">
<rect key="frame" x="16" y="0.0" width="427.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Unknown" textAlignment="right" lineBreakMode="headTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ISL-Pq-1z4" customClass="CopyableLabel" customModule="YggdrasilNetwork" customModuleProvider="target">
<rect key="frame" x="232" y="12" width="72" height="20.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="Menlo-Regular" family="Menlo" pointSize="16"/>
<color key="textColor" systemColor="secondaryLabelColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
@ -351,17 +261,17 @@
</cells>
</tableViewSection>
<tableViewSection headerTitle="Backup" id="mD0-CO-qvR">
<string key="footerTitle">Configuration will be exported to the Files app. Your configuration contains your private keys which are extremely sensitive. You must not share it with others.</string>
<string key="footerTitle">Configuration will be exported to the Files app. Your configuration contains your private key which is extremely sensitive. You must not share it with others.</string>
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" textLabel="0zV-IH-vF4" style="IBUITableViewCellStyleDefault" id="IgR-eA-aHt">
<rect key="frame" x="0.0" y="821.5" width="320" height="44"/>
<rect key="frame" x="20" y="437.5" width="459.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="IgR-eA-aHt" id="wsZ-KR-yUu">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="459.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Import configuration" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="0zV-IH-vF4">
<rect key="frame" x="16" y="0.0" width="288" height="44"/>
<rect key="frame" x="16" y="0.0" width="427.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
@ -372,14 +282,14 @@
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" textLabel="n0W-r2-Cp7" style="IBUITableViewCellStyleDefault" id="Fgj-Ug-A8R">
<rect key="frame" x="0.0" y="865.5" width="320" height="44"/>
<rect key="frame" x="20" y="481.5" width="459.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Fgj-Ug-A8R" id="l0v-9n-Tzb">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="459.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Export configuration" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="n0W-r2-Cp7">
<rect key="frame" x="15" y="0.0" width="297" height="44"/>
<rect key="frame" x="16" y="0.0" width="427.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
@ -394,14 +304,14 @@
<tableViewSection headerTitle="Reset" footerTitle="Resetting will overwrite with newly generated configuration. Your public keys and IP address on the network will change." id="QPd-T4-5id">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" textLabel="Jc5-vz-oTA" style="IBUITableViewCellStyleDefault" id="Cgi-Yk-esa">
<rect key="frame" x="0.0" y="1033" width="320" height="44"/>
<rect key="frame" x="20" y="619.5" width="459.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Cgi-Yk-esa" id="qMT-ha-vJK">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="459.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Reset configuration" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Jc5-vz-oTA">
<rect key="frame" x="15" y="0.0" width="297" height="44"/>
<rect key="frame" x="16" y="0.0" width="427.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
@ -424,11 +334,7 @@
<outlet property="autoStartMobileCell" destination="iwW-oY-kqV" id="kDV-jT-IBR"/>
<outlet property="autoStartWiFiCell" destination="pwi-5Y-UxD" id="UJo-BZ-aXf"/>
<outlet property="deviceNameField" destination="iRg-tv-diq" id="ffH-UY-BAT"/>
<outlet property="encryptionPublicKeyLabel" destination="P02-mF-z69" id="Yee-Zz-cFd"/>
<outlet property="sessionFirewallOtherCell" destination="D0S-Qw-28s" id="Wtm-yf-r4z"/>
<outlet property="sessionFirewallOutboundCell" destination="LgH-VV-ofl" id="1hr-Qy-6ip"/>
<outlet property="sessionFirewallPeeredCell" destination="SLl-8Z-hnZ" id="rR6-pc-7Jc"/>
<outlet property="signingPublicKeyLabel" destination="ISL-Pq-1z4" id="SVQ-aX-N3C"/>
<outlet property="signingPublicKeyLabel" destination="SeD-oT-h3h" id="5eK-yA-3LM"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="eco-Zl-sgd" userLabel="First Responder" sceneMemberID="firstResponder"/>
@ -440,7 +346,7 @@
<objects>
<navigationController title="Settings" id="g4p-RE-Qtl" sceneMemberID="viewController">
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="p6Z-I0-Zza">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="499.5" height="50"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<connections>
@ -455,28 +361,27 @@
<scene sceneID="zY7-dE-7Ay">
<objects>
<tableViewController title="Yggdrasil" id="s1Q-pC-XBn" customClass="TableViewController" customModule="YggdrasilNetwork" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="vHG-eF-QEu">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="insetGrouped" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="vHG-eF-QEu">
<rect key="frame" x="0.0" y="0.0" width="420" height="1180"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
<sections>
<tableViewSection footerTitle="You must restart Yggdrasil to make configuration changes effective." id="Jwl-JP-RuU">
<tableViewSection headerTitle="Status" id="Jwl-JP-RuU">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" id="49H-YI-ie3">
<rect key="frame" x="0.0" y="18" width="320" height="44"/>
<rect key="frame" x="116" y="49.5" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="49H-YI-ie3" id="ZPC-T2-kah">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enable Yggdrasil" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="alk-ml-y9V">
<rect key="frame" x="16" y="12" width="127" height="20"/>
<rect key="frame" x="16" y="12" width="126" height="20"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="trailing" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="qre-Dz-rWw">
<rect key="frame" x="255" y="7" width="51" height="31"/>
<rect key="frame" x="223" y="7" width="51" height="31"/>
<connections>
<action selector="toggleVPNStatus:forEvent:" destination="s1Q-pC-XBn" eventType="valueChanged" id="Mvh-gf-qg0"/>
</connections>
@ -492,14 +397,14 @@
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" textLabel="dZv-7O-fZv" style="IBUITableViewCellStyleDefault" id="m9f-Bi-XeH">
<rect key="frame" x="0.0" y="62" width="320" height="44"/>
<rect key="frame" x="116" y="93.5" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="m9f-Bi-XeH" id="utU-J9-9M8">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="No active connections" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="dZv-7O-fZv">
<rect key="frame" x="16" y="0.0" width="288" height="44"/>
<rect key="frame" x="16" y="0.0" width="256" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/>
<color key="textColor" name="systemRedColor" catalog="System" colorSpace="catalog"/>
@ -513,72 +418,72 @@
<tableViewSection headerTitle="Statistics" id="nJf-RJ-qUC">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="0.0" textLabel="MUj-Ni-chU" detailTextLabel="ceY-dc-u9v" style="IBUITableViewCellStyleValue1" id="Ela-vk-pnR">
<rect key="frame" x="0.0" y="190" width="320" height="44"/>
<rect key="frame" x="116" y="187.5" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Ela-vk-pnR" id="fnr-ZG-yiF">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="IP" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="MUj-Ni-chU">
<rect key="frame" x="16" y="12" width="15" height="20.5"/>
<rect key="frame" x="16" y="12" width="14.5" height="20.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="N/A" textAlignment="right" lineBreakMode="headTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" adjustsFontForContentSizeCategory="YES" id="ceY-dc-u9v" customClass="CopyableLabel" customModule="YggdrasilNetwork" customModuleProvider="target">
<rect key="frame" x="275.5" y="12" width="28.5" height="20.5"/>
<rect key="frame" x="248.5" y="15" width="23.5" height="17"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="textColor" systemColor="secondaryLabelColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="blue" indentationWidth="10" textLabel="Q8j-k7-HTk" detailTextLabel="MLH-EY-4VQ" style="IBUITableViewCellStyleValue1" id="1BH-o1-n90">
<rect key="frame" x="0.0" y="234" width="320" height="44"/>
<rect key="frame" x="116" y="231.5" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="1BH-o1-n90" id="aLD-3W-BlB">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Subnet" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Q8j-k7-HTk">
<rect key="frame" x="16" y="12" width="55" height="20.5"/>
<rect key="frame" x="16" y="12" width="54.5" height="20.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="N/A" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontForContentSizeCategory="YES" adjustsFontSizeToFit="NO" id="MLH-EY-4VQ" customClass="CopyableLabel" customModule="YggdrasilNetwork" customModuleProvider="target">
<rect key="frame" x="275.5" y="12" width="28.5" height="20.5"/>
<rect key="frame" x="248.5" y="15" width="23.5" height="17"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
<color key="textColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="textColor" systemColor="secondaryLabelColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" textLabel="9jY-kM-E6n" detailTextLabel="JYJ-ov-02q" style="IBUITableViewCellStyleValue1" id="g00-iP-grJ">
<rect key="frame" x="0.0" y="278" width="320" height="44"/>
<rect key="frame" x="116" y="275.5" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="g00-iP-grJ" id="C21-9O-H5d">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Coordinates" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="9jY-kM-E6n">
<rect key="frame" x="16" y="12" width="93" height="20.5"/>
<rect key="frame" x="16" y="12" width="92.5" height="20.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="[]" textAlignment="right" lineBreakMode="headTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" adjustsFontForContentSizeCategory="YES" id="JYJ-ov-02q" customClass="CopyableLabel" customModule="YggdrasilNetwork" customModuleProvider="target">
<rect key="frame" x="291.5" y="12" width="12.5" height="20.5"/>
<rect key="frame" x="261.5" y="15" width="10.5" height="17"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="textColor" systemColor="secondaryLabelColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
@ -586,13 +491,13 @@
</tableViewCell>
</cells>
</tableViewSection>
<tableViewSection headerTitle="Configuration" id="gRf-Ts-qeJ">
<tableViewSection headerTitle="Configuration" footerTitle="You must re-enable Yggdrasil after modifying Peers or Settings to make any changes effective." id="gRf-Ts-qeJ">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="blue" accessoryType="disclosureIndicator" indentationWidth="10" textLabel="rT6-UD-Cn5" detailTextLabel="vc0-Rq-wtq" style="IBUITableViewCellStyleValue1" id="qRF-c3-JyG">
<rect key="frame" x="0.0" y="378" width="320" height="44"/>
<rect key="frame" x="116" y="377" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="qRF-c3-JyG" id="gcO-mr-jgp">
<rect key="frame" x="0.0" y="0.0" width="293" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="262.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Peers" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="rT6-UD-Cn5">
@ -603,10 +508,10 @@
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="No peers" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontForContentSizeCategory="YES" adjustsFontSizeToFit="NO" id="vc0-Rq-wtq">
<rect key="frame" x="215.5" y="12" width="69.5" height="20.5"/>
<rect key="frame" x="196" y="15" width="58.5" height="17"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
<color key="textColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="textColor" systemColor="secondaryLabelColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
@ -616,14 +521,14 @@
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="blue" accessoryType="disclosureIndicator" indentationWidth="10" textLabel="CPw-Tm-fZl" style="IBUITableViewCellStyleDefault" id="Ugm-vO-zYq">
<rect key="frame" x="0.0" y="422" width="320" height="44"/>
<rect key="frame" x="116" y="421" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Ugm-vO-zYq" id="Jkh-no-wta">
<rect key="frame" x="0.0" y="0.0" width="293" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="262.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Settings" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="CPw-Tm-fZl">
<rect key="frame" x="16" y="0.0" width="269" height="44"/>
<rect key="frame" x="16" y="0.0" width="238.5" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
@ -635,6 +540,30 @@
<segue destination="g4p-RE-Qtl" kind="showDetail" id="hEo-ra-aPX"/>
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" textLabel="it5-My-OoQ" detailTextLabel="1mF-wN-xLU" style="IBUITableViewCellStyleValue1" id="SNP-Qf-NZg">
<rect key="frame" x="116" y="465" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="SNP-Qf-NZg" id="2mC-0D-KCT">
<rect key="frame" x="0.0" y="0.0" width="288" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Version" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="it5-My-OoQ">
<rect key="frame" x="16" y="12" width="57" height="20.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Unknown" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="1mF-wN-xLU">
<rect key="frame" x="211.5" y="15" width="60.5" height="17"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
<color key="textColor" systemColor="secondaryLabelColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
</cells>
</tableViewSection>
</sections>
@ -660,6 +589,7 @@
<outlet property="statsSelfPeers" destination="vc0-Rq-wtq" id="usQ-EN-040"/>
<outlet property="statsSelfSubnet" destination="MLH-EY-4VQ" id="33U-qS-FUE"/>
<outlet property="statsSelfSubnetCell" destination="1BH-o1-n90" id="Njb-oQ-W5C"/>
<outlet property="statsVersion" destination="1mF-wN-xLU" id="drW-io-cYk"/>
<outlet property="toggleConnect" destination="qre-Dz-rWw" id="Oox-v4-K0x"/>
<outlet property="toggleLabel" destination="alk-ml-y9V" id="o4p-Xn-ofm"/>
<outlet property="toggleTableView" destination="vHG-eF-QEu" id="iNr-0v-RoB"/>
@ -669,15 +599,45 @@
</objects>
<point key="canvasLocation" x="2571" y="-338"/>
</scene>
<!--View Controller-->
<scene sceneID="VMS-X3-A7G">
<objects>
<viewController id="j4D-sS-gKL" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="eFY-KL-QD6">
<rect key="frame" x="0.0" y="0.0" width="499.5" height="1180"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.10000000000000001" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="YggdrasilNetwork" translatesAutoresizingMaskIntoConstraints="NO" id="pD8-7E-1Fb">
<rect key="frame" x="100" y="511" width="299.5" height="98"/>
<constraints>
<constraint firstAttribute="width" secondItem="pD8-7E-1Fb" secondAttribute="height" multiplier="480:157" id="60u-Jo-0oL"/>
</constraints>
</imageView>
</subviews>
<viewLayoutGuide key="safeArea" id="99T-rn-Aup"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="pD8-7E-1Fb" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="99T-rn-Aup" secondAttribute="leading" constant="100" id="ByQ-oN-wNr"/>
<constraint firstItem="99T-rn-Aup" firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="pD8-7E-1Fb" secondAttribute="trailing" constant="100" id="b14-Ic-a2R"/>
<constraint firstItem="pD8-7E-1Fb" firstAttribute="centerX" secondItem="eFY-KL-QD6" secondAttribute="centerX" id="kZ4-ij-5GT"/>
<constraint firstItem="pD8-7E-1Fb" firstAttribute="centerY" secondItem="eFY-KL-QD6" secondAttribute="centerY" constant="-30" id="xxi-aE-iPO"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Z9V-gc-NxA" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1474" y="-1008"/>
</scene>
<!--Yggdrasil-->
<scene sceneID="NHm-je-2CC">
<objects>
<navigationController title="Yggdrasil" id="Dz7-et-ljx" sceneMemberID="viewController">
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" largeTitles="YES" id="uxo-U2-UUS">
<rect key="frame" x="0.0" y="0.0" width="320" height="91"/>
<rect key="frame" x="0.0" y="0.0" width="420" height="102"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<toolbar key="toolbar" opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="6hK-6f-rI2">
<rect key="frame" x="100" y="0.0" width="0.0" height="0.0"/>
<autoresizingMask key="autoresizingMask"/>
</toolbar>
<connections>
@ -691,9 +651,10 @@
<!--Split View Controller-->
<scene sceneID="9co-Q0-BvB">
<objects>
<splitViewController modalPresentationStyle="pageSheet" id="sjP-mj-LKX" customClass="SplitViewController" customModule="YggdrasilNetwork" customModuleProvider="target" sceneMemberID="viewController">
<splitViewController modalPresentationStyle="pageSheet" allowDoubleColumnStyle="YES" preferredDisplayMode="beside" behavior="tile" presentsWithGesture="NO" id="sjP-mj-LKX" customClass="SplitViewController" customModule="YggdrasilNetwork" customModuleProvider="target" sceneMemberID="viewController">
<connections>
<segue destination="Dz7-et-ljx" kind="relationship" relationship="masterViewController" id="QfQ-La-EfI"/>
<segue destination="j4D-sS-gKL" kind="relationship" relationship="detailViewController" id="RcM-Sy-h8j"/>
</connections>
</splitViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Fe3-ey-WRA" userLabel="First Responder" sceneMemberID="firstResponder"/>
@ -701,4 +662,13 @@
<point key="canvasLocation" x="811" y="-5"/>
</scene>
</scenes>
<resources>
<image name="YggdrasilNetwork" width="480" height="157"/>
<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>
</resources>
</document>

View file

@ -49,7 +49,7 @@ class PeersViewController: UITableViewController {
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0: return app.yggdrasilSwitchPeers.count
case 0: return app.yggdrasilPeers.count
case 1:
if let config = self.app.yggdrasilConfig {
if let peers = config.get("Peers") as? [String] {
@ -58,9 +58,6 @@ class PeersViewController: UITableViewController {
}
return 0
case 2:
if UIDevice.current.hasCellularCapabilites {
return 3
}
return 2
default: return 0
}
@ -70,20 +67,18 @@ class PeersViewController: UITableViewController {
switch indexPath.section {
case 0:
let cell = tableView.dequeueReusableCell(withIdentifier: "discoveredPeerPrototype", for: indexPath)
let peers = app.yggdrasilSwitchPeers.sorted { (a, b) -> Bool in
let peers = app.yggdrasilPeers.sorted { (a, b) -> Bool in
return (a["Port"] as! Int) < (b["Port"] as! Int)
}
if indexPath.row < peers.count {
let value = peers[indexPath.row]
let proto = value["Protocol"] as? String ?? "tcp"
let sent = value["BytesSent"] as? Double ?? 0
let recvd = value["BytesRecvd"] as? Double ?? 0
let rx = self.format(bytes: sent)
let tx = self.format(bytes: recvd)
let remote = value["Remote"] as? String ?? "unknown"
let prio = value["Priority"] as? Int ?? 0
cell.textLabel?.text = "\(value["Endpoint"] ?? "unknown")"
cell.detailTextLabel?.text = "\(proto.uppercased()) peer on port \(value["Port"] ?? "unknown"), sent \(tx), received \(rx)"
cell.textLabel?.text = "\(value["IP"] ?? "(unknown)")"
cell.detailTextLabel?.text = "\(proto.uppercased()): \(remote)"
}
return cell
case 1:
@ -101,33 +96,24 @@ class PeersViewController: UITableViewController {
case 0:
let cell = tableView.dequeueReusableCell(withIdentifier: "togglePrototype", for: indexPath) as! ToggleTableViewCell
cell.isUserInteractionEnabled = true
cell.label?.text = "Search for multicast peers"
cell.label?.text = "Discoverable over multicast"
cell.label?.isEnabled = true
cell.toggle?.addTarget(self, action: #selector(toggledMulticast), for: .valueChanged)
cell.toggle?.addTarget(self, action: #selector(toggledMulticastBeacons), for: .valueChanged)
cell.toggle?.isEnabled = true
if let config = self.app.yggdrasilConfig {
let interfaces = config.get("MulticastInterfaces") as? [String] ?? []
cell.toggle?.isOn = interfaces.contains("en*")
cell.toggle?.isOn = config.multicastBeacons
}
return cell
case 1:
let cell = tableView.dequeueReusableCell(withIdentifier: "togglePrototype", for: indexPath) as! ToggleTableViewCell
cell.isUserInteractionEnabled = false
cell.label?.text = "Search for nearby iOS peers"
cell.label?.isEnabled = false
cell.toggle?.addTarget(self, action: #selector(toggledAWDL), for: .valueChanged)
cell.toggle?.setOn(false, animated: false)
cell.toggle?.isEnabled = false
/*if let config = self.app.yggdrasilConfig {
let interfaces = config.get("MulticastInterfaces") as? [String] ?? []
cell.toggle?.isOn = interfaces.contains("awdl0")
}*/
return cell
case 2:
let cell = tableView.dequeueReusableCell(withIdentifier: "menuPrototype", for: indexPath)
cell.isUserInteractionEnabled = true
cell.textLabel?.text = "Device settings"
cell.textLabel?.isEnabled = true
cell.label?.text = "Search for multicast peers"
cell.label?.isEnabled = true
cell.toggle?.addTarget(self, action: #selector(toggledMulticastListen), for: .valueChanged)
cell.toggle?.isEnabled = true
if let config = self.app.yggdrasilConfig {
cell.toggle?.isOn = config.multicastListen
}
return cell
default:
let cell = tableView.dequeueReusableCell(withIdentifier: "menuPrototype", for: indexPath)
@ -163,28 +149,16 @@ class PeersViewController: UITableViewController {
return "\(numberString) \(suffix)"
}
@objc func toggledMulticast(_ sender: UISwitch) {
@objc func toggledMulticastBeacons(_ sender: UISwitch) {
if let config = self.app.yggdrasilConfig {
var interfaces = config.get("MulticastInterfaces") as! [String]
if sender.isOn {
interfaces.append("en*")
} else {
interfaces.removeAll(where: { $0 == "en*" })
}
config.set("MulticastInterfaces", to: interfaces as [String])
config.multicastBeacons = sender.isOn
try? config.save(to: &app.vpnManager)
}
}
@objc func toggledAWDL(_ sender: UISwitch) {
@objc func toggledMulticastListen(_ sender: UISwitch) {
if let config = self.app.yggdrasilConfig {
var interfaces = config.get("MulticastInterfaces") as! [String]
if sender.isOn {
interfaces.append("awdl0")
} else {
interfaces.removeAll(where: { $0 == "awdl0" })
}
config.set("MulticastInterfaces", to: interfaces as [String])
config.multicastListen = sender.isOn
try? config.save(to: &app.vpnManager)
}
}
@ -214,7 +188,7 @@ class PeersViewController: UITableViewController {
override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
switch section {
case 1:
return "Yggdrasil will automatically attempt to connect to configured peers when started."
return "Yggdrasil will automatically attempt to connect to configured peers when started. If you configure more than one peer, your device may carry traffic on behalf of other network nodes. Avoid this by configuring only a single peer."
case 2:
var str = "Multicast peers will be discovered on the same Wi-Fi network or via USB."
if UIDevice.current.hasCellularCapabilites {

View file

@ -13,28 +13,18 @@ class SettingsViewController: UITableViewController, UIDocumentBrowserViewContro
@IBOutlet weak var deviceNameField: UITextField!
@IBOutlet weak var encryptionPublicKeyLabel: UILabel!
@IBOutlet weak var signingPublicKeyLabel: UILabel!
@IBOutlet weak var autoStartWiFiCell: UITableViewCell!
@IBOutlet weak var autoStartMobileCell: UITableViewCell!
@IBOutlet weak var sessionFirewallPeeredCell: UITableViewCell!
@IBOutlet weak var sessionFirewallOtherCell: UITableViewCell!
@IBOutlet weak var sessionFirewallOutboundCell: UITableViewCell!
override func viewDidLoad() {
super.viewDidLoad()
if let config = self.app.yggdrasilConfig {
deviceNameField.text = config.get("name", inSection: "NodeInfo") as? String ?? ""
encryptionPublicKeyLabel.text = config.get("EncryptionPublicKey") as? String ?? "Unknown"
signingPublicKeyLabel.text = config.get("SigningPublicKey") as? String ?? "Unknown"
sessionFirewallPeeredCell.accessoryType = config.get("AllowFromDirect", inSection: "SessionFirewall") as? Bool ?? true ? .checkmark : .none
sessionFirewallOtherCell.accessoryType = config.get("AllowFromRemote", inSection: "SessionFirewall") as? Bool ?? true ? .checkmark : .none
sessionFirewallOutboundCell.accessoryType = config.get("AlwaysAllowOutbound", inSection: "SessionFirewall") as? Bool ?? true ? .checkmark : .none
signingPublicKeyLabel.text = config.get("PublicKey") as? String ?? config.get("SigningPublicKey") as? String ?? "Unknown"
autoStartWiFiCell.accessoryType = config.get("WiFi", inSection: "AutoStart") as? Bool ?? false ? .checkmark : .none
autoStartMobileCell.accessoryType = config.get("Mobile", inSection: "AutoStart") as? Bool ?? false ? .checkmark : .none
}
@ -61,20 +51,7 @@ class SettingsViewController: UITableViewController, UIDocumentBrowserViewContro
try? config.save(to: &app.vpnManager)
}
}
case 2:
let settings = [
"AllowFromDirect",
"AllowFromRemote",
"AlwaysAllowOutbound"
]
if let cell = tableView.cellForRow(at: indexPath) {
cell.accessoryType = cell.accessoryType == .checkmark ? .none : .checkmark
if let config = self.app.yggdrasilConfig {
config.set(settings[indexPath.last!], inSection: "SessionFirewall", to: cell.accessoryType == .checkmark)
try? config.save(to: &app.vpnManager)
}
}
case 4:
case 3:
switch indexPath.last {
case 0: // import
if #available(iOS 11.0, *) {
@ -113,7 +90,7 @@ class SettingsViewController: UITableViewController, UIDocumentBrowserViewContro
default:
break
}
case 5:
case 4:
let alert = UIAlertController(title: "Warning", message: "This operation will reset your configuration and generate new keys. This is not reversible unless your configuration has been exported. Changes will not take effect until the next time Yggdrasil is restarted.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Reset", style: .destructive, handler: { action in
self.app.yggdrasilConfig = ConfigurationProxy()
@ -133,7 +110,6 @@ class SettingsViewController: UITableViewController, UIDocumentBrowserViewContro
self.dismiss(animated: true, completion: nil)
}
@available(iOS 11.0, *)
func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentsAt documentURLs: [URL]) {
do {
if let url = documentURLs.first {

View file

@ -14,5 +14,14 @@ class SplitViewController: UISplitViewController, UISplitViewControllerDelegate
self.delegate = self
self.preferredDisplayMode = .allVisible
}
func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
return true
}
@available(iOS 14.0,*)
func splitViewController(_ svc: UISplitViewController, topColumnForCollapsingToProposedTopColumn proposedTopColumn: UISplitViewController.Column) -> UISplitViewController.Column {
return .primary
}
}

View file

@ -20,10 +20,12 @@ class TableViewController: UITableViewController {
@IBOutlet var statsSelfCoords: UILabel!
@IBOutlet var statsSelfPeers: UILabel!
@IBOutlet var statsVersion: UILabel!
override func viewDidLoad() {
NotificationCenter.default.addObserver(self, selector: #selector(self.onYggdrasilSelfUpdated), name: NSNotification.Name.YggdrasilSelfUpdated, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.onYggdrasilPeersUpdated), name: NSNotification.Name.YggdrasilPeersUpdated, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.onYggdrasilSwitchPeersUpdated), name: NSNotification.Name.YggdrasilSwitchPeersUpdated, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.onYggdrasilDHTUpdated), name: NSNotification.Name.YggdrasilDHTUpdated, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.onYggdrasilSettingsUpdated), name: NSNotification.Name.YggdrasilSettingsUpdated, object: nil)
}
@ -39,6 +41,8 @@ class TableViewController: UITableViewController {
if let row = self.tableView.indexPathForSelectedRow {
self.tableView.deselectRow(at: row, animated: true)
}
self.statsVersion.text = Yggdrasil.MobileGetVersion()
}
override func viewWillDisappear(_ animated: Bool) {
@ -65,18 +69,18 @@ class TableViewController: UITableViewController {
if let footer = toggleTableView.footerView(forSection: 0) {
if let label = footer.textLabel {
label.text = app.vpnManager.isOnDemandEnabled ? "Yggdrasil will automatically stop and start based on settings." : "You must restart Yggdrasil to make configuration changes effective."
label.text = app.vpnManager.isOnDemandEnabled ? "Yggdrasil is configured to automatically start and stop based on available connectivity." : "Yggdrasil is configured to start and stop manually."
}
}
}
func updateConnectedStatus() {
if self.app.vpnManager.connection.status == .connected {
if app.yggdrasilSwitchPeers.count > 0 {
connectedStatusLabel.text = "Connected"
if app.yggdrasilDHT.count > 0 {
connectedStatusLabel.text = "Enabled"
connectedStatusLabel.textColor = UIColor(red: 0.37, green: 0.79, blue: 0.35, alpha: 1.0)
} else {
connectedStatusLabel.text = "No active connections"
connectedStatusLabel.text = "No connectivity"
connectedStatusLabel.textColor = UIColor.red
}
} else {
@ -104,12 +108,12 @@ class TableViewController: UITableViewController {
self.updateConnectedStatus()
}
@objc func onYggdrasilSwitchPeersUpdated(notification: NSNotification) {
@objc func onYggdrasilDHTUpdated(notification: NSNotification) {
self.updateConnectedStatus()
}
@objc func onYggdrasilPeersUpdated(notification: NSNotification) {
let peercount = app.yggdrasilSwitchPeers.count
let peercount = app.yggdrasilPeers.count
if peercount <= 0 {
statsSelfPeers.text = "No peers"
} else if peercount == 1 {