diff --git a/FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m b/FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m index 840937c1be5..e80a4f29f48 100644 --- a/FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m +++ b/FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m @@ -175,8 +175,9 @@ - (BOOL)followURLWithContinueUserActivity:(NSURL *)url { FIRLogDebug(kFIRLoggerInAppMessaging, @"I-IAM240004", @"App delegate responds to application:continueUserActivity:restorationHandler:." "Simulating action url opening from a web browser."); - NSUserActivity *userActivity = - [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb]; + // Use string literal to ensure compatibility with Xcode 26 and iOS 18 + NSString *browsingWebType = @"NSUserActivityTypeBrowsingWeb"; + NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:browsingWebType]; userActivity.webpageURL = url; BOOL handled = [self.appDelegate application:self.mainApplication continueUserActivity:userActivity diff --git a/FirebaseInAppMessaging/Tests/Unit/FIRIAMActionUrlFollowerTests.m b/FirebaseInAppMessaging/Tests/Unit/FIRIAMActionUrlFollowerTests.m index 9a0b56e26e5..6fe8e363402 100644 --- a/FirebaseInAppMessaging/Tests/Unit/FIRIAMActionUrlFollowerTests.m +++ b/FirebaseInAppMessaging/Tests/Unit/FIRIAMActionUrlFollowerTests.m @@ -84,8 +84,9 @@ - (void)testUniversalLinkHandlingReturnYES { continueUserActivity:[OCMArg checkWithBlock:^BOOL(id userActivity) { // verifying the type and url field for the userActivity object NSUserActivity *activity = (NSUserActivity *)userActivity; - return [activity.activityType - isEqualToString:NSUserActivityTypeBrowsingWeb] && + // Use string literal to ensure compatibility with Xcode 26 and iOS 18 + NSString *browsingWebType = @"NSUserActivityTypeBrowsingWeb"; + return [activity.activityType isEqualToString:browsingWebType] && [activity.webpageURL isEqual:url]; }] restorationHandler:[OCMArg any]]) diff --git a/FirebaseMessaging/CHANGELOG.md b/FirebaseMessaging/CHANGELOG.md index 00b746df27a..f2756c5ce0a 100644 --- a/FirebaseMessaging/CHANGELOG.md +++ b/FirebaseMessaging/CHANGELOG.md @@ -1,3 +1,8 @@ +# 12.1.0 +- [fixed] Fix Xcode 26 crash from missing `NSUserActivityTypeBrowsingWeb` + symbol. Note that this fix isn't in the 12.1.0 zip and Carthage + distributions, but will be included from 12.2.0 onwards. (#15159) + # 11.14.0 - [fixed] Fix a potential SQL injection issue. (#14846). diff --git a/FirebaseMessaging/Sources/FIRMessaging.m b/FirebaseMessaging/Sources/FIRMessaging.m index e2bb09b098c..3eb83e94e5f 100644 --- a/FirebaseMessaging/Sources/FIRMessaging.m +++ b/FirebaseMessaging/Sources/FIRMessaging.m @@ -400,8 +400,9 @@ - (void)handleIncomingLinkIfNeededFromMessage:(NSDictionary *)message { // if they haven't implemented it. if ([NSUserActivity class] != nil && [appDelegate respondsToSelector:continueUserActivitySelector]) { - NSUserActivity *userActivity = - [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb]; + // Use string literal to ensure compatibility with Xcode 26 and iOS 18 + NSString *browsingWebType = @"NSUserActivityTypeBrowsingWeb"; + NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:browsingWebType]; userActivity.webpageURL = url; [appDelegate application:application continueUserActivity:userActivity