From 6e37b89ebde13087d0d59eeafa436352cc021408 Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Thu, 6 Jun 2024 15:01:16 -0700 Subject: [PATCH 01/13] Replace SystemConfiguration with a more recent Apple Provided network monitoring library. --- FirebasePerformance.podspec | 1 - .../AppActivity/FPRAppActivityTracker.h | 4 ++ .../AppActivity/FPRAppActivityTracker.m | 58 ++++++++++++++++++- FirebasePerformance/Sources/FPRNanoPbUtils.m | 34 +---------- 4 files changed, 62 insertions(+), 35 deletions(-) diff --git a/FirebasePerformance.podspec b/FirebasePerformance.podspec index debb8bfe16d..5fe704c46a0 100644 --- a/FirebasePerformance.podspec +++ b/FirebasePerformance.podspec @@ -58,7 +58,6 @@ Firebase Performance library to measure performance of Mobile and Web Apps. s.ios.framework = 'CoreTelephony' s.framework = 'QuartzCore' - s.framework = 'SystemConfiguration' s.dependency 'FirebaseCore', '~> 10.5' s.dependency 'FirebaseInstallations', '~> 10.0' s.dependency 'FirebaseRemoteConfig', '~> 10.0' diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h index 63445a497ad..4886a19613d 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h @@ -13,6 +13,7 @@ // limitations under the License. #import "FirebasePerformance/Sources/Public/FirebasePerformance/FIRTrace.h" +#import "FirebasePerformance/Sources/Protogen/nanopb/perf_metric.nanopb.h" FOUNDATION_EXTERN NSString *__nonnull const kFPRAppStartTraceName; FOUNDATION_EXTERN NSString *__nonnull const kFPRAppStartStageNameTimeToUI; @@ -50,6 +51,9 @@ NS_EXTENSION_UNAVAILABLE("Firebase Performance is not supported for extensions." /** Current running state of the application. */ @property(nonatomic, readonly) FPRApplicationState applicationState; +/** Current network connection type of the application. */ +@property(nonatomic, readonly) firebase_perf_v1_NetworkConnectionInfo_NetworkType networkType; + /** Accesses the singleton instance. * @return Reference to the shared object if successful; nil if not. */ diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m index 55283b8acf8..47947d93970 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m @@ -16,6 +16,7 @@ #import #import +#import #import "FirebasePerformance/Sources/AppActivity/FPRSessionManager.h" #import "FirebasePerformance/Sources/Configurations/FPRConfigurations.h" @@ -55,6 +56,15 @@ @interface FPRAppActivityTracker () /** Current running state of the application. */ @property(nonatomic, readwrite) FPRApplicationState applicationState; +/** Current network connection type of the application. */ +@property(nonatomic, readwrite) firebase_perf_v1_NetworkConnectionInfo_NetworkType networkType; + +/** Network monitor object to track network movements. */ +@property (nonatomic, readwrite) nw_path_monitor_t monitor; + +/** Queue used to track the network monitoring changes. */ +@property (nonatomic, readwrite) dispatch_queue_t monitorQueue; + /** Trace to measure the app start performance. */ @property(nonatomic) FIRTrace *appStartTrace; @@ -122,9 +132,12 @@ + (instancetype)sharedInstance { */ - (instancetype)initAppActivityTracker { self = [super init]; - _applicationState = FPRApplicationStateUnknown; - _appStartGaugeMetricDispatched = NO; - _configurations = [FPRConfigurations sharedInstance]; + if (self != nil) { + _applicationState = FPRApplicationStateUnknown; + _appStartGaugeMetricDispatched = NO; + _configurations = [FPRConfigurations sharedInstance]; + [self startTrackingNetwork]; + } return self; } @@ -147,6 +160,43 @@ - (FIRTrace *)activeTrace { return self.backgroundSessionTrace; } +- (void)startTrackingNetwork { + self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_NONE; + + if (@available(iOS 12, *)) { + dispatch_queue_attr_t attrs = + dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, + QOS_CLASS_UTILITY, + DISPATCH_QUEUE_PRIORITY_DEFAULT); + self.monitorQueue = dispatch_queue_create("com.example.network.monitor", attrs); + + self.monitor = nw_path_monitor_create(); + nw_path_monitor_set_queue(self.monitor, self.monitorQueue); + nw_path_monitor_set_update_handler(self.monitor, ^(nw_path_t _Nonnull path) { + nw_path_status_t status = nw_path_get_status(path); + BOOL isWiFi = nw_path_uses_interface_type(path, nw_interface_type_wifi); + BOOL isCellular = nw_path_uses_interface_type(path, nw_interface_type_cellular); + BOOL isEthernet = nw_path_uses_interface_type(path, nw_interface_type_wired); + BOOL isExpensive = nw_path_is_expensive(path); + BOOL hasIPv4 = nw_path_has_ipv4(path); + BOOL hasIPv6 = nw_path_has_ipv6(path); + BOOL hasNewDNS = nw_path_has_dns(path); + + if (isWiFi) { + self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_WIFI; + } else if (isCellular) { + self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_MOBILE; + } else if (isEthernet) { + self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_ETHERNET; + } else if (hasIPv4) { + self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_NONE; + } + }); + + nw_path_monitor_start(self.monitor); + } +} + /** * Checks if the prewarming feature is available on the current device. * @@ -286,6 +336,8 @@ - (void)appWillResignActiveNotification:(NSNotification *)notification { } - (void)dealloc { + nw_path_monitor_cancel(self.monitor); + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:[UIApplication sharedApplication]]; diff --git a/FirebasePerformance/Sources/FPRNanoPbUtils.m b/FirebasePerformance/Sources/FPRNanoPbUtils.m index 199eec92dfa..7ebd124c976 100644 --- a/FirebasePerformance/Sources/FPRNanoPbUtils.m +++ b/FirebasePerformance/Sources/FPRNanoPbUtils.m @@ -26,6 +26,7 @@ #import "FirebasePerformance/Sources/Public/FirebasePerformance/FIRPerformance.h" #import "FirebasePerformance/Sources/Timer/FIRTrace+Internal.h" #import "FirebasePerformance/Sources/Timer/FIRTrace+Private.h" +#import "FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h" #import "FirebasePerformance/Sources/Gauges/CPU/FPRCPUGaugeData.h" #import "FirebasePerformance/Sources/Gauges/Memory/FPRMemoryGaugeData.h" @@ -72,36 +73,6 @@ static firebase_perf_v1_NetworkRequestMetric_HttpMethod FPRHTTPMethodForString( return HTTPMethod.intValue; } -/** Get the current network connection type in firebase_perf_v1_NetworkConnectionInfo_NetworkType - * format. - * @return Current network connection type. - */ -static firebase_perf_v1_NetworkConnectionInfo_NetworkType FPRNetworkConnectionInfoNetworkType( - void) { - firebase_perf_v1_NetworkConnectionInfo_NetworkType networkType = - firebase_perf_v1_NetworkConnectionInfo_NetworkType_NONE; - - static SCNetworkReachabilityRef reachabilityRef = 0; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - reachabilityRef = SCNetworkReachabilityCreateWithName(kCFAllocatorSystemDefault, "google.com"); - }); - - SCNetworkReachabilityFlags reachabilityFlags = 0; - SCNetworkReachabilityGetFlags(reachabilityRef, &reachabilityFlags); - - // Parse the network flags to set the network type. - if (reachabilityFlags & kSCNetworkReachabilityFlagsReachable) { - if (reachabilityFlags & kSCNetworkReachabilityFlagsIsWWAN) { - networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_MOBILE; - } else { - networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_WIFI; - } - } - - return networkType; -} - #ifdef TARGET_HAS_MOBILE_CONNECTIVITY /** Get the current cellular network connection type in * firebase_perf_v1_NetworkConnectionInfo_MobileSubtype format. @@ -233,7 +204,8 @@ firebase_perf_v1_ApplicationInfo FPRGetApplicationInfoMessage(void) { iosAppInfo.bundle_short_version = FPREncodeString([mainBundle infoDictionary][@"CFBundleShortVersionString"]); iosAppInfo.sdk_version = FPREncodeString([NSString stringWithUTF8String:kFPRSDKVersion]); - iosAppInfo.network_connection_info.network_type = FPRNetworkConnectionInfoNetworkType(); + iosAppInfo.network_connection_info.network_type = + [FPRAppActivityTracker sharedInstance].networkType; iosAppInfo.has_network_connection_info = true; iosAppInfo.network_connection_info.has_network_type = true; #ifdef TARGET_HAS_MOBILE_CONNECTIVITY From e662049ce0fe5f8833f897d5e54ede6edf41ef6f Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Thu, 6 Jun 2024 15:10:00 -0700 Subject: [PATCH 02/13] Satisfy styling gods and add changelog. --- FirebasePerformance/CHANGELOG.md | 1 + .../Sources/AppActivity/FPRAppActivityTracker.h | 2 +- .../Sources/AppActivity/FPRAppActivityTracker.m | 14 ++++++-------- FirebasePerformance/Sources/FPRNanoPbUtils.m | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/FirebasePerformance/CHANGELOG.md b/FirebasePerformance/CHANGELOG.md index f814d7d6290..192741bf7d0 100644 --- a/FirebasePerformance/CHANGELOG.md +++ b/FirebasePerformance/CHANGELOG.md @@ -1,5 +1,6 @@ # Unreleased - Fix Crash from InstrumentUploadTaskWithStreamedRequest (#12983). +- Replace SystemConfiguration with a more available network monitoring API by Apple (#13079). # 10.25.0 - [changed] Removed usages of user defaults API to eliminate required reason impact. diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h index 4886a19613d..a24949e157e 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#import "FirebasePerformance/Sources/Public/FirebasePerformance/FIRTrace.h" #import "FirebasePerformance/Sources/Protogen/nanopb/perf_metric.nanopb.h" +#import "FirebasePerformance/Sources/Public/FirebasePerformance/FIRTrace.h" FOUNDATION_EXTERN NSString *__nonnull const kFPRAppStartTraceName; FOUNDATION_EXTERN NSString *__nonnull const kFPRAppStartStageNameTimeToUI; diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m index 47947d93970..99bc13b0619 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m @@ -15,8 +15,8 @@ #import "FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h" #import -#import #import +#import #import "FirebasePerformance/Sources/AppActivity/FPRSessionManager.h" #import "FirebasePerformance/Sources/Configurations/FPRConfigurations.h" @@ -60,10 +60,10 @@ @interface FPRAppActivityTracker () @property(nonatomic, readwrite) firebase_perf_v1_NetworkConnectionInfo_NetworkType networkType; /** Network monitor object to track network movements. */ -@property (nonatomic, readwrite) nw_path_monitor_t monitor; +@property(nonatomic, readwrite) nw_path_monitor_t monitor; /** Queue used to track the network monitoring changes. */ -@property (nonatomic, readwrite) dispatch_queue_t monitorQueue; +@property(nonatomic, readwrite) dispatch_queue_t monitorQueue; /** Trace to measure the app start performance. */ @property(nonatomic) FIRTrace *appStartTrace; @@ -164,10 +164,8 @@ - (void)startTrackingNetwork { self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_NONE; if (@available(iOS 12, *)) { - dispatch_queue_attr_t attrs = - dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, - QOS_CLASS_UTILITY, - DISPATCH_QUEUE_PRIORITY_DEFAULT); + dispatch_queue_attr_t attrs = dispatch_queue_attr_make_with_qos_class( + DISPATCH_QUEUE_SERIAL, QOS_CLASS_UTILITY, DISPATCH_QUEUE_PRIORITY_DEFAULT); self.monitorQueue = dispatch_queue_create("com.example.network.monitor", attrs); self.monitor = nw_path_monitor_create(); @@ -337,7 +335,7 @@ - (void)appWillResignActiveNotification:(NSNotification *)notification { - (void)dealloc { nw_path_monitor_cancel(self.monitor); - + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:[UIApplication sharedApplication]]; diff --git a/FirebasePerformance/Sources/FPRNanoPbUtils.m b/FirebasePerformance/Sources/FPRNanoPbUtils.m index 7ebd124c976..862beba7f7b 100644 --- a/FirebasePerformance/Sources/FPRNanoPbUtils.m +++ b/FirebasePerformance/Sources/FPRNanoPbUtils.m @@ -20,13 +20,13 @@ #endif #import +#import "FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h" #import "FirebasePerformance/Sources/Common/FPRConstants.h" #import "FirebasePerformance/Sources/FIRPerformance+Internal.h" #import "FirebasePerformance/Sources/FPRDataUtils.h" #import "FirebasePerformance/Sources/Public/FirebasePerformance/FIRPerformance.h" #import "FirebasePerformance/Sources/Timer/FIRTrace+Internal.h" #import "FirebasePerformance/Sources/Timer/FIRTrace+Private.h" -#import "FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h" #import "FirebasePerformance/Sources/Gauges/CPU/FPRCPUGaugeData.h" #import "FirebasePerformance/Sources/Gauges/Memory/FPRMemoryGaugeData.h" From 74abe88ed0ece67a50bbe12c32ba77fcd3495e51 Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Thu, 6 Jun 2024 15:16:06 -0700 Subject: [PATCH 03/13] Code cleanup. --- .../Sources/AppActivity/FPRAppActivityTracker.m | 6 ------ 1 file changed, 6 deletions(-) diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m index 99bc13b0619..3028e9838d5 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m @@ -175,10 +175,6 @@ - (void)startTrackingNetwork { BOOL isWiFi = nw_path_uses_interface_type(path, nw_interface_type_wifi); BOOL isCellular = nw_path_uses_interface_type(path, nw_interface_type_cellular); BOOL isEthernet = nw_path_uses_interface_type(path, nw_interface_type_wired); - BOOL isExpensive = nw_path_is_expensive(path); - BOOL hasIPv4 = nw_path_has_ipv4(path); - BOOL hasIPv6 = nw_path_has_ipv6(path); - BOOL hasNewDNS = nw_path_has_dns(path); if (isWiFi) { self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_WIFI; @@ -186,8 +182,6 @@ - (void)startTrackingNetwork { self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_MOBILE; } else if (isEthernet) { self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_ETHERNET; - } else if (hasIPv4) { - self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_NONE; } }); From 2e03450239ddde26d0dc99de31b3ee5737be2efb Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Thu, 6 Jun 2024 15:55:47 -0700 Subject: [PATCH 04/13] Ensure the API availability on OS version before stopping the monitor. --- .../Sources/AppActivity/FPRAppActivityTracker.m | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m index 3028e9838d5..eafdffc6146 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m @@ -328,7 +328,10 @@ - (void)appWillResignActiveNotification:(NSNotification *)notification { } - (void)dealloc { - nw_path_monitor_cancel(self.monitor); + + if (@available(iOS 12, *)) { + nw_path_monitor_cancel(self.monitor); + } [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification From 6db08bf27ebe8048c3cf3926fa0467037e649ff2 Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Thu, 6 Jun 2024 16:02:30 -0700 Subject: [PATCH 05/13] Fix the styling for recent changes. --- FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m | 1 - 1 file changed, 1 deletion(-) diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m index eafdffc6146..75d763d3634 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m @@ -328,7 +328,6 @@ - (void)appWillResignActiveNotification:(NSNotification *)notification { } - (void)dealloc { - if (@available(iOS 12, *)) { nw_path_monitor_cancel(self.monitor); } From 1106431f15052fb5b7b098d92529b70294a19f53 Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Thu, 6 Jun 2024 16:17:59 -0700 Subject: [PATCH 06/13] Removed the unused function declaration. --- FirebasePerformance/Sources/FPRNanoPbUtils.m | 1 - 1 file changed, 1 deletion(-) diff --git a/FirebasePerformance/Sources/FPRNanoPbUtils.m b/FirebasePerformance/Sources/FPRNanoPbUtils.m index 862beba7f7b..8a41a8aedec 100644 --- a/FirebasePerformance/Sources/FPRNanoPbUtils.m +++ b/FirebasePerformance/Sources/FPRNanoPbUtils.m @@ -35,7 +35,6 @@ static firebase_perf_v1_NetworkRequestMetric_HttpMethod FPRHTTPMethodForString( NSString *methodString); -static firebase_perf_v1_NetworkConnectionInfo_NetworkType FPRNetworkConnectionInfoNetworkType(void); #ifdef TARGET_HAS_MOBILE_CONNECTIVITY static firebase_perf_v1_NetworkConnectionInfo_MobileSubtype FPRCellularNetworkType(void); #endif From 28f805e6420f6914b9b73fa0d408dbfd66dac60b Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Thu, 6 Jun 2024 16:19:38 -0700 Subject: [PATCH 07/13] Remove unused code. --- FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m | 1 - 1 file changed, 1 deletion(-) diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m index 75d763d3634..d639ed53f0d 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m @@ -171,7 +171,6 @@ - (void)startTrackingNetwork { self.monitor = nw_path_monitor_create(); nw_path_monitor_set_queue(self.monitor, self.monitorQueue); nw_path_monitor_set_update_handler(self.monitor, ^(nw_path_t _Nonnull path) { - nw_path_status_t status = nw_path_get_status(path); BOOL isWiFi = nw_path_uses_interface_type(path, nw_interface_type_wifi); BOOL isCellular = nw_path_uses_interface_type(path, nw_interface_type_cellular); BOOL isEthernet = nw_path_uses_interface_type(path, nw_interface_type_wired); From 039bdc70e8438dffedc5647071c5bfdee4fd285b Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Fri, 7 Jun 2024 08:33:16 -0700 Subject: [PATCH 08/13] Address comments. --- .../Sources/AppActivity/FPRAppActivityTracker.m | 6 +++++- FirebasePerformance/Sources/FPRNanoPbUtils.m | 1 - Package.swift | 1 - 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m index d639ed53f0d..74a991c25c4 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m @@ -163,10 +163,14 @@ - (FIRTrace *)activeTrace { - (void)startTrackingNetwork { self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_NONE; +#if TARGET_OS_IOS if (@available(iOS 12, *)) { +#elif TARGET_OS_TVOS + if (@available(tvOS 12, *)) { +#endif dispatch_queue_attr_t attrs = dispatch_queue_attr_make_with_qos_class( DISPATCH_QUEUE_SERIAL, QOS_CLASS_UTILITY, DISPATCH_QUEUE_PRIORITY_DEFAULT); - self.monitorQueue = dispatch_queue_create("com.example.network.monitor", attrs); + self.monitorQueue = dispatch_queue_create("com.google.perf.network.monitor", attrs); self.monitor = nw_path_monitor_create(); nw_path_monitor_set_queue(self.monitor, self.monitorQueue); diff --git a/FirebasePerformance/Sources/FPRNanoPbUtils.m b/FirebasePerformance/Sources/FPRNanoPbUtils.m index 8a41a8aedec..1c89c2fc015 100644 --- a/FirebasePerformance/Sources/FPRNanoPbUtils.m +++ b/FirebasePerformance/Sources/FPRNanoPbUtils.m @@ -18,7 +18,6 @@ #import #import #endif -#import #import "FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.h" #import "FirebasePerformance/Sources/Common/FPRConstants.h" diff --git a/Package.swift b/Package.swift index f104e41e747..978145d5852 100644 --- a/Package.swift +++ b/Package.swift @@ -949,7 +949,6 @@ let package = Package( .define("FIRPerformance_LIB_VERSION", to: firebaseVersion), ], linkerSettings: [ - .linkedFramework("SystemConfiguration", .when(platforms: [.iOS, .tvOS])), .linkedFramework("MobileCoreServices", .when(platforms: [.iOS, .tvOS])), .linkedFramework("QuartzCore", .when(platforms: [.iOS, .tvOS])), ] From c16f52f4fd8fe9bdc7b80407b8f5cc99faa9a644 Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Fri, 7 Jun 2024 08:34:30 -0700 Subject: [PATCH 09/13] Include the platform check in network unmonitor code as well. --- .../Sources/AppActivity/FPRAppActivityTracker.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m index 74a991c25c4..5ace7b47128 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m @@ -331,7 +331,11 @@ - (void)appWillResignActiveNotification:(NSNotification *)notification { } - (void)dealloc { +#if TARGET_OS_IOS if (@available(iOS 12, *)) { +#elif TARGET_OS_TVOS + if (@available(tvOS 12, *)) { +#endif nw_path_monitor_cancel(self.monitor); } From f313edff0108b699e5956ae4122ecb646054b25f Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Fri, 7 Jun 2024 08:47:27 -0700 Subject: [PATCH 10/13] Fix the macro for TVOS. --- .../Sources/AppActivity/FPRAppActivityTracker.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m index 5ace7b47128..92ce75b28f7 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m @@ -165,7 +165,7 @@ - (void)startTrackingNetwork { #if TARGET_OS_IOS if (@available(iOS 12, *)) { -#elif TARGET_OS_TVOS +#elif TARGET_OS_TV if (@available(tvOS 12, *)) { #endif dispatch_queue_attr_t attrs = dispatch_queue_attr_make_with_qos_class( @@ -333,7 +333,7 @@ - (void)appWillResignActiveNotification:(NSNotification *)notification { - (void)dealloc { #if TARGET_OS_IOS if (@available(iOS 12, *)) { -#elif TARGET_OS_TVOS +#elif TARGET_OS_TV if (@available(tvOS 12, *)) { #endif nw_path_monitor_cancel(self.monitor); From 018487e64338a15239d07ceccb93dac94c35d9f8 Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Fri, 7 Jun 2024 08:56:49 -0700 Subject: [PATCH 11/13] Address few more comments. --- .../Sources/AppActivity/FPRAppActivityTracker.m | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m index 92ce75b28f7..7c03395ab77 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m @@ -163,6 +163,7 @@ - (FIRTrace *)activeTrace { - (void)startTrackingNetwork { self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_NONE; + __weak FPRAppActivityTracker *weakSelf = self; #if TARGET_OS_IOS if (@available(iOS 12, *)) { #elif TARGET_OS_TV @@ -170,21 +171,22 @@ - (void)startTrackingNetwork { #endif dispatch_queue_attr_t attrs = dispatch_queue_attr_make_with_qos_class( DISPATCH_QUEUE_SERIAL, QOS_CLASS_UTILITY, DISPATCH_QUEUE_PRIORITY_DEFAULT); - self.monitorQueue = dispatch_queue_create("com.google.perf.network.monitor", attrs); + weakSelf.monitorQueue = + dispatch_queue_create("com.google.firebase.perf.network.monitor", attrs); - self.monitor = nw_path_monitor_create(); - nw_path_monitor_set_queue(self.monitor, self.monitorQueue); - nw_path_monitor_set_update_handler(self.monitor, ^(nw_path_t _Nonnull path) { + weakSelf.monitor = nw_path_monitor_create(); + nw_path_monitor_set_queue(weakSelf.monitor, weakSelf.monitorQueue); + nw_path_monitor_set_update_handler(weakSelf.monitor, ^(nw_path_t _Nonnull path) { BOOL isWiFi = nw_path_uses_interface_type(path, nw_interface_type_wifi); BOOL isCellular = nw_path_uses_interface_type(path, nw_interface_type_cellular); BOOL isEthernet = nw_path_uses_interface_type(path, nw_interface_type_wired); if (isWiFi) { - self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_WIFI; + weakSelf.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_WIFI; } else if (isCellular) { - self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_MOBILE; + weakSelf.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_MOBILE; } else if (isEthernet) { - self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_ETHERNET; + weakSelf.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_ETHERNET; } }); From ef8472b5246957b8db5aa8bd50707065d9efb516 Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Fri, 7 Jun 2024 09:00:33 -0700 Subject: [PATCH 12/13] Update the OS check to make it more easier to parse. --- .../Sources/AppActivity/FPRAppActivityTracker.m | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m index 7c03395ab77..85559b8c508 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m @@ -164,11 +164,7 @@ - (void)startTrackingNetwork { self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_NONE; __weak FPRAppActivityTracker *weakSelf = self; -#if TARGET_OS_IOS - if (@available(iOS 12, *)) { -#elif TARGET_OS_TV - if (@available(tvOS 12, *)) { -#endif + if (@available(iOS 12, tvOS 12, *)) { dispatch_queue_attr_t attrs = dispatch_queue_attr_make_with_qos_class( DISPATCH_QUEUE_SERIAL, QOS_CLASS_UTILITY, DISPATCH_QUEUE_PRIORITY_DEFAULT); weakSelf.monitorQueue = @@ -333,11 +329,7 @@ - (void)appWillResignActiveNotification:(NSNotification *)notification { } - (void)dealloc { -#if TARGET_OS_IOS - if (@available(iOS 12, *)) { -#elif TARGET_OS_TV - if (@available(tvOS 12, *)) { -#endif + if (@available(iOS 12, tvOS 12, *)) { nw_path_monitor_cancel(self.monitor); } From b390692691a65823d61bb95e7582fbfd25f8acd0 Mon Sep 17 00:00:00 2001 From: Viswanathan Munisamy Date: Fri, 7 Jun 2024 10:02:48 -0700 Subject: [PATCH 13/13] Cleanup comments. --- .../Sources/AppActivity/FPRAppActivityTracker.m | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m index 85559b8c508..f99d77c2162 100644 --- a/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m +++ b/FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m @@ -163,16 +163,15 @@ - (FIRTrace *)activeTrace { - (void)startTrackingNetwork { self.networkType = firebase_perf_v1_NetworkConnectionInfo_NetworkType_NONE; - __weak FPRAppActivityTracker *weakSelf = self; if (@available(iOS 12, tvOS 12, *)) { dispatch_queue_attr_t attrs = dispatch_queue_attr_make_with_qos_class( DISPATCH_QUEUE_SERIAL, QOS_CLASS_UTILITY, DISPATCH_QUEUE_PRIORITY_DEFAULT); - weakSelf.monitorQueue = - dispatch_queue_create("com.google.firebase.perf.network.monitor", attrs); + self.monitorQueue = dispatch_queue_create("com.google.firebase.perf.network.monitor", attrs); - weakSelf.monitor = nw_path_monitor_create(); - nw_path_monitor_set_queue(weakSelf.monitor, weakSelf.monitorQueue); - nw_path_monitor_set_update_handler(weakSelf.monitor, ^(nw_path_t _Nonnull path) { + self.monitor = nw_path_monitor_create(); + nw_path_monitor_set_queue(self.monitor, self.monitorQueue); + __weak FPRAppActivityTracker *weakSelf = self; + nw_path_monitor_set_update_handler(self.monitor, ^(nw_path_t _Nonnull path) { BOOL isWiFi = nw_path_uses_interface_type(path, nw_interface_type_wifi); BOOL isCellular = nw_path_uses_interface_type(path, nw_interface_type_cellular); BOOL isEthernet = nw_path_uses_interface_type(path, nw_interface_type_wired);