From f00738d5d4b3b10fe11ae194ab233f341a13225d Mon Sep 17 00:00:00 2001 From: Caleb Jasik Date: Mon, 10 Feb 2025 17:55:08 -0600 Subject: [PATCH] Enable ExistentialAny swift feature flag --- .../PacketTunnelProvider.swift | 10 +++++----- ios/NebulaNetworkExtension/Site.swift | 6 +++--- ios/NebulaNetworkExtension/SiteList.swift | 6 +++--- ios/Runner.xcodeproj/project.pbxproj | 3 +++ ios/Runner/AppDelegate.swift | 4 ++-- ios/Runner/DNUpdate.swift | 2 +- ios/Runner/Sites.swift | 12 ++++++------ 7 files changed, 23 insertions(+), 20 deletions(-) diff --git a/ios/NebulaNetworkExtension/PacketTunnelProvider.swift b/ios/NebulaNetworkExtension/PacketTunnelProvider.swift index dffb054..944624b 100644 --- a/ios/NebulaNetworkExtension/PacketTunnelProvider.swift +++ b/ios/NebulaNetworkExtension/PacketTunnelProvider.swift @@ -209,7 +209,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider { return nil } - var error: Error? + var error: (any Error)? var data: JSON? // start command has special treatment due to needing to call two completers @@ -251,25 +251,25 @@ class PacketTunnelProvider: NEPacketTunnelProvider { } } - private func listHostmap(pending: Bool) -> (JSON?, Error?) { + private func listHostmap(pending: Bool) -> (JSON?, (any Error)?) { var err: NSError? let res = nebula!.listHostmap(pending, error: &err) return (JSON(res), err) } - private func getHostInfo(args: JSON) -> (JSON?, Error?) { + private func getHostInfo(args: JSON) -> (JSON?, (any Error)?) { var err: NSError? let res = nebula!.getHostInfo(byVpnIp: args["vpnIp"].string, pending: args["pending"].boolValue, error: &err) return (JSON(res), err) } - private func setRemoteForTunnel(args: JSON) -> (JSON?, Error?) { + private func setRemoteForTunnel(args: JSON) -> (JSON?, (any Error)?) { var err: NSError? let res = nebula!.setRemoteForTunnel(args["vpnIp"].string, addr: args["addr"].string, error: &err) return (JSON(res), err) } - private func closeTunnel(args: JSON) -> (JSON?, Error?) { + private func closeTunnel(args: JSON) -> (JSON?, (any Error)?) { let res = nebula!.closeTunnel(args["vpnIp"].string) return (JSON(res), nil) } diff --git a/ios/NebulaNetworkExtension/Site.swift b/ios/NebulaNetworkExtension/Site.swift index 3523bdb..7101b9c 100644 --- a/ios/NebulaNetworkExtension/Site.swift +++ b/ios/NebulaNetworkExtension/Site.swift @@ -456,7 +456,7 @@ struct IncomingSite: Codable { return try encoder.encode(config) } - func save(manager: NETunnelProviderManager?, saveToManager: Bool = true, callback: @escaping (Error?) -> ()) { + func save(manager: NETunnelProviderManager?, saveToManager: Bool = true, callback: @escaping ((any Error)?) -> ()) { let configPath: URL do { @@ -503,7 +503,7 @@ struct IncomingSite: Codable { #endif } - private func saveToManager(manager: NETunnelProviderManager?, callback: @escaping (Error?) -> ()) { + private func saveToManager(manager: NETunnelProviderManager?, callback: @escaping ((any Error)?) -> ()) { if (manager != nil) { // We need to refresh our settings to properly update config manager?.loadFromPreferences { error in @@ -519,7 +519,7 @@ struct IncomingSite: Codable { return finishSaveToManager(manager: NETunnelProviderManager(), callback: callback) } - private func finishSaveToManager(manager: NETunnelProviderManager, callback: @escaping (Error?) -> ()) { + private func finishSaveToManager(manager: NETunnelProviderManager, callback: @escaping ((any Error)?) -> ()) { // Stuff our details in the protocol let proto = manager.protocolConfiguration as? NETunnelProviderProtocol ?? NETunnelProviderProtocol() proto.providerBundleIdentifier = "net.defined.mobileNebula.NebulaNetworkExtension"; diff --git a/ios/NebulaNetworkExtension/SiteList.swift b/ios/NebulaNetworkExtension/SiteList.swift index b6f2bb9..1bc4c06 100644 --- a/ios/NebulaNetworkExtension/SiteList.swift +++ b/ios/NebulaNetworkExtension/SiteList.swift @@ -45,7 +45,7 @@ class SiteList { return try getSiteDir(id: id, create: createDir).appendingPathComponent("logs", isDirectory: false) } - init(completion: @escaping ([String: Site]?, Error?) -> ()) { + init(completion: @escaping ([String: Site]?, (any Error)?) -> ()) { #if targetEnvironment(simulator) SiteList.loadAllFromFS { sites, err in if sites != nil { @@ -63,7 +63,7 @@ class SiteList { #endif } - private static func loadAllFromFS(completion: @escaping ([String: Site]?, Error?) -> ()) { + private static func loadAllFromFS(completion: @escaping ([String: Site]?, (any Error)?) -> ()) { let fileManager = FileManager.default var siteDirs: [URL] var sites = [String: Site]() @@ -91,7 +91,7 @@ class SiteList { completion(sites, nil) } - private static func loadAllFromNETPM(completion: @escaping ([String: Site]?, Error?) -> ()) { + private static func loadAllFromNETPM(completion: @escaping ([String: Site]?, (any Error)?) -> ()) { var sites = [String: Site]() // dispatchGroup is used to ensure we have migrated all sites before returning them diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 4625cfd..a7122df 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -565,6 +565,7 @@ SUPPORTED_PLATFORMS = iphoneos; SWIFT_STRICT_CONCURRENCY = complete; SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES; + SWIFT_UPCOMING_FEATURE_EXISTENTIAL_ANY = YES; SWIFT_UPCOMING_FEATURE_GLOBAL_CONCURRENCY = YES; SWIFT_UPCOMING_FEATURE_INFER_SENDABLE_FROM_CAPTURES = YES; SWIFT_VERSION = 5.0; @@ -779,6 +780,7 @@ SDKROOT = iphoneos; SWIFT_STRICT_CONCURRENCY = complete; SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES; + SWIFT_UPCOMING_FEATURE_EXISTENTIAL_ANY = YES; SWIFT_UPCOMING_FEATURE_GLOBAL_CONCURRENCY = YES; SWIFT_UPCOMING_FEATURE_INFER_SENDABLE_FROM_CAPTURES = YES; SWIFT_VERSION = 5.0; @@ -837,6 +839,7 @@ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_STRICT_CONCURRENCY = complete; SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES; + SWIFT_UPCOMING_FEATURE_EXISTENTIAL_ANY = YES; SWIFT_UPCOMING_FEATURE_GLOBAL_CONCURRENCY = YES; SWIFT_UPCOMING_FEATURE_INFER_SENDABLE_FROM_CAPTURES = YES; SWIFT_VERSION = 5.0; diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 0ef062e..7ed9938 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -284,11 +284,11 @@ func MissingArgumentError(message: String, details: Any?) -> FlutterError { } } -func MissingArgumentError(message: String, details: Error? = nil) -> FlutterError { +func MissingArgumentError(message: String, details: (any Error)? = nil) -> FlutterError { return FlutterError(code: "missingArgument", message: message, details: details) } -func NoArgumentsError(message: String? = "no arguments were provided or could not be deserialized", details: Error? = nil) -> FlutterError { +func NoArgumentsError(message: String? = "no arguments were provided or could not be deserialized", details: (any Error)? = nil) -> FlutterError { return FlutterError(code: "noArguments", message: message, details: details) } diff --git a/ios/Runner/DNUpdate.swift b/ios/Runner/DNUpdate.swift index fd566ea..cd9ce54 100644 --- a/ios/Runner/DNUpdate.swift +++ b/ios/Runner/DNUpdate.swift @@ -95,7 +95,7 @@ class RepeatingTimer { self.timeInterval = timeInterval } - private lazy var timer: DispatchSourceTimer = { + private lazy var timer: any DispatchSourceTimer = { let t = DispatchSource.makeTimerSource() t.schedule(deadline: .now(), repeating: self.timeInterval) t.setEventHandler(handler: { [weak self] in diff --git a/ios/Runner/Sites.swift b/ios/Runner/Sites.swift index 7a8f79f..2355772 100644 --- a/ios/Runner/Sites.swift +++ b/ios/Runner/Sites.swift @@ -13,13 +13,13 @@ class SiteContainer { class Sites { private var containers = [String: SiteContainer]() - private var messenger: FlutterBinaryMessenger? + private var messenger: (any FlutterBinaryMessenger)? - init(messenger: FlutterBinaryMessenger?) { + init(messenger: (any FlutterBinaryMessenger)?) { self.messenger = messenger } - func loadSites(completion: @escaping ([String: Site]?, Error?) -> ()) { + func loadSites(completion: @escaping ([String: Site]?, (any Error)?) -> ()) { _ = SiteList { (sites, err) in if (err != nil) { return completion(nil, err) @@ -42,7 +42,7 @@ class Sites { } } - func deleteSite(id: String, callback: @escaping (Error?) -> ()) { + func deleteSite(id: String, callback: @escaping ((any Error)?) -> ()) { if let site = self.containers.removeValue(forKey: id) { _ = KeyChain.delete(key: "\(site.site.id).dnCredentials") _ = KeyChain.delete(key: "\(site.site.id).key") @@ -85,9 +85,9 @@ class SiteUpdater: NSObject, FlutterStreamHandler { private var notification: Any? public var startFunc: (() -> Void)? private var configFd: Int32? = nil - private var configObserver: DispatchSourceFileSystemObject? = nil + private var configObserver: (any DispatchSourceFileSystemObject)? = nil - init(messenger: FlutterBinaryMessenger, site: Site) { + init(messenger: any FlutterBinaryMessenger, site: Site) { do { let configPath = try SiteList.getSiteConfigFile(id: site.id, createDir: false) self.configFd = open(configPath.path, O_EVTONLY)