From bc0ecf4e007957f7b4a1c07b454ff2b1ff4290f7 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Fri, 20 Aug 2021 18:05:52 +0200 Subject: [PATCH] [connectivity_plus_macos] add ethernet support NOTE: NWPathMonitor is only available since macOS 10.14. --- .../macos/Runner.xcodeproj/project.pbxproj | 6 +-- .../macos/connectivity_plus.podspec | 2 +- .../connectivity_plus_macos/CHANGELOG.md | 8 ++++ .../macos/Classes/ConnectivityPlugin.swift | 47 +++++++++---------- .../macos/connectivity_plus_macos.podspec | 3 +- .../connectivity_plus_macos/pubspec.yaml | 4 +- 6 files changed, 37 insertions(+), 33 deletions(-) diff --git a/packages/connectivity_plus/connectivity_plus/example/macos/Runner.xcodeproj/project.pbxproj b/packages/connectivity_plus/connectivity_plus/example/macos/Runner.xcodeproj/project.pbxproj index 0e2413493f..f0d9fe875e 100644 --- a/packages/connectivity_plus/connectivity_plus/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/connectivity_plus/connectivity_plus/example/macos/Runner.xcodeproj/project.pbxproj @@ -414,7 +414,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -497,7 +497,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -544,7 +544,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/packages/connectivity_plus/connectivity_plus/macos/connectivity_plus.podspec b/packages/connectivity_plus/connectivity_plus/macos/connectivity_plus.podspec index 6e8a049776..6601c10e73 100644 --- a/packages/connectivity_plus/connectivity_plus/macos/connectivity_plus.podspec +++ b/packages/connectivity_plus/connectivity_plus/macos/connectivity_plus.podspec @@ -19,6 +19,6 @@ Pod::Spec.new do |s| s.public_header_files = 'Classes/**/*.h' s.platform = :osx - s.osx.deployment_target = '10.11' + s.osx.deployment_target = '10.14' end diff --git a/packages/connectivity_plus/connectivity_plus_macos/CHANGELOG.md b/packages/connectivity_plus/connectivity_plus_macos/CHANGELOG.md index ed50fcba1a..4f9609f2c1 100644 --- a/packages/connectivity_plus/connectivity_plus_macos/CHANGELOG.md +++ b/packages/connectivity_plus/connectivity_plus_macos/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.1.0 + +- Add ethernet as connectivity result. + + NOTE: The functionality is provided by NWPathMonitor, which is available since + macOS 10.14. Therefore the minimum macOS deployment target has been changed + from 10.11 to 10.14 + ## 1.0.2 - Update connectivity plus diff --git a/packages/connectivity_plus/connectivity_plus_macos/macos/Classes/ConnectivityPlugin.swift b/packages/connectivity_plus/connectivity_plus_macos/macos/Classes/ConnectivityPlugin.swift index eb0d47f073..4f63f8de44 100644 --- a/packages/connectivity_plus/connectivity_plus_macos/macos/Classes/ConnectivityPlugin.swift +++ b/packages/connectivity_plus/connectivity_plus_macos/macos/Classes/ConnectivityPlugin.swift @@ -14,12 +14,17 @@ import Cocoa import FlutterMacOS -import Reachability +import Network import SystemConfiguration.CaptiveNetwork public class ConnectivityPlugin: NSObject, FlutterPlugin, FlutterStreamHandler { - var reach: Reachability? var eventSink: FlutterEventSink? + var pathMonitor = NWPathMonitor() + + override init() { + super.init() + pathMonitor.pathUpdateHandler = pathUpdateHandler + } public static func register(with registrar: FlutterPluginRegistrar) { let channel = FlutterMethodChannel( @@ -39,7 +44,7 @@ public class ConnectivityPlugin: NSObject, FlutterPlugin, FlutterStreamHandler { public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { switch call.method { case "check": - result(statusFromReachability(reachability: Reachability.forInternetConnection())) + result(statusFromPath(path: pathMonitor.currentPath)) default: result(FlutterMethodNotImplemented) } @@ -48,14 +53,18 @@ public class ConnectivityPlugin: NSObject, FlutterPlugin, FlutterStreamHandler { /// Returns a string describing connection type /// /// - Parameters: - /// - reachability: an instance of reachability + /// - path: an instance of NWPath /// - Returns: connection type string - private func statusFromReachability(reachability: Reachability?) -> String { - // checks any non-WWAN connection - if reachability?.isReachableViaWiFi() ?? false { - return "wifi" + private func statusFromPath(path: NWPath) -> String { + if path.status == .satisfied { + if path.usesInterfaceType(.wifi) { + return "wifi" + } else if path.usesInterfaceType(.cellular) { + return "mobile" + } else if path.usesInterfaceType(.wiredEthernet) { + return "ethernet" + } } - return "none" } @@ -63,29 +72,17 @@ public class ConnectivityPlugin: NSObject, FlutterPlugin, FlutterStreamHandler { withArguments _: Any?, eventSink events: @escaping FlutterEventSink ) -> FlutterError? { - reach = Reachability.forInternetConnection() eventSink = events - - NotificationCenter.default.addObserver( - self, - selector: #selector(reachabilityChanged), - name: NSNotification.Name.reachabilityChanged, - object: reach) - - reach?.startNotifier() - + pathMonitor.start(queue: .global(qos: .background)) return nil } - @objc private func reachabilityChanged(notification: NSNotification) { - let reach = notification.object - let reachability = statusFromReachability(reachability: reach as? Reachability) - eventSink?(reachability) + private func pathUpdateHandler(path: NWPath) { + eventSink?(statusFromPath(path: path)) } public func onCancel(withArguments _: Any?) -> FlutterError? { - reach?.stopNotifier() - NotificationCenter.default.removeObserver(self) + pathMonitor.cancel() eventSink = nil return nil } diff --git a/packages/connectivity_plus/connectivity_plus_macos/macos/connectivity_plus_macos.podspec b/packages/connectivity_plus/connectivity_plus_macos/macos/connectivity_plus_macos.podspec index a882199d69..3971b04539 100644 --- a/packages/connectivity_plus/connectivity_plus_macos/macos/connectivity_plus_macos.podspec +++ b/packages/connectivity_plus/connectivity_plus_macos/macos/connectivity_plus_macos.podspec @@ -15,8 +15,7 @@ Pod::Spec.new do |s| s.documentation_url = 'https://pub.dev/packages/connectivity_plus' s.source_files = 'Classes/**/*' s.dependency 'FlutterMacOS' - s.dependency 'Reachability' s.platform = :osx - s.osx.deployment_target = '10.11' + s.osx.deployment_target = '10.14' end \ No newline at end of file diff --git a/packages/connectivity_plus/connectivity_plus_macos/pubspec.yaml b/packages/connectivity_plus/connectivity_plus_macos/pubspec.yaml index 04530c09a7..4971e92574 100644 --- a/packages/connectivity_plus/connectivity_plus_macos/pubspec.yaml +++ b/packages/connectivity_plus/connectivity_plus_macos/pubspec.yaml @@ -1,6 +1,6 @@ name: connectivity_plus_macos description: macOS implementation of the connectivity_plus plugin. -version: 1.0.2 +version: 1.1.0 homepage: https://plus.fluttercommunity.dev/ repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/ @@ -15,6 +15,6 @@ flutter: pluginClass: ConnectivityPlugin dependencies: - connectivity_plus_platform_interface: ^1.0.2 + connectivity_plus_platform_interface: ^1.1.0 flutter: sdk: flutter