Skip to content

Commit

Permalink
Enable Swift 6 feature flags (#258)
Browse files Browse the repository at this point in the history
* Specify Swift Language Version 5

* Enable `GlobalConcurrency` swift feature flag

<https://github.com/swiftlang/swift-evolution/blob/945d93776cf44cefaa5e685ede0fa4fc96d460ab/proposals/0412-strict-concurrency-for-global-variables.md>

* Enable `InferSendableFromCaptures` swift feature flag 
<https://github.com/swiftlang/swift-evolution/blob/945d93776cf44cefaa5e685ede0fa4fc96d460ab/proposals/0418-inferring-sendable-for-methods.md#L4>

* Enable `IsolatedDefaultValues` swift feature

<https://github.com/swiftlang/swift-evolution/blob/945d93776cf44cefaa5e685ede0fa4fc96d460ab/proposals/0411-isolated-default-values.md>

* Enable `ImplicitOpenExistentials` swift feature flag

<https://github.com/swiftlang/swift-evolution/blob/main/proposals/0352-implicit-open-existentials.md>

* Enable `DeprecateApplicationMain` swift feature flag

<https://github.com/swiftlang/swift-evolution/blob/945d93776cf44cefaa5e685ede0fa4fc96d460ab/proposals/0383-deprecate-uiapplicationmain-and-nsapplicationmain.md>

* Enable `ForwardTrailingClosures` swift feature flag

<https://github.com/swiftlang/swift-evolution/blob/945d93776cf44cefaa5e685ede0fa4fc96d460ab/proposals/0286-forward-scan-trailing-closures.md>

* Enable `ConciseMagicFile` swift feature flag

<https://github.com/swiftlang/swift-evolution/blob/945d93776cf44cefaa5e685ede0fa4fc96d460ab/proposals/0274-magic-file.md>

* Enable `ImportOBJCForwardDeclarations` swift feature flag

<https://github.com/swiftlang/swift-evolution/blob/945d93776cf44cefaa5e685ede0fa4fc96d460ab/proposals/0384-importing-forward-declared-objc-interfaces-and-protocols.md>

* Enable `DisableOutwardActorInference` swift feature flag

<https://github.com/swiftlang/swift-evolution/blob/main/proposals/0401-remove-property-wrapper-isolation.md>

* Enable `ExistentialAny` swift feature flag

<https://github.com/swiftlang/swift-evolution/blob/945d93776cf44cefaa5e685ede0fa4fc96d460ab/proposals/0335-existential-any.md#L4>

* Annotate existentials with `any` prefix keyword

<https://github.com/swiftlang/swift-evolution/blob/main/proposals/0335-existential-any.md>

* Enable `RegionBasedIsolation` swift feature flag

This adds two warnings to the build complaining about a sending closure.

<https://github.com/swiftlang/swift-evolution/blob/945d93776cf44cefaa5e685ede0fa4fc96d460ab/proposals/0414-region-based-isolation.md>
  • Loading branch information
jasikpark authored Feb 25, 2025
1 parent 69b0a4d commit 330c834
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 20 deletions.
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;
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 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) {
do {
let configPath = try SiteList.getSiteConfigFile(id: site.id, createDir: false)
self.configFd = open(configPath.path, O_EVTONLY)
Expand Down

0 comments on commit 330c834

Please sign in to comment.