mirror of
https://github.com/yggdrasil-network/yggdrasil-ios.git
synced 2025-04-27 21:55:10 +03:00
Update iOS app
This commit is contained in:
parent
56919b83a8
commit
c60f7f18fb
20 changed files with 328 additions and 719 deletions
|
@ -2,11 +2,7 @@
|
||||||
|
|
||||||
Requires an Apple Developer account for the App Groups and Network Extension entitlements.
|
Requires an Apple Developer account for the App Groups and Network Extension entitlements.
|
||||||
|
|
||||||
You will need to provision an app group and update bundle IDs throughout the Xcode project as appropriate. You can find them all by asking `git`:
|
You will need to provision an app group and update bundle IDs throughout the Xcode project as appropriate.
|
||||||
|
|
||||||
```
|
|
||||||
git grep "eu.neilalexander.yggdrasil"
|
|
||||||
```
|
|
||||||
|
|
||||||
To build, install Go 1.13 or later, and then install `gomobile`:
|
To build, install Go 1.13 or later, and then install `gomobile`:
|
||||||
|
|
||||||
|
|
|
@ -1,220 +0,0 @@
|
||||||
//
|
|
||||||
// ConfigurationProxy.swift
|
|
||||||
// YggdrasilNetwork
|
|
||||||
//
|
|
||||||
// Created by Neil Alexander on 07/01/2019.
|
|
||||||
//
|
|
||||||
|
|
||||||
#if canImport(UIKit)
|
|
||||||
import UIKit
|
|
||||||
#elseif canImport(AppKit)
|
|
||||||
import AppKit
|
|
||||||
#endif
|
|
||||||
import Yggdrasil
|
|
||||||
import NetworkExtension
|
|
||||||
|
|
||||||
#if os(iOS)
|
|
||||||
class PlatformItemSource: NSObject, UIActivityItemSource {
|
|
||||||
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
|
|
||||||
return "yggdrasil.conf"
|
|
||||||
}
|
|
||||||
|
|
||||||
func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#elseif os(OSX)
|
|
||||||
class PlatformItemSource: NSObject {}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class ConfigurationProxy: PlatformItemSource {
|
|
||||||
|
|
||||||
private var json: Data? = nil
|
|
||||||
private var dict: [String: Any]? = nil
|
|
||||||
|
|
||||||
override init() {
|
|
||||||
super.init()
|
|
||||||
self.json = MobileGenerateConfigJSON()
|
|
||||||
do {
|
|
||||||
try self.convertToDict()
|
|
||||||
} catch {
|
|
||||||
NSLog("ConfigurationProxy: Error deserialising JSON (\(error))")
|
|
||||||
}
|
|
||||||
#if os(iOS)
|
|
||||||
self.set("name", inSection: "NodeInfo", to: UIDevice.current.name)
|
|
||||||
#elseif os(OSX)
|
|
||||||
self.set("name", inSection: "NodeInfo", to: Host.current().localizedName ?? "")
|
|
||||||
#endif
|
|
||||||
self.set("MulticastInterfaces", to: ["en*"] as [String])
|
|
||||||
self.set("AllowFromDirect", inSection: "SessionFirewall", to: true)
|
|
||||||
self.set("AllowFromRemote", inSection: "SessionFirewall", to: false)
|
|
||||||
self.set("AlwaysAllowOutbound", inSection: "SessionFirewall", to: true)
|
|
||||||
self.set("Enable", inSection: "SessionFirewall", to: true)
|
|
||||||
}
|
|
||||||
|
|
||||||
init(json: Data) throws {
|
|
||||||
super.init()
|
|
||||||
self.json = json
|
|
||||||
try self.convertToDict()
|
|
||||||
}
|
|
||||||
|
|
||||||
private func fix() {
|
|
||||||
self.set("Listen", to: [] as [String])
|
|
||||||
self.set("AdminListen", to: "none")
|
|
||||||
self.set("IfName", to: "dummy")
|
|
||||||
self.set("Enable", inSection: "SessionFirewall", to: true)
|
|
||||||
self.set("MaxTotalQueueSize", inSection: "SwitchOptions", to: 1048576)
|
|
||||||
|
|
||||||
if self.get("AutoStart") == nil {
|
|
||||||
self.set("AutoStart", to: ["WiFi": false, "Mobile": false] as [String: Bool])
|
|
||||||
}
|
|
||||||
let interfaces = self.get("MulticastInterfaces") as? [String] ?? []
|
|
||||||
if interfaces.contains(where: { $0 == "lo0" }) {
|
|
||||||
self.add("lo0", in: "MulticastInterfaces")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func get(_ key: String) -> Any? {
|
|
||||||
if let dict = self.dict {
|
|
||||||
if dict.keys.contains(key) {
|
|
||||||
return dict[key]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func get(_ key: String, inSection section: String) -> Any? {
|
|
||||||
if let dict = self.get(section) as? [String: Any] {
|
|
||||||
if dict.keys.contains(key) {
|
|
||||||
return dict[key]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func add(_ value: Any, in key: String) {
|
|
||||||
if self.dict != nil {
|
|
||||||
if self.dict![key] as? [Any] != nil {
|
|
||||||
var temp = self.dict![key] as? [Any] ?? []
|
|
||||||
temp.append(value)
|
|
||||||
self.dict!.updateValue(temp, forKey: key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func remove(_ value: String, from key: String) {
|
|
||||||
if self.dict != nil {
|
|
||||||
if self.dict![key] as? [String] != nil {
|
|
||||||
var temp = self.dict![key] as? [String] ?? []
|
|
||||||
if let index = temp.firstIndex(of: value) {
|
|
||||||
temp.remove(at: index)
|
|
||||||
}
|
|
||||||
self.dict!.updateValue(temp, forKey: key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func remove(index: Int, from key: String) {
|
|
||||||
if self.dict != nil {
|
|
||||||
if self.dict![key] as? [Any] != nil {
|
|
||||||
var temp = self.dict![key] as? [Any] ?? []
|
|
||||||
temp.remove(at: index)
|
|
||||||
self.dict!.updateValue(temp, forKey: key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func set(_ key: String, to value: Any) {
|
|
||||||
if self.dict != nil {
|
|
||||||
self.dict![key] = value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func set(_ key: String, inSection section: String, to value: Any?) {
|
|
||||||
if self.dict != nil {
|
|
||||||
if self.dict!.keys.contains(section), let value = value {
|
|
||||||
var temp = self.dict![section] as? [String: Any] ?? [:]
|
|
||||||
temp.updateValue(value, forKey: key)
|
|
||||||
self.dict!.updateValue(temp, forKey: section)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func data() -> Data? {
|
|
||||||
do {
|
|
||||||
try self.convertToJson()
|
|
||||||
return self.json
|
|
||||||
} catch {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func save(to manager: inout NETunnelProviderManager) throws {
|
|
||||||
self.fix()
|
|
||||||
if let data = self.data() {
|
|
||||||
let providerProtocol = NETunnelProviderProtocol()
|
|
||||||
#if os(iOS)
|
|
||||||
providerProtocol.providerBundleIdentifier = "eu.neilalexander.yggdrasil.extension"
|
|
||||||
#elseif os(OSX)
|
|
||||||
providerProtocol.providerBundleIdentifier = "eu.neilalexander.yggdrasilmac.extension"
|
|
||||||
#endif
|
|
||||||
providerProtocol.providerConfiguration = [ "json": data ]
|
|
||||||
providerProtocol.serverAddress = "yggdrasil"
|
|
||||||
providerProtocol.username = self.get("EncryptionPublicKey") as? String ?? "(unknown public key)"
|
|
||||||
|
|
||||||
let disconnectrule = NEOnDemandRuleDisconnect()
|
|
||||||
var rules: [NEOnDemandRule] = [disconnectrule]
|
|
||||||
if self.get("WiFi", inSection: "AutoStart") as? Bool ?? false {
|
|
||||||
let wifirule = NEOnDemandRuleConnect()
|
|
||||||
wifirule.interfaceTypeMatch = .wiFi
|
|
||||||
rules.insert(wifirule, at: 0)
|
|
||||||
}
|
|
||||||
#if canImport(UIKit)
|
|
||||||
if self.get("Mobile", inSection: "AutoStart") as? Bool ?? false {
|
|
||||||
let mobilerule = NEOnDemandRuleConnect()
|
|
||||||
mobilerule.interfaceTypeMatch = .cellular
|
|
||||||
rules.insert(mobilerule, at: 0)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
manager.onDemandRules = rules
|
|
||||||
manager.isOnDemandEnabled = rules.count > 1
|
|
||||||
providerProtocol.disconnectOnSleep = rules.count > 1
|
|
||||||
|
|
||||||
manager.protocolConfiguration = providerProtocol
|
|
||||||
|
|
||||||
manager.saveToPreferences(completionHandler: { (error:Error?) in
|
|
||||||
if let error = error {
|
|
||||||
print(error)
|
|
||||||
} else {
|
|
||||||
print("Save successfully")
|
|
||||||
NotificationCenter.default.post(name: NSNotification.Name.YggdrasilSettingsUpdated, object: self)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private func convertToDict() throws {
|
|
||||||
self.dict = try JSONSerialization.jsonObject(with: self.json!, options: []) as? [String: Any]
|
|
||||||
}
|
|
||||||
|
|
||||||
private func convertToJson() throws {
|
|
||||||
self.json = try JSONSerialization.data(withJSONObject: self.dict as Any, options: .prettyPrinted)
|
|
||||||
}
|
|
||||||
|
|
||||||
#if canImport(UIKit)
|
|
||||||
override func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
|
|
||||||
return "yggdrasil.conf"
|
|
||||||
}
|
|
||||||
|
|
||||||
override func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
|
|
||||||
return self.data()
|
|
||||||
}
|
|
||||||
|
|
||||||
func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String {
|
|
||||||
if let pubkey = self.get("EncryptionPublicKey") as? String, pubkey.count > 56 {
|
|
||||||
return "yggdrasil-\(pubkey.dropFirst(56)).conf.json"
|
|
||||||
}
|
|
||||||
return "yggdrasil.conf.json"
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
|
@ -1,151 +0,0 @@
|
||||||
//
|
|
||||||
// AppDelegateExtension.swift
|
|
||||||
// Yggdrasil Network
|
|
||||||
//
|
|
||||||
// Created by Neil Alexander on 11/01/2019.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
import NetworkExtension
|
|
||||||
import Yggdrasil
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
class CrossPlatformAppDelegate: PlatformAppDelegate {
|
|
||||||
var vpnManager: NETunnelProviderManager = NETunnelProviderManager()
|
|
||||||
|
|
||||||
#if os(iOS)
|
|
||||||
let yggdrasilComponent = "eu.neilalexander.yggdrasil.extension"
|
|
||||||
#elseif os(OSX)
|
|
||||||
let yggdrasilComponent = "eu.neilalexander.yggdrasilmac.extension"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
var yggdrasilConfig: ConfigurationProxy? = nil
|
|
||||||
|
|
||||||
var yggdrasilAdminTimer: DispatchSourceTimer?
|
|
||||||
|
|
||||||
var yggdrasilSelfIP: String = "N/A"
|
|
||||||
var yggdrasilSelfSubnet: String = "N/A"
|
|
||||||
var yggdrasilSelfCoords: String = "[]"
|
|
||||||
|
|
||||||
var yggdrasilPeers: [[String: Any]] = [[:]]
|
|
||||||
var yggdrasilSwitchPeers: [[String: Any]] = [[:]]
|
|
||||||
var yggdrasilNodeInfo: [String: Any] = [:]
|
|
||||||
|
|
||||||
func applicationDidBecomeActive(_ application: UIApplication) {
|
|
||||||
if self.yggdrasilAdminTimer == nil {
|
|
||||||
self.yggdrasilAdminTimer = DispatchSource.makeTimerSource(flags: .strict, queue: DispatchQueue(label: "Admin Queue"))
|
|
||||||
self.yggdrasilAdminTimer!.schedule(deadline: DispatchTime.now(), repeating: DispatchTimeInterval.seconds(2), leeway: DispatchTimeInterval.seconds(1))
|
|
||||||
self.yggdrasilAdminTimer!.setEventHandler {
|
|
||||||
self.makeIPCRequests()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if self.yggdrasilAdminTimer != nil {
|
|
||||||
self.yggdrasilAdminTimer!.resume()
|
|
||||||
}
|
|
||||||
|
|
||||||
NotificationCenter.default.addObserver(forName: .NEVPNStatusDidChange, object: nil, queue: nil, using: { notification in
|
|
||||||
if let conn = notification.object as? NEVPNConnection {
|
|
||||||
self.updateStatus(conn: conn)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
self.updateStatus(conn: self.vpnManager.connection)
|
|
||||||
}
|
|
||||||
|
|
||||||
func updateStatus(conn: NEVPNConnection) {
|
|
||||||
if conn.status == .connected {
|
|
||||||
self.makeIPCRequests()
|
|
||||||
} else if conn.status == .disconnecting || conn.status == .disconnected {
|
|
||||||
self.clearStatus()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func applicationWillResignActive(_ application: UIApplication) {
|
|
||||||
if self.yggdrasilAdminTimer != nil {
|
|
||||||
self.yggdrasilAdminTimer!.suspend()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func vpnTunnelProviderManagerInit() {
|
|
||||||
NETunnelProviderManager.loadAllFromPreferences { (savedManagers: [NETunnelProviderManager]?, error: Error?) in
|
|
||||||
if let error = error {
|
|
||||||
print(error)
|
|
||||||
}
|
|
||||||
|
|
||||||
if let savedManagers = savedManagers {
|
|
||||||
for manager in savedManagers {
|
|
||||||
if (manager.protocolConfiguration as? NETunnelProviderProtocol)?.providerBundleIdentifier == self.yggdrasilComponent {
|
|
||||||
print("Found saved VPN Manager")
|
|
||||||
self.vpnManager = manager
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self.vpnManager.loadFromPreferences(completionHandler: { (error: Error?) in
|
|
||||||
if let error = error {
|
|
||||||
print(error)
|
|
||||||
}
|
|
||||||
|
|
||||||
if let vpnConfig = self.vpnManager.protocolConfiguration as? NETunnelProviderProtocol,
|
|
||||||
let confJson = vpnConfig.providerConfiguration!["json"] as? Data {
|
|
||||||
print("Found existing protocol configuration")
|
|
||||||
self.yggdrasilConfig = try? ConfigurationProxy(json: confJson)
|
|
||||||
} else {
|
|
||||||
print("Generating new protocol configuration")
|
|
||||||
self.yggdrasilConfig = ConfigurationProxy()
|
|
||||||
}
|
|
||||||
|
|
||||||
self.vpnManager.localizedDescription = "Yggdrasil"
|
|
||||||
self.vpnManager.isEnabled = true
|
|
||||||
|
|
||||||
|
|
||||||
if let config = self.yggdrasilConfig {
|
|
||||||
try? config.save(to: &self.vpnManager)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeIPCRequests() {
|
|
||||||
if self.vpnManager.connection.status != .connected {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if let session = self.vpnManager.connection as? NETunnelProviderSession {
|
|
||||||
try? session.sendProviderMessage("address".data(using: .utf8)!) { (address) in
|
|
||||||
self.yggdrasilSelfIP = String(data: address!, encoding: .utf8)!
|
|
||||||
NotificationCenter.default.post(name: .YggdrasilSelfUpdated, object: nil)
|
|
||||||
}
|
|
||||||
try? session.sendProviderMessage("subnet".data(using: .utf8)!) { (subnet) in
|
|
||||||
self.yggdrasilSelfSubnet = String(data: subnet!, encoding: .utf8)!
|
|
||||||
NotificationCenter.default.post(name: .YggdrasilSelfUpdated, object: nil)
|
|
||||||
}
|
|
||||||
try? session.sendProviderMessage("coords".data(using: .utf8)!) { (coords) in
|
|
||||||
self.yggdrasilSelfCoords = String(data: coords!, encoding: .utf8)!
|
|
||||||
NotificationCenter.default.post(name: .YggdrasilSelfUpdated, object: nil)
|
|
||||||
}
|
|
||||||
try? session.sendProviderMessage("peers".data(using: .utf8)!) { (peers) in
|
|
||||||
if let jsonResponse = try? JSONSerialization.jsonObject(with: peers!, options: []) as? [[String: Any]] {
|
|
||||||
self.yggdrasilPeers = jsonResponse
|
|
||||||
NotificationCenter.default.post(name: .YggdrasilPeersUpdated, object: nil)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try? session.sendProviderMessage("switchpeers".data(using: .utf8)!) { (switchpeers) in
|
|
||||||
if let jsonResponse = try? JSONSerialization.jsonObject(with: switchpeers!, options: []) as? [[String: Any]] {
|
|
||||||
self.yggdrasilSwitchPeers = jsonResponse
|
|
||||||
NotificationCenter.default.post(name: .YggdrasilSwitchPeersUpdated, object: nil)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func clearStatus() {
|
|
||||||
self.yggdrasilSelfIP = "N/A"
|
|
||||||
self.yggdrasilSelfSubnet = "N/A"
|
|
||||||
self.yggdrasilSelfCoords = "[]"
|
|
||||||
self.yggdrasilPeers = []
|
|
||||||
self.yggdrasilSwitchPeers = []
|
|
||||||
NotificationCenter.default.post(name: .YggdrasilSelfUpdated, object: nil)
|
|
||||||
NotificationCenter.default.post(name: .YggdrasilPeersUpdated, object: nil)
|
|
||||||
NotificationCenter.default.post(name: .YggdrasilSwitchPeersUpdated, object: nil)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -5,9 +5,12 @@ import Yggdrasil
|
||||||
class PacketTunnelProvider: NEPacketTunnelProvider {
|
class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
|
|
||||||
var yggdrasil: MobileYggdrasil = MobileYggdrasil()
|
var yggdrasil: MobileYggdrasil = MobileYggdrasil()
|
||||||
var conduit: DummyConduitEndpoint? = nil
|
|
||||||
var yggdrasilConfig: ConfigurationProxy?
|
var yggdrasilConfig: ConfigurationProxy?
|
||||||
|
|
||||||
|
private var readThread: Thread?
|
||||||
|
private var writeThread: Thread?
|
||||||
|
private var writeBuffer = Data(count: 65535)
|
||||||
|
|
||||||
@objc func readPacketsFromTun() {
|
@objc func readPacketsFromTun() {
|
||||||
autoreleasepool {
|
autoreleasepool {
|
||||||
self.packetFlow.readPackets { (packets: [Data], protocols: [NSNumber]) in
|
self.packetFlow.readPackets { (packets: [Data], protocols: [NSNumber]) in
|
||||||
|
@ -28,7 +31,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func startYggdrasil() -> Error? {
|
func startYggdrasil() -> Error? {
|
||||||
var err: Error? = nil
|
var err: Error? = nil
|
||||||
|
|
||||||
|
@ -47,7 +50,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
NSLog("Configuration loaded")
|
NSLog("Configuration loaded")
|
||||||
|
|
||||||
do {
|
do {
|
||||||
self.conduit = try self.yggdrasil.startJSON(config.data())
|
try self.yggdrasil.startJSON(config.data())
|
||||||
} catch {
|
} catch {
|
||||||
NSLog("Starting Yggdrasil process produced an error: " + error.localizedDescription)
|
NSLog("Starting Yggdrasil process produced an error: " + error.localizedDescription)
|
||||||
return
|
return
|
||||||
|
@ -62,6 +65,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
let tunnelNetworkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: address)
|
let tunnelNetworkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: address)
|
||||||
tunnelNetworkSettings.ipv6Settings = NEIPv6Settings(addresses: [address], networkPrefixLengths: [7])
|
tunnelNetworkSettings.ipv6Settings = NEIPv6Settings(addresses: [address], networkPrefixLengths: [7])
|
||||||
tunnelNetworkSettings.ipv6Settings?.includedRoutes = [NEIPv6Route(destinationAddress: "0200::", networkPrefixLength: 7)]
|
tunnelNetworkSettings.ipv6Settings?.includedRoutes = [NEIPv6Route(destinationAddress: "0200::", networkPrefixLength: 7)]
|
||||||
|
tunnelNetworkSettings.mtu = NSNumber(integerLiteral: self.yggdrasil.getMTU())
|
||||||
|
|
||||||
NSLog("Setting tunnel network settings...")
|
NSLog("Setting tunnel network settings...")
|
||||||
|
|
||||||
|
@ -73,16 +77,19 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
} else {
|
} else {
|
||||||
NSLog("Yggdrasil tunnel settings set successfully")
|
NSLog("Yggdrasil tunnel settings set successfully")
|
||||||
|
|
||||||
let readthread: Thread = Thread(target: self, selector: #selector(self.readPacketsFromTun), object: nil)
|
self.readThread = Thread(target: self, selector: #selector(self.readPacketsFromTun), object: nil)
|
||||||
readthread.name = "TUN Packet Reader"
|
if let readThread = self.readThread {
|
||||||
readthread.qualityOfService = .utility
|
readThread.name = "TUN Packet Reader"
|
||||||
|
readThread.qualityOfService = .utility
|
||||||
|
readThread.start()
|
||||||
|
}
|
||||||
|
|
||||||
let writethread: Thread = Thread(target: self, selector: #selector(self.writePacketsToTun), object: nil)
|
self.writeThread = Thread(target: self, selector: #selector(self.writePacketsToTun), object: nil)
|
||||||
writethread.name = "TUN Packet Writer"
|
if let writeThread = self.writeThread {
|
||||||
writethread.qualityOfService = .utility
|
writeThread.name = "TUN Packet Writer"
|
||||||
|
writeThread.qualityOfService = .utility
|
||||||
readthread.start()
|
writeThread.start()
|
||||||
writethread.start()
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,6 +117,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
|
override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
|
||||||
|
self.readThread?.cancel()
|
||||||
|
self.writeThread?.cancel()
|
||||||
try? self.yggdrasil.stop()
|
try? self.yggdrasil.stop()
|
||||||
super.stopTunnel(with: reason, completionHandler: completionHandler)
|
super.stopTunnel(with: reason, completionHandler: completionHandler)
|
||||||
}
|
}
|
||||||
|
@ -125,8 +134,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
completionHandler?(self.yggdrasil.getCoordsString().data(using: .utf8))
|
completionHandler?(self.yggdrasil.getCoordsString().data(using: .utf8))
|
||||||
case "peers":
|
case "peers":
|
||||||
completionHandler?(self.yggdrasil.getPeersJSON().data(using: .utf8))
|
completionHandler?(self.yggdrasil.getPeersJSON().data(using: .utf8))
|
||||||
case "switchpeers":
|
case "dht":
|
||||||
completionHandler?(self.yggdrasil.getSwitchPeersJSON().data(using: .utf8))
|
completionHandler?(self.yggdrasil.getDHTJSON().data(using: .utf8))
|
||||||
default:
|
default:
|
||||||
completionHandler?(nil)
|
completionHandler?(nil)
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,6 @@ import AppKit
|
||||||
extension Notification.Name {
|
extension Notification.Name {
|
||||||
static let YggdrasilSelfUpdated = Notification.Name("YggdrasilSelfUpdated")
|
static let YggdrasilSelfUpdated = Notification.Name("YggdrasilSelfUpdated")
|
||||||
static let YggdrasilPeersUpdated = Notification.Name("YggdrasilPeersUpdated")
|
static let YggdrasilPeersUpdated = Notification.Name("YggdrasilPeersUpdated")
|
||||||
static let YggdrasilSwitchPeersUpdated = Notification.Name("YggdrasilSwitchPeersUpdated")
|
|
||||||
static let YggdrasilSettingsUpdated = Notification.Name("YggdrasilSettingsUpdated")
|
static let YggdrasilSettingsUpdated = Notification.Name("YggdrasilSettingsUpdated")
|
||||||
|
static let YggdrasilDHTUpdated = Notification.Name("YggdrasilPeersUpdated")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +1,56 @@
|
||||||
{
|
{
|
||||||
"images" : [
|
"images" : [
|
||||||
{
|
{
|
||||||
"idiom" : "universal",
|
|
||||||
"filename" : "img1.png",
|
"filename" : "img1.png",
|
||||||
|
"idiom" : "universal",
|
||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"appearances" : [
|
||||||
|
{
|
||||||
|
"appearance" : "luminosity",
|
||||||
|
"value" : "dark"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"filename" : "img1w.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
"filename" : "img2.png",
|
"filename" : "img2.png",
|
||||||
|
"idiom" : "universal",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"appearances" : [
|
||||||
|
{
|
||||||
|
"appearance" : "luminosity",
|
||||||
|
"value" : "dark"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"filename" : "img2w.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
"filename" : "img3.png",
|
"filename" : "img3.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"appearances" : [
|
||||||
|
{
|
||||||
|
"appearance" : "luminosity",
|
||||||
|
"value" : "dark"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"filename" : "img3w.png",
|
||||||
|
"idiom" : "universal",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"info" : {
|
"info" : {
|
||||||
"version" : 1,
|
"author" : "xcode",
|
||||||
"author" : "xcode"
|
"version" : 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
BIN
Yggdrasil Network iOS/Assets.xcassets/YggdrasilNetwork.imageset/img1w.png
vendored
Normal file
BIN
Yggdrasil Network iOS/Assets.xcassets/YggdrasilNetwork.imageset/img1w.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
BIN
Yggdrasil Network iOS/Assets.xcassets/YggdrasilNetwork.imageset/img2w.png
vendored
Normal file
BIN
Yggdrasil Network iOS/Assets.xcassets/YggdrasilNetwork.imageset/img2w.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
BIN
Yggdrasil Network iOS/Assets.xcassets/YggdrasilNetwork.imageset/img3w.png
vendored
Normal file
BIN
Yggdrasil Network iOS/Assets.xcassets/YggdrasilNetwork.imageset/img3w.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 61 KiB |
|
@ -1,12 +1,11 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
<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">
|
<device id="retina4_7" orientation="portrait" appearance="dark"/>
|
||||||
<adaptation id="fullscreen"/>
|
|
||||||
</device>
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<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="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"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<scenes>
|
<scenes>
|
||||||
|
@ -19,20 +18,21 @@
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="YggdrasilNetwork" translatesAutoresizingMaskIntoConstraints="NO" id="3Lc-gG-kep">
|
<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>
|
<constraints>
|
||||||
<constraint firstAttribute="width" secondItem="3Lc-gG-kep" secondAttribute="height" multiplier="159:64" id="NYe-AY-mCL"/>
|
<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"/>
|
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="400" id="lIj-gT-vW9"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</imageView>
|
</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">
|
<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"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<nil key="textColor"/>
|
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</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>
|
<constraints>
|
||||||
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="3Lc-gG-kep" secondAttribute="trailing" constant="28" id="J9j-Ek-mVq"/>
|
<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"/>
|
<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="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"/>
|
<constraint firstItem="3Lc-gG-kep" firstAttribute="centerX" secondItem="6Tk-OE-BBY" secondAttribute="centerX" id="xej-Yh-XPz"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
|
||||||
</view>
|
</view>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
@ -50,6 +49,12 @@
|
||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
<resources>
|
<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>
|
</resources>
|
||||||
</document>
|
</document>
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="sjP-mj-LKX">
|
<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="retina4_0" orientation="portrait" appearance="light"/>
|
<device id="ipad10_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<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"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<scenes>
|
<scenes>
|
||||||
|
@ -11,20 +13,19 @@
|
||||||
<scene sceneID="YjI-Ak-tYt">
|
<scene sceneID="YjI-Ak-tYt">
|
||||||
<objects>
|
<objects>
|
||||||
<tableViewController title="Peers" id="Aro-kj-1Us" customClass="PeersViewController" customModule="YggdrasilNetwork" customModuleProvider="target" sceneMemberID="viewController">
|
<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">
|
<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="320" height="568"/>
|
<rect key="frame" x="0.0" y="0.0" width="704" height="995.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
|
||||||
<prototypes>
|
<prototypes>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="configuredPeerPrototype" textLabel="s5X-wa-HWH" style="IBUITableViewCellStyleDefault" id="8Oo-lj-bGn">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="(discovered)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="s5X-wa-HWH">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
|
@ -34,14 +35,14 @@
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</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">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="(static)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="DBc-bQ-Fql">
|
<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.5" height="20.5"/>
|
<rect key="frame" x="16" y="10" width="54" height="20.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
|
@ -58,14 +59,14 @@
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</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">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
|
@ -75,20 +76,20 @@
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="togglePrototype" id="7yi-ur-bht" customClass="ToggleTableViewCell" customModule="YggdrasilNetwork" customModuleProvider="target">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<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">
|
<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"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="MYo-S3-kzH">
|
<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>
|
</switch>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
|
@ -135,7 +136,7 @@
|
||||||
<objects>
|
<objects>
|
||||||
<navigationController title="Peers" id="LPj-bu-hdp" sceneMemberID="viewController">
|
<navigationController title="Peers" id="LPj-bu-hdp" sceneMemberID="viewController">
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="ifJ-0T-bJ4">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</navigationBar>
|
</navigationBar>
|
||||||
<connections>
|
<connections>
|
||||||
|
@ -150,22 +151,21 @@
|
||||||
<scene sceneID="VfF-sj-c5P">
|
<scene sceneID="VfF-sj-c5P">
|
||||||
<objects>
|
<objects>
|
||||||
<tableViewController title="Settings" id="FeQ-BB-bF5" customClass="SettingsViewController" customModule="YggdrasilNetwork" customModuleProvider="target" sceneMemberID="viewController">
|
<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">
|
<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="320" height="568"/>
|
<rect key="frame" x="0.0" y="0.0" width="499.5" height="1180"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
|
||||||
<sections>
|
<sections>
|
||||||
<tableViewSection headerTitle="Node Info" footerTitle="Information entered here is public and may be shown on network maps." id="su8-4b-N3L">
|
<tableViewSection headerTitle="Node Info" footerTitle="Information entered here is public and may be shown on network maps." id="su8-4b-N3L">
|
||||||
<cells>
|
<cells>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" id="nxn-IW-t8I">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<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">
|
<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>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="43" id="cRe-aZ-mWa"/>
|
<constraint firstAttribute="height" constant="43" id="cRe-aZ-mWa"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
|
@ -199,17 +199,17 @@
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
</cells>
|
</cells>
|
||||||
</tableViewSection>
|
</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>
|
<cells>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="checkmark" indentationWidth="10" textLabel="NYE-Pu-5Gk" style="IBUITableViewCellStyleDefault" id="pwi-5Y-UxD">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
<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"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
@ -220,14 +220,14 @@
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="checkmark" indentationWidth="10" textLabel="ZdY-uX-KE6" style="IBUITableViewCellStyleDefault" id="iwW-oY-kqV">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
<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"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
@ -239,110 +239,20 @@
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
</cells>
|
</cells>
|
||||||
</tableViewSection>
|
</tableViewSection>
|
||||||
<tableViewSection headerTitle="Allow traffic from" id="s6m-tK-gtR">
|
<tableViewSection headerTitle="Public Key" footerTitle="Your public key forms your identity on the network. It is safe to be shared." id="Bqi-0N-6vQ">
|
||||||
<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>
|
|
||||||
<cells>
|
<cells>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="checkmark" indentationWidth="10" textLabel="X1a-uW-3xE" style="IBUITableViewCellStyleDefault" id="SLl-8Z-hnZ">
|
<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="0.0" y="370.5" width="320" height="44"/>
|
<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="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"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Signing" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="SeD-oT-h3h">
|
<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="12" width="57.5" height="20.5"/>
|
<rect key="frame" x="16" y="0.0" width="427.5" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" name="Menlo-Regular" family="Menlo" pointSize="16"/>
|
||||||
<nil key="textColor"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<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"/>
|
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
|
@ -351,17 +261,17 @@
|
||||||
</cells>
|
</cells>
|
||||||
</tableViewSection>
|
</tableViewSection>
|
||||||
<tableViewSection headerTitle="Backup" id="mD0-CO-qvR">
|
<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>
|
<cells>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" textLabel="0zV-IH-vF4" style="IBUITableViewCellStyleDefault" id="IgR-eA-aHt">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
<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"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
@ -372,14 +282,14 @@
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" textLabel="n0W-r2-Cp7" style="IBUITableViewCellStyleDefault" id="Fgj-Ug-A8R">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
<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"/>
|
<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">
|
<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>
|
<cells>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" textLabel="Jc5-vz-oTA" style="IBUITableViewCellStyleDefault" id="Cgi-Yk-esa">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<color key="tintColor" red="0.20340806249999999" green="0.47218620779999998" blue="0.96475774049999996" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
<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"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
@ -424,11 +334,7 @@
|
||||||
<outlet property="autoStartMobileCell" destination="iwW-oY-kqV" id="kDV-jT-IBR"/>
|
<outlet property="autoStartMobileCell" destination="iwW-oY-kqV" id="kDV-jT-IBR"/>
|
||||||
<outlet property="autoStartWiFiCell" destination="pwi-5Y-UxD" id="UJo-BZ-aXf"/>
|
<outlet property="autoStartWiFiCell" destination="pwi-5Y-UxD" id="UJo-BZ-aXf"/>
|
||||||
<outlet property="deviceNameField" destination="iRg-tv-diq" id="ffH-UY-BAT"/>
|
<outlet property="deviceNameField" destination="iRg-tv-diq" id="ffH-UY-BAT"/>
|
||||||
<outlet property="encryptionPublicKeyLabel" destination="P02-mF-z69" id="Yee-Zz-cFd"/>
|
<outlet property="signingPublicKeyLabel" destination="SeD-oT-h3h" id="5eK-yA-3LM"/>
|
||||||
<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"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</tableViewController>
|
</tableViewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="eco-Zl-sgd" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="eco-Zl-sgd" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
@ -440,7 +346,7 @@
|
||||||
<objects>
|
<objects>
|
||||||
<navigationController title="Settings" id="g4p-RE-Qtl" sceneMemberID="viewController">
|
<navigationController title="Settings" id="g4p-RE-Qtl" sceneMemberID="viewController">
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="p6Z-I0-Zza">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</navigationBar>
|
</navigationBar>
|
||||||
<connections>
|
<connections>
|
||||||
|
@ -455,28 +361,27 @@
|
||||||
<scene sceneID="zY7-dE-7Ay">
|
<scene sceneID="zY7-dE-7Ay">
|
||||||
<objects>
|
<objects>
|
||||||
<tableViewController title="Yggdrasil" id="s1Q-pC-XBn" customClass="TableViewController" customModule="YggdrasilNetwork" customModuleProvider="target" sceneMemberID="viewController">
|
<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">
|
<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="320" height="568"/>
|
<rect key="frame" x="0.0" y="0.0" width="420" height="1180"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
|
||||||
<sections>
|
<sections>
|
||||||
<tableViewSection footerTitle="You must restart Yggdrasil to make configuration changes effective." id="Jwl-JP-RuU">
|
<tableViewSection headerTitle="Status" id="Jwl-JP-RuU">
|
||||||
<cells>
|
<cells>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" id="49H-YI-ie3">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<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">
|
<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"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="trailing" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="qre-Dz-rWw">
|
<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>
|
<connections>
|
||||||
<action selector="toggleVPNStatus:forEvent:" destination="s1Q-pC-XBn" eventType="valueChanged" id="Mvh-gf-qg0"/>
|
<action selector="toggleVPNStatus:forEvent:" destination="s1Q-pC-XBn" eventType="valueChanged" id="Mvh-gf-qg0"/>
|
||||||
</connections>
|
</connections>
|
||||||
|
@ -492,14 +397,14 @@
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" textLabel="dZv-7O-fZv" style="IBUITableViewCellStyleDefault" id="m9f-Bi-XeH">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/>
|
||||||
<color key="textColor" name="systemRedColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="systemRedColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -513,72 +418,72 @@
|
||||||
<tableViewSection headerTitle="Statistics" id="nJf-RJ-qUC">
|
<tableViewSection headerTitle="Statistics" id="nJf-RJ-qUC">
|
||||||
<cells>
|
<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">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="IP" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="MUj-Ni-chU">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<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"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</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">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Subnet" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Q8j-k7-HTk">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<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"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</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">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Coordinates" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="9jY-kM-E6n">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<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"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
|
@ -586,13 +491,13 @@
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
</cells>
|
</cells>
|
||||||
</tableViewSection>
|
</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>
|
<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">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Peers" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="rT6-UD-Cn5">
|
<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"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<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"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
|
@ -616,14 +521,14 @@
|
||||||
</connections>
|
</connections>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="blue" accessoryType="disclosureIndicator" indentationWidth="10" textLabel="CPw-Tm-fZl" style="IBUITableViewCellStyleDefault" id="Ugm-vO-zYq">
|
<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"/>
|
<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">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Settings" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="CPw-Tm-fZl">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
|
@ -635,6 +540,30 @@
|
||||||
<segue destination="g4p-RE-Qtl" kind="showDetail" id="hEo-ra-aPX"/>
|
<segue destination="g4p-RE-Qtl" kind="showDetail" id="hEo-ra-aPX"/>
|
||||||
</connections>
|
</connections>
|
||||||
</tableViewCell>
|
</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>
|
</cells>
|
||||||
</tableViewSection>
|
</tableViewSection>
|
||||||
</sections>
|
</sections>
|
||||||
|
@ -660,6 +589,7 @@
|
||||||
<outlet property="statsSelfPeers" destination="vc0-Rq-wtq" id="usQ-EN-040"/>
|
<outlet property="statsSelfPeers" destination="vc0-Rq-wtq" id="usQ-EN-040"/>
|
||||||
<outlet property="statsSelfSubnet" destination="MLH-EY-4VQ" id="33U-qS-FUE"/>
|
<outlet property="statsSelfSubnet" destination="MLH-EY-4VQ" id="33U-qS-FUE"/>
|
||||||
<outlet property="statsSelfSubnetCell" destination="1BH-o1-n90" id="Njb-oQ-W5C"/>
|
<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="toggleConnect" destination="qre-Dz-rWw" id="Oox-v4-K0x"/>
|
||||||
<outlet property="toggleLabel" destination="alk-ml-y9V" id="o4p-Xn-ofm"/>
|
<outlet property="toggleLabel" destination="alk-ml-y9V" id="o4p-Xn-ofm"/>
|
||||||
<outlet property="toggleTableView" destination="vHG-eF-QEu" id="iNr-0v-RoB"/>
|
<outlet property="toggleTableView" destination="vHG-eF-QEu" id="iNr-0v-RoB"/>
|
||||||
|
@ -669,15 +599,45 @@
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="2571" y="-338"/>
|
<point key="canvasLocation" x="2571" y="-338"/>
|
||||||
</scene>
|
</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-->
|
<!--Yggdrasil-->
|
||||||
<scene sceneID="NHm-je-2CC">
|
<scene sceneID="NHm-je-2CC">
|
||||||
<objects>
|
<objects>
|
||||||
<navigationController title="Yggdrasil" id="Dz7-et-ljx" sceneMemberID="viewController">
|
<navigationController title="Yggdrasil" id="Dz7-et-ljx" sceneMemberID="viewController">
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" largeTitles="YES" id="uxo-U2-UUS">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</navigationBar>
|
</navigationBar>
|
||||||
<toolbar key="toolbar" opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="6hK-6f-rI2">
|
<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"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</toolbar>
|
</toolbar>
|
||||||
<connections>
|
<connections>
|
||||||
|
@ -691,9 +651,10 @@
|
||||||
<!--Split View Controller-->
|
<!--Split View Controller-->
|
||||||
<scene sceneID="9co-Q0-BvB">
|
<scene sceneID="9co-Q0-BvB">
|
||||||
<objects>
|
<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>
|
<connections>
|
||||||
<segue destination="Dz7-et-ljx" kind="relationship" relationship="masterViewController" id="QfQ-La-EfI"/>
|
<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>
|
</connections>
|
||||||
</splitViewController>
|
</splitViewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Fe3-ey-WRA" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="Fe3-ey-WRA" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
@ -701,4 +662,13 @@
|
||||||
<point key="canvasLocation" x="811" y="-5"/>
|
<point key="canvasLocation" x="811" y="-5"/>
|
||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</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>
|
</document>
|
||||||
|
|
|
@ -49,7 +49,7 @@ class PeersViewController: UITableViewController {
|
||||||
|
|
||||||
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
switch section {
|
switch section {
|
||||||
case 0: return app.yggdrasilSwitchPeers.count
|
case 0: return app.yggdrasilPeers.count
|
||||||
case 1:
|
case 1:
|
||||||
if let config = self.app.yggdrasilConfig {
|
if let config = self.app.yggdrasilConfig {
|
||||||
if let peers = config.get("Peers") as? [String] {
|
if let peers = config.get("Peers") as? [String] {
|
||||||
|
@ -58,9 +58,6 @@ class PeersViewController: UITableViewController {
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
case 2:
|
case 2:
|
||||||
if UIDevice.current.hasCellularCapabilites {
|
|
||||||
return 3
|
|
||||||
}
|
|
||||||
return 2
|
return 2
|
||||||
default: return 0
|
default: return 0
|
||||||
}
|
}
|
||||||
|
@ -70,20 +67,18 @@ class PeersViewController: UITableViewController {
|
||||||
switch indexPath.section {
|
switch indexPath.section {
|
||||||
case 0:
|
case 0:
|
||||||
let cell = tableView.dequeueReusableCell(withIdentifier: "discoveredPeerPrototype", for: indexPath)
|
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)
|
return (a["Port"] as! Int) < (b["Port"] as! Int)
|
||||||
}
|
}
|
||||||
|
|
||||||
if indexPath.row < peers.count {
|
if indexPath.row < peers.count {
|
||||||
let value = peers[indexPath.row]
|
let value = peers[indexPath.row]
|
||||||
let proto = value["Protocol"] as? String ?? "tcp"
|
let proto = value["Protocol"] as? String ?? "tcp"
|
||||||
let sent = value["BytesSent"] as? Double ?? 0
|
let remote = value["Remote"] as? String ?? "unknown"
|
||||||
let recvd = value["BytesRecvd"] as? Double ?? 0
|
let prio = value["Priority"] as? Int ?? 0
|
||||||
let rx = self.format(bytes: sent)
|
|
||||||
let tx = self.format(bytes: recvd)
|
|
||||||
|
|
||||||
cell.textLabel?.text = "\(value["Endpoint"] ?? "unknown")"
|
cell.textLabel?.text = "\(value["IP"] ?? "(unknown)")"
|
||||||
cell.detailTextLabel?.text = "\(proto.uppercased()) peer on port \(value["Port"] ?? "unknown"), sent \(tx), received \(rx)"
|
cell.detailTextLabel?.text = "\(proto.uppercased()): \(remote)"
|
||||||
}
|
}
|
||||||
return cell
|
return cell
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -101,33 +96,24 @@ class PeersViewController: UITableViewController {
|
||||||
case 0:
|
case 0:
|
||||||
let cell = tableView.dequeueReusableCell(withIdentifier: "togglePrototype", for: indexPath) as! ToggleTableViewCell
|
let cell = tableView.dequeueReusableCell(withIdentifier: "togglePrototype", for: indexPath) as! ToggleTableViewCell
|
||||||
cell.isUserInteractionEnabled = true
|
cell.isUserInteractionEnabled = true
|
||||||
cell.label?.text = "Search for multicast peers"
|
cell.label?.text = "Discoverable over multicast"
|
||||||
cell.label?.isEnabled = true
|
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
|
cell.toggle?.isEnabled = true
|
||||||
if let config = self.app.yggdrasilConfig {
|
if let config = self.app.yggdrasilConfig {
|
||||||
let interfaces = config.get("MulticastInterfaces") as? [String] ?? []
|
cell.toggle?.isOn = config.multicastBeacons
|
||||||
cell.toggle?.isOn = interfaces.contains("en*")
|
|
||||||
}
|
}
|
||||||
return cell
|
return cell
|
||||||
case 1:
|
case 1:
|
||||||
let cell = tableView.dequeueReusableCell(withIdentifier: "togglePrototype", for: indexPath) as! ToggleTableViewCell
|
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.isUserInteractionEnabled = true
|
||||||
cell.textLabel?.text = "Device settings"
|
cell.label?.text = "Search for multicast peers"
|
||||||
cell.textLabel?.isEnabled = true
|
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
|
return cell
|
||||||
default:
|
default:
|
||||||
let cell = tableView.dequeueReusableCell(withIdentifier: "menuPrototype", for: indexPath)
|
let cell = tableView.dequeueReusableCell(withIdentifier: "menuPrototype", for: indexPath)
|
||||||
|
@ -163,28 +149,16 @@ class PeersViewController: UITableViewController {
|
||||||
return "\(numberString) \(suffix)"
|
return "\(numberString) \(suffix)"
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func toggledMulticast(_ sender: UISwitch) {
|
@objc func toggledMulticastBeacons(_ sender: UISwitch) {
|
||||||
if let config = self.app.yggdrasilConfig {
|
if let config = self.app.yggdrasilConfig {
|
||||||
var interfaces = config.get("MulticastInterfaces") as! [String]
|
config.multicastBeacons = sender.isOn
|
||||||
if sender.isOn {
|
|
||||||
interfaces.append("en*")
|
|
||||||
} else {
|
|
||||||
interfaces.removeAll(where: { $0 == "en*" })
|
|
||||||
}
|
|
||||||
config.set("MulticastInterfaces", to: interfaces as [String])
|
|
||||||
try? config.save(to: &app.vpnManager)
|
try? config.save(to: &app.vpnManager)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func toggledAWDL(_ sender: UISwitch) {
|
@objc func toggledMulticastListen(_ sender: UISwitch) {
|
||||||
if let config = self.app.yggdrasilConfig {
|
if let config = self.app.yggdrasilConfig {
|
||||||
var interfaces = config.get("MulticastInterfaces") as! [String]
|
config.multicastListen = sender.isOn
|
||||||
if sender.isOn {
|
|
||||||
interfaces.append("awdl0")
|
|
||||||
} else {
|
|
||||||
interfaces.removeAll(where: { $0 == "awdl0" })
|
|
||||||
}
|
|
||||||
config.set("MulticastInterfaces", to: interfaces as [String])
|
|
||||||
try? config.save(to: &app.vpnManager)
|
try? config.save(to: &app.vpnManager)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -214,7 +188,7 @@ class PeersViewController: UITableViewController {
|
||||||
override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
|
override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
|
||||||
switch section {
|
switch section {
|
||||||
case 1:
|
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:
|
case 2:
|
||||||
var str = "Multicast peers will be discovered on the same Wi-Fi network or via USB."
|
var str = "Multicast peers will be discovered on the same Wi-Fi network or via USB."
|
||||||
if UIDevice.current.hasCellularCapabilites {
|
if UIDevice.current.hasCellularCapabilites {
|
||||||
|
|
|
@ -13,28 +13,18 @@ class SettingsViewController: UITableViewController, UIDocumentBrowserViewContro
|
||||||
|
|
||||||
@IBOutlet weak var deviceNameField: UITextField!
|
@IBOutlet weak var deviceNameField: UITextField!
|
||||||
|
|
||||||
@IBOutlet weak var encryptionPublicKeyLabel: UILabel!
|
|
||||||
@IBOutlet weak var signingPublicKeyLabel: UILabel!
|
@IBOutlet weak var signingPublicKeyLabel: UILabel!
|
||||||
|
|
||||||
@IBOutlet weak var autoStartWiFiCell: UITableViewCell!
|
@IBOutlet weak var autoStartWiFiCell: UITableViewCell!
|
||||||
@IBOutlet weak var autoStartMobileCell: UITableViewCell!
|
@IBOutlet weak var autoStartMobileCell: UITableViewCell!
|
||||||
|
|
||||||
@IBOutlet weak var sessionFirewallPeeredCell: UITableViewCell!
|
|
||||||
@IBOutlet weak var sessionFirewallOtherCell: UITableViewCell!
|
|
||||||
@IBOutlet weak var sessionFirewallOutboundCell: UITableViewCell!
|
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
if let config = self.app.yggdrasilConfig {
|
if let config = self.app.yggdrasilConfig {
|
||||||
deviceNameField.text = config.get("name", inSection: "NodeInfo") as? String ?? ""
|
deviceNameField.text = config.get("name", inSection: "NodeInfo") as? String ?? ""
|
||||||
encryptionPublicKeyLabel.text = config.get("EncryptionPublicKey") as? String ?? "Unknown"
|
signingPublicKeyLabel.text = config.get("PublicKey") as? String ?? config.get("SigningPublicKey") 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
|
|
||||||
|
|
||||||
autoStartWiFiCell.accessoryType = config.get("WiFi", inSection: "AutoStart") as? Bool ?? false ? .checkmark : .none
|
autoStartWiFiCell.accessoryType = config.get("WiFi", inSection: "AutoStart") as? Bool ?? false ? .checkmark : .none
|
||||||
autoStartMobileCell.accessoryType = config.get("Mobile", 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)
|
try? config.save(to: &app.vpnManager)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case 2:
|
case 3:
|
||||||
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:
|
|
||||||
switch indexPath.last {
|
switch indexPath.last {
|
||||||
case 0: // import
|
case 0: // import
|
||||||
if #available(iOS 11.0, *) {
|
if #available(iOS 11.0, *) {
|
||||||
|
@ -113,7 +90,7 @@ class SettingsViewController: UITableViewController, UIDocumentBrowserViewContro
|
||||||
default:
|
default:
|
||||||
break
|
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)
|
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
|
alert.addAction(UIAlertAction(title: "Reset", style: .destructive, handler: { action in
|
||||||
self.app.yggdrasilConfig = ConfigurationProxy()
|
self.app.yggdrasilConfig = ConfigurationProxy()
|
||||||
|
@ -133,7 +110,6 @@ class SettingsViewController: UITableViewController, UIDocumentBrowserViewContro
|
||||||
self.dismiss(animated: true, completion: nil)
|
self.dismiss(animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
@available(iOS 11.0, *)
|
|
||||||
func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentsAt documentURLs: [URL]) {
|
func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentsAt documentURLs: [URL]) {
|
||||||
do {
|
do {
|
||||||
if let url = documentURLs.first {
|
if let url = documentURLs.first {
|
||||||
|
|
|
@ -14,5 +14,14 @@ class SplitViewController: UISplitViewController, UISplitViewControllerDelegate
|
||||||
self.delegate = self
|
self.delegate = self
|
||||||
self.preferredDisplayMode = .allVisible
|
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
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,10 +20,12 @@ class TableViewController: UITableViewController {
|
||||||
@IBOutlet var statsSelfCoords: UILabel!
|
@IBOutlet var statsSelfCoords: UILabel!
|
||||||
@IBOutlet var statsSelfPeers: UILabel!
|
@IBOutlet var statsSelfPeers: UILabel!
|
||||||
|
|
||||||
|
@IBOutlet var statsVersion: UILabel!
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(self.onYggdrasilSelfUpdated), name: NSNotification.Name.YggdrasilSelfUpdated, object: nil)
|
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.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)
|
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 {
|
if let row = self.tableView.indexPathForSelectedRow {
|
||||||
self.tableView.deselectRow(at: row, animated: true)
|
self.tableView.deselectRow(at: row, animated: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.statsVersion.text = Yggdrasil.MobileGetVersion()
|
||||||
}
|
}
|
||||||
|
|
||||||
override func viewWillDisappear(_ animated: Bool) {
|
override func viewWillDisappear(_ animated: Bool) {
|
||||||
|
@ -65,18 +69,18 @@ class TableViewController: UITableViewController {
|
||||||
|
|
||||||
if let footer = toggleTableView.footerView(forSection: 0) {
|
if let footer = toggleTableView.footerView(forSection: 0) {
|
||||||
if let label = footer.textLabel {
|
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() {
|
func updateConnectedStatus() {
|
||||||
if self.app.vpnManager.connection.status == .connected {
|
if self.app.vpnManager.connection.status == .connected {
|
||||||
if app.yggdrasilSwitchPeers.count > 0 {
|
if app.yggdrasilDHT.count > 0 {
|
||||||
connectedStatusLabel.text = "Connected"
|
connectedStatusLabel.text = "Enabled"
|
||||||
connectedStatusLabel.textColor = UIColor(red: 0.37, green: 0.79, blue: 0.35, alpha: 1.0)
|
connectedStatusLabel.textColor = UIColor(red: 0.37, green: 0.79, blue: 0.35, alpha: 1.0)
|
||||||
} else {
|
} else {
|
||||||
connectedStatusLabel.text = "No active connections"
|
connectedStatusLabel.text = "No connectivity"
|
||||||
connectedStatusLabel.textColor = UIColor.red
|
connectedStatusLabel.textColor = UIColor.red
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -104,12 +108,12 @@ class TableViewController: UITableViewController {
|
||||||
self.updateConnectedStatus()
|
self.updateConnectedStatus()
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func onYggdrasilSwitchPeersUpdated(notification: NSNotification) {
|
@objc func onYggdrasilDHTUpdated(notification: NSNotification) {
|
||||||
self.updateConnectedStatus()
|
self.updateConnectedStatus()
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func onYggdrasilPeersUpdated(notification: NSNotification) {
|
@objc func onYggdrasilPeersUpdated(notification: NSNotification) {
|
||||||
let peercount = app.yggdrasilSwitchPeers.count
|
let peercount = app.yggdrasilPeers.count
|
||||||
if peercount <= 0 {
|
if peercount <= 0 {
|
||||||
statsSelfPeers.text = "No peers"
|
statsSelfPeers.text = "No peers"
|
||||||
} else if peercount == 1 {
|
} else if peercount == 1 {
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 51;
|
objectVersion = 52;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
@ -11,13 +11,11 @@
|
||||||
3939196B21E35A7C009320F3 /* PeersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3939196A21E35A7C009320F3 /* PeersViewController.swift */; };
|
3939196B21E35A7C009320F3 /* PeersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3939196A21E35A7C009320F3 /* PeersViewController.swift */; };
|
||||||
3939196D21E39313009320F3 /* UIDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3939196C21E39313009320F3 /* UIDevice.swift */; };
|
3939196D21E39313009320F3 /* UIDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3939196C21E39313009320F3 /* UIDevice.swift */; };
|
||||||
3939197321E39815009320F3 /* ToggleTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3939197221E39815009320F3 /* ToggleTableViewCell.swift */; };
|
3939197321E39815009320F3 /* ToggleTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3939197221E39815009320F3 /* ToggleTableViewCell.swift */; };
|
||||||
3939197521E3AADB009320F3 /* ConfigurationProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3939197421E3AADB009320F3 /* ConfigurationProxy.swift */; };
|
|
||||||
3940354623F4C0C100E81A29 /* Yggdrasil.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3944B66321DAAEA500AF102D /* Yggdrasil.framework */; };
|
|
||||||
394A1EB321DEA46400D9F553 /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 394A1EB221DEA46400D9F553 /* SettingsViewController.swift */; };
|
394A1EB321DEA46400D9F553 /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 394A1EB221DEA46400D9F553 /* SettingsViewController.swift */; };
|
||||||
39682A392225AD15004FB670 /* CopyableLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39682A382225AD15004FB670 /* CopyableLabel.swift */; };
|
39682A392225AD15004FB670 /* CopyableLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39682A382225AD15004FB670 /* CopyableLabel.swift */; };
|
||||||
397346D521E8E422009B17F6 /* CrossPlatformAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 397346D421E8E422009B17F6 /* CrossPlatformAppDelegate.swift */; };
|
3996AF38270328080070947D /* Yggdrasil.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3996AF37270328080070947D /* Yggdrasil.xcframework */; };
|
||||||
|
3996AF39270328080070947D /* Yggdrasil.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3996AF37270328080070947D /* Yggdrasil.xcframework */; };
|
||||||
39AE88392319C93F0010FFF6 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39AE88382319C93F0010FFF6 /* NetworkExtension.framework */; };
|
39AE88392319C93F0010FFF6 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39AE88382319C93F0010FFF6 /* NetworkExtension.framework */; };
|
||||||
39AE883A2319CA750010FFF6 /* ConfigurationProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3939197421E3AADB009320F3 /* ConfigurationProxy.swift */; };
|
|
||||||
39CC924C221DEDCE004960DC /* NSNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39CC924B221DEDCE004960DC /* NSNotification.swift */; };
|
39CC924C221DEDCE004960DC /* NSNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39CC924B221DEDCE004960DC /* NSNotification.swift */; };
|
||||||
39CC924D221DEDD3004960DC /* NSNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39CC924B221DEDCE004960DC /* NSNotification.swift */; };
|
39CC924D221DEDD3004960DC /* NSNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39CC924B221DEDCE004960DC /* NSNotification.swift */; };
|
||||||
E593CE6F1DF8FC3C00D7265D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E593CE6E1DF8FC3C00D7265D /* AppDelegate.swift */; };
|
E593CE6F1DF8FC3C00D7265D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E593CE6E1DF8FC3C00D7265D /* AppDelegate.swift */; };
|
||||||
|
@ -60,12 +58,9 @@
|
||||||
3939196A21E35A7C009320F3 /* PeersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeersViewController.swift; sourceTree = "<group>"; };
|
3939196A21E35A7C009320F3 /* PeersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeersViewController.swift; sourceTree = "<group>"; };
|
||||||
3939196C21E39313009320F3 /* UIDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIDevice.swift; sourceTree = "<group>"; };
|
3939196C21E39313009320F3 /* UIDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIDevice.swift; sourceTree = "<group>"; };
|
||||||
3939197221E39815009320F3 /* ToggleTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleTableViewCell.swift; sourceTree = "<group>"; };
|
3939197221E39815009320F3 /* ToggleTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
3939197421E3AADB009320F3 /* ConfigurationProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfigurationProxy.swift; sourceTree = "<group>"; };
|
|
||||||
3944B66321DAAEA500AF102D /* Yggdrasil.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Yggdrasil.framework; sourceTree = "<group>"; };
|
|
||||||
394A1EB221DEA46400D9F553 /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = "<group>"; };
|
394A1EB221DEA46400D9F553 /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = "<group>"; };
|
||||||
39682A382225AD15004FB670 /* CopyableLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyableLabel.swift; sourceTree = "<group>"; };
|
39682A382225AD15004FB670 /* CopyableLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyableLabel.swift; sourceTree = "<group>"; };
|
||||||
397346D021E8BB5F009B17F6 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/NetworkExtension.framework; sourceTree = DEVELOPER_DIR; };
|
3996AF37270328080070947D /* Yggdrasil.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = Yggdrasil.xcframework; sourceTree = "<group>"; };
|
||||||
397346D421E8E422009B17F6 /* CrossPlatformAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrossPlatformAppDelegate.swift; sourceTree = "<group>"; };
|
|
||||||
39AE88382319C93F0010FFF6 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
|
39AE88382319C93F0010FFF6 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
|
||||||
39CC924B221DEDCE004960DC /* NSNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSNotification.swift; sourceTree = "<group>"; };
|
39CC924B221DEDCE004960DC /* NSNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSNotification.swift; sourceTree = "<group>"; };
|
||||||
E593CE6B1DF8FC3C00D7265D /* YggdrasilNetwork.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = YggdrasilNetwork.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
E593CE6B1DF8FC3C00D7265D /* YggdrasilNetwork.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = YggdrasilNetwork.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
@ -85,6 +80,7 @@
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
3996AF38270328080070947D /* Yggdrasil.xcframework in Frameworks */,
|
||||||
39AE88392319C93F0010FFF6 /* NetworkExtension.framework in Frameworks */,
|
39AE88392319C93F0010FFF6 /* NetworkExtension.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
@ -93,7 +89,7 @@
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
3940354623F4C0C100E81A29 /* Yggdrasil.framework in Frameworks */,
|
3996AF39270328080070947D /* Yggdrasil.xcframework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -149,29 +145,18 @@
|
||||||
399D032221DA775D0016354F /* Frameworks */ = {
|
399D032221DA775D0016354F /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
3996AF37270328080070947D /* Yggdrasil.xcframework */,
|
||||||
39AE88382319C93F0010FFF6 /* NetworkExtension.framework */,
|
39AE88382319C93F0010FFF6 /* NetworkExtension.framework */,
|
||||||
397346D021E8BB5F009B17F6 /* NetworkExtension.framework */,
|
|
||||||
3944B66321DAAEA500AF102D /* Yggdrasil.framework */,
|
|
||||||
);
|
);
|
||||||
name = Frameworks;
|
name = Frameworks;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
39AE88372319C8840010FFF6 /* Yggdrasil Network Cross-Platform */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
397346D421E8E422009B17F6 /* CrossPlatformAppDelegate.swift */,
|
|
||||||
3939197421E3AADB009320F3 /* ConfigurationProxy.swift */,
|
|
||||||
);
|
|
||||||
path = "Yggdrasil Network Cross-Platform";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
E593CE621DF8FC3C00D7265D = {
|
E593CE621DF8FC3C00D7265D = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
3913E99E21DB9B41001E0EC7 /* YggdrasilNetwork.entitlements */,
|
3913E99E21DB9B41001E0EC7 /* YggdrasilNetwork.entitlements */,
|
||||||
3913E99C21DB9B1C001E0EC7 /* YggdrasilNetworkExtension.entitlements */,
|
3913E99C21DB9B1C001E0EC7 /* YggdrasilNetworkExtension.entitlements */,
|
||||||
E593CE981DF905AF00D7265D /* Yggdrasil Network Extension */,
|
E593CE981DF905AF00D7265D /* Yggdrasil Network Extension */,
|
||||||
39AE88372319C8840010FFF6 /* Yggdrasil Network Cross-Platform */,
|
|
||||||
E593CE6D1DF8FC3C00D7265D /* Yggdrasil Network iOS */,
|
E593CE6D1DF8FC3C00D7265D /* Yggdrasil Network iOS */,
|
||||||
E593CE6C1DF8FC3C00D7265D /* Products */,
|
E593CE6C1DF8FC3C00D7265D /* Products */,
|
||||||
399D032221DA775D0016354F /* Frameworks */,
|
399D032221DA775D0016354F /* Frameworks */,
|
||||||
|
@ -256,14 +241,12 @@
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 1010;
|
LastSwiftUpdateCheck = 1010;
|
||||||
LastUpgradeCheck = 1030;
|
LastUpgradeCheck = 1250;
|
||||||
ORGANIZATIONNAME = "";
|
ORGANIZATIONNAME = "";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
E593CE6A1DF8FC3C00D7265D = {
|
E593CE6A1DF8FC3C00D7265D = {
|
||||||
CreatedOnToolsVersion = 8.1;
|
CreatedOnToolsVersion = 8.1;
|
||||||
DevelopmentTeam = R9AV23TXF2;
|
|
||||||
LastSwiftMigration = 1030;
|
LastSwiftMigration = 1030;
|
||||||
ProvisioningStyle = Automatic;
|
|
||||||
SystemCapabilities = {
|
SystemCapabilities = {
|
||||||
com.apple.ApplicationGroups.iOS = {
|
com.apple.ApplicationGroups.iOS = {
|
||||||
enabled = 1;
|
enabled = 1;
|
||||||
|
@ -281,9 +264,7 @@
|
||||||
};
|
};
|
||||||
E593CE961DF905AF00D7265D = {
|
E593CE961DF905AF00D7265D = {
|
||||||
CreatedOnToolsVersion = 8.1;
|
CreatedOnToolsVersion = 8.1;
|
||||||
DevelopmentTeam = R9AV23TXF2;
|
|
||||||
LastSwiftMigration = 1030;
|
LastSwiftMigration = 1030;
|
||||||
ProvisioningStyle = Automatic;
|
|
||||||
SystemCapabilities = {
|
SystemCapabilities = {
|
||||||
com.apple.ApplicationGroups.iOS = {
|
com.apple.ApplicationGroups.iOS = {
|
||||||
enabled = 1;
|
enabled = 1;
|
||||||
|
@ -348,9 +329,7 @@
|
||||||
394A1EB321DEA46400D9F553 /* SettingsViewController.swift in Sources */,
|
394A1EB321DEA46400D9F553 /* SettingsViewController.swift in Sources */,
|
||||||
E593CE711DF8FC3C00D7265D /* TableViewController.swift in Sources */,
|
E593CE711DF8FC3C00D7265D /* TableViewController.swift in Sources */,
|
||||||
39682A392225AD15004FB670 /* CopyableLabel.swift in Sources */,
|
39682A392225AD15004FB670 /* CopyableLabel.swift in Sources */,
|
||||||
3939197521E3AADB009320F3 /* ConfigurationProxy.swift in Sources */,
|
|
||||||
E593CE6F1DF8FC3C00D7265D /* AppDelegate.swift in Sources */,
|
E593CE6F1DF8FC3C00D7265D /* AppDelegate.swift in Sources */,
|
||||||
397346D521E8E422009B17F6 /* CrossPlatformAppDelegate.swift in Sources */,
|
|
||||||
3913E9C021DD3A51001E0EC7 /* SplitViewController.swift in Sources */,
|
3913E9C021DD3A51001E0EC7 /* SplitViewController.swift in Sources */,
|
||||||
39CC924C221DEDCE004960DC /* NSNotification.swift in Sources */,
|
39CC924C221DEDCE004960DC /* NSNotification.swift in Sources */,
|
||||||
);
|
);
|
||||||
|
@ -362,7 +341,6 @@
|
||||||
files = (
|
files = (
|
||||||
39CC924D221DEDD3004960DC /* NSNotification.swift in Sources */,
|
39CC924D221DEDD3004960DC /* NSNotification.swift in Sources */,
|
||||||
E593CE9C1DF905AF00D7265D /* PacketTunnelProvider.swift in Sources */,
|
E593CE9C1DF905AF00D7265D /* PacketTunnelProvider.swift in Sources */,
|
||||||
39AE883A2319CA750010FFF6 /* ConfigurationProxy.swift in Sources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -421,6 +399,7 @@
|
||||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
@ -446,7 +425,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.1;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
@ -484,6 +463,7 @@
|
||||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
@ -503,7 +483,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.1;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
@ -522,9 +502,9 @@
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = YggdrasilNetwork.entitlements;
|
CODE_SIGN_ENTITLEMENTS = YggdrasilNetwork.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 21;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_TEAM = R9AV23TXF2;
|
DEVELOPMENT_TEAM = R9AV23TXF2;
|
||||||
ENABLE_BITCODE = YES;
|
ENABLE_BITCODE = YES;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
@ -532,14 +512,17 @@
|
||||||
"$(PROJECT_DIR)",
|
"$(PROJECT_DIR)",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Yggdrasil Network iOS/Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Yggdrasil Network iOS/Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = eu.neilalexander.yggdrasil;
|
PRODUCT_BUNDLE_IDENTIFIER = eu.neilalexander.yggdrasil;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
STRIP_INSTALLED_PRODUCT = NO;
|
STRIP_INSTALLED_PRODUCT = NO;
|
||||||
|
SUPPORTS_MACCATALYST = NO;
|
||||||
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
@ -553,9 +536,9 @@
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = YggdrasilNetwork.entitlements;
|
CODE_SIGN_ENTITLEMENTS = YggdrasilNetwork.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 21;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_TEAM = R9AV23TXF2;
|
DEVELOPMENT_TEAM = R9AV23TXF2;
|
||||||
ENABLE_BITCODE = YES;
|
ENABLE_BITCODE = YES;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
@ -563,13 +546,16 @@
|
||||||
"$(PROJECT_DIR)",
|
"$(PROJECT_DIR)",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Yggdrasil Network iOS/Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Yggdrasil Network iOS/Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = eu.neilalexander.yggdrasil;
|
PRODUCT_BUNDLE_IDENTIFIER = eu.neilalexander.yggdrasil;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
SUPPORTS_MACCATALYST = NO;
|
||||||
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
@ -580,9 +566,9 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = YggdrasilNetworkExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = YggdrasilNetworkExtension.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 21;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_TEAM = R9AV23TXF2;
|
DEVELOPMENT_TEAM = R9AV23TXF2;
|
||||||
ENABLE_BITCODE = YES;
|
ENABLE_BITCODE = YES;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
@ -590,7 +576,8 @@
|
||||||
"$(PROJECT_DIR)",
|
"$(PROJECT_DIR)",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Yggdrasil Network Extension/Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Yggdrasil Network Extension/Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
|
"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
|
@ -600,8 +587,11 @@
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
STRIP_INSTALLED_PRODUCT = NO;
|
STRIP_INSTALLED_PRODUCT = NO;
|
||||||
|
SUPPORTS_MACCATALYST = NO;
|
||||||
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2,6";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -609,9 +599,9 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = YggdrasilNetworkExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = YggdrasilNetworkExtension.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 21;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_TEAM = R9AV23TXF2;
|
DEVELOPMENT_TEAM = R9AV23TXF2;
|
||||||
ENABLE_BITCODE = YES;
|
ENABLE_BITCODE = YES;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
@ -619,7 +609,8 @@
|
||||||
"$(PROJECT_DIR)",
|
"$(PROJECT_DIR)",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Yggdrasil Network Extension/Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Yggdrasil Network Extension/Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
|
"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
|
@ -629,8 +620,11 @@
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE = "8ce353d5-fd5f-4d5e-b664-8ad294091125";
|
PROVISIONING_PROFILE = "8ce353d5-fd5f-4d5e-b664-8ad294091125";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
SUPPORTS_MACCATALYST = NO;
|
||||||
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2,6";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1110"
|
LastUpgradeVersion = "1250"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1110"
|
LastUpgradeVersion = "1250"
|
||||||
wasCreatedForAppExtension = "YES"
|
wasCreatedForAppExtension = "YES"
|
||||||
version = "2.0">
|
version = "2.0">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
|
|
|
@ -10,9 +10,13 @@
|
||||||
<array>
|
<array>
|
||||||
<string>allow-vpn</string>
|
<string>allow-vpn</string>
|
||||||
</array>
|
</array>
|
||||||
|
<key>com.apple.security.app-sandbox</key>
|
||||||
|
<true/>
|
||||||
<key>com.apple.security.application-groups</key>
|
<key>com.apple.security.application-groups</key>
|
||||||
<array>
|
<array>
|
||||||
<string>group.eu.neilalexander.yggdrasil</string>
|
<string>group.eu.neilalexander.yggdrasil</string>
|
||||||
</array>
|
</array>
|
||||||
|
<key>com.apple.security.network.client</key>
|
||||||
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>com.apple.developer.networking.multicast</key>
|
||||||
|
<true/>
|
||||||
<key>com.apple.developer.networking.networkextension</key>
|
<key>com.apple.developer.networking.networkextension</key>
|
||||||
<array>
|
<array>
|
||||||
<string>packet-tunnel-provider</string>
|
<string>packet-tunnel-provider</string>
|
||||||
|
@ -10,9 +12,13 @@
|
||||||
<array>
|
<array>
|
||||||
<string>allow-vpn</string>
|
<string>allow-vpn</string>
|
||||||
</array>
|
</array>
|
||||||
|
<key>com.apple.security.app-sandbox</key>
|
||||||
|
<true/>
|
||||||
<key>com.apple.security.application-groups</key>
|
<key>com.apple.security.application-groups</key>
|
||||||
<array>
|
<array>
|
||||||
<string>group.eu.neilalexander.yggdrasil</string>
|
<string>group.eu.neilalexander.yggdrasil</string>
|
||||||
</array>
|
</array>
|
||||||
|
<key>com.apple.security.network.client</key>
|
||||||
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue