Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions ios/NebulaNetworkExtension/PacketTunnelProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,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
Expand Down Expand Up @@ -264,27 +264,27 @@ 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)
}
Expand Down
6 changes: 3 additions & 3 deletions ios/NebulaNetworkExtension/Site.swift
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ struct IncomingSite: Codable {

func save(
manager: NETunnelProviderManager?, saveToManager: Bool = true,
callback: @escaping (Error?) -> Void
callback: @escaping ((any Error)?) -> Void
) {
let configPath: URL

Expand Down Expand Up @@ -506,7 +506,7 @@ struct IncomingSite: Codable {
}

private func saveToManager(
manager: NETunnelProviderManager?, callback: @escaping (Error?) -> Void
manager: NETunnelProviderManager?, callback: @escaping ((any Error)?) -> Void
) {
if manager != nil {
// We need to refresh our settings to properly update config
Expand All @@ -524,7 +524,7 @@ struct IncomingSite: Codable {
}

private func finishSaveToManager(
manager: NETunnelProviderManager, callback: @escaping (Error?) -> Void
manager: NETunnelProviderManager, callback: @escaping ((any Error)?) -> Void
) {
// Stuff our details in the protocol
let proto =
Expand Down
8 changes: 5 additions & 3 deletions ios/NebulaNetworkExtension/SiteList.swift
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class SiteList {
"logs", isDirectory: false)
}

init(completion: @escaping ([String: Site]?, Error?) -> Void) {
init(completion: @escaping ([String: Site]?, (any Error)?) -> Void) {
#if targetEnvironment(simulator)
SiteList.loadAllFromFS { sites, err in
if sites != nil {
Expand All @@ -67,7 +67,7 @@ class SiteList {
#endif
}

private static func loadAllFromFS(completion: @escaping ([String: Site]?, Error?) -> Void) {
private static func loadAllFromFS(completion: @escaping ([String: Site]?, (any Error)?) -> Void) {
let fileManager = FileManager.default
var siteDirs: [URL]
var sites = [String: Site]()
Expand Down Expand Up @@ -97,7 +97,9 @@ class SiteList {
completion(sites, nil)
}

private static func loadAllFromNETPM(completion: @escaping ([String: Site]?, Error?) -> Void) {
private static func loadAllFromNETPM(
completion: @escaping ([String: Site]?, (any Error)?) -> Void
) {
var sites = [String: Site]()

// dispatchGroup is used to ensure we have migrated all sites before returning them
Expand Down
36 changes: 36 additions & 0 deletions ios/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,18 @@
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_UPCOMING_FEATURE_CONCISE_MAGIC_FILE = YES;
SWIFT_UPCOMING_FEATURE_DEPRECATE_APPLICATION_MAIN = YES;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like we might get some warnings from libraries that we use, but it should be fine up until swift 6:

Current Swift libraries will continue to build because they compile under pre-Swift 6 language modes. Under such language modes this proposal adds only an unconditional warning when framework-specific entrypoints are used, and provides diagnostics to avoid the warning by automatically migrating user code.

SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES;
SWIFT_UPCOMING_FEATURE_EXISTENTIAL_ANY = YES;
SWIFT_UPCOMING_FEATURE_FORWARD_TRAILING_CLOSURES = YES;
SWIFT_UPCOMING_FEATURE_GLOBAL_CONCURRENCY = YES;
SWIFT_UPCOMING_FEATURE_IMPLICIT_OPEN_EXISTENTIALS = YES;
SWIFT_UPCOMING_FEATURE_IMPORT_OBJC_FORWARD_DECLS = YES;
SWIFT_UPCOMING_FEATURE_INFER_SENDABLE_FROM_CAPTURES = YES;
SWIFT_UPCOMING_FEATURE_ISOLATED_DEFAULT_VALUES = YES;
SWIFT_UPCOMING_FEATURE_REGION_BASED_ISOLATION = YES;
SWIFT_VERSION = 5.0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious, how was this empty before? What exactly does it do?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe this is just enforcing the default as of XCode 16. XCode 16 ships with the Swift 6 compiler, which can run in Swift 4, Swift 5, or Swift 6 compiler modes. So I'm enforcing the default to then upgrade to 6 later.

TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
Expand Down Expand Up @@ -772,6 +784,18 @@
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_UPCOMING_FEATURE_CONCISE_MAGIC_FILE = YES;
SWIFT_UPCOMING_FEATURE_DEPRECATE_APPLICATION_MAIN = YES;
SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES;
SWIFT_UPCOMING_FEATURE_EXISTENTIAL_ANY = YES;
SWIFT_UPCOMING_FEATURE_FORWARD_TRAILING_CLOSURES = YES;
SWIFT_UPCOMING_FEATURE_GLOBAL_CONCURRENCY = YES;
SWIFT_UPCOMING_FEATURE_IMPLICIT_OPEN_EXISTENTIALS = YES;
SWIFT_UPCOMING_FEATURE_IMPORT_OBJC_FORWARD_DECLS = YES;
SWIFT_UPCOMING_FEATURE_INFER_SENDABLE_FROM_CAPTURES = YES;
SWIFT_UPCOMING_FEATURE_ISOLATED_DEFAULT_VALUES = YES;
SWIFT_UPCOMING_FEATURE_REGION_BASED_ISOLATION = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
Expand Down Expand Up @@ -825,6 +849,18 @@
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_UPCOMING_FEATURE_CONCISE_MAGIC_FILE = YES;
SWIFT_UPCOMING_FEATURE_DEPRECATE_APPLICATION_MAIN = YES;
SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES;
SWIFT_UPCOMING_FEATURE_EXISTENTIAL_ANY = YES;
SWIFT_UPCOMING_FEATURE_FORWARD_TRAILING_CLOSURES = YES;
SWIFT_UPCOMING_FEATURE_GLOBAL_CONCURRENCY = YES;
SWIFT_UPCOMING_FEATURE_IMPLICIT_OPEN_EXISTENTIALS = YES;
SWIFT_UPCOMING_FEATURE_IMPORT_OBJC_FORWARD_DECLS = YES;
SWIFT_UPCOMING_FEATURE_INFER_SENDABLE_FROM_CAPTURES = YES;
SWIFT_UPCOMING_FEATURE_ISOLATED_DEFAULT_VALUES = YES;
SWIFT_UPCOMING_FEATURE_REGION_BASED_ISOLATION = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
Expand Down
4 changes: 2 additions & 2 deletions ios/Runner/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -318,13 +318,13 @@ 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
details: (any Error)? = nil
) -> FlutterError {
return FlutterError(code: "noArguments", message: message, details: details)
}
Expand Down
2 changes: 1 addition & 1 deletion ios/Runner/DNUpdate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,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
Expand Down
12 changes: 6 additions & 6 deletions ios/Runner/Sites.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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?) -> Void) {
func loadSites(completion: @escaping ([String: Site]?, (any Error)?) -> Void) {
_ = SiteList { (sites, err) in
if err != nil {
return completion(nil, err)
Expand All @@ -42,7 +42,7 @@ class Sites {
}
}

func deleteSite(id: String, callback: @escaping (Error?) -> Void) {
func deleteSite(id: String, callback: @escaping ((any Error)?) -> Void) {
if let site = self.containers.removeValue(forKey: id) {
_ = KeyChain.delete(key: "\(site.site.id).dnCredentials")
_ = KeyChain.delete(key: "\(site.site.id).key")
Expand Down Expand Up @@ -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) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious, was this migration manual or automated?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Manually clicking "fix" in XCode, not sure how to make it more like eslint . --fix where they're all applied at once

do {
let configPath = try SiteList.getSiteConfigFile(id: site.id, createDir: false)
self.configFd = open(configPath.path, O_EVTONLY)
Expand Down