From 7eb1bd78461e16c42932c6a71a63ef5e8b11006b Mon Sep 17 00:00:00 2001 From: subdiox Date: Fri, 1 Aug 2025 05:25:17 +0900 Subject: [PATCH 1/4] [FirebaseMessaging] Fix crash on Xcode 26 + iOS 18 (#15164) --- .../Sources/Runtime/FIRIAMActionURLFollower.m | 4 +++- .../Tests/Unit/FIRIAMActionUrlFollowerTests.m | 4 +++- FirebaseMessaging/Sources/FIRMessaging.m | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m b/FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m index 840937c1be5..9c6013510f3 100644 --- a/FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m +++ b/FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m @@ -175,8 +175,10 @@ - (BOOL)followURLWithContinueUserActivity:(NSURL *)url { FIRLogDebug(kFIRLoggerInAppMessaging, @"I-IAM240004", @"App delegate responds to application:continueUserActivity:restorationHandler:." "Simulating action url opening from a web browser."); + // Use string literal to ensure compatibility with Xcode 26 and iOS 18 + NSString *browsingWebType = @"NSUserActivityTypeBrowsingWeb"; NSUserActivity *userActivity = - [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb]; + [[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..3bfa6f5fb9b 100644 --- a/FirebaseInAppMessaging/Tests/Unit/FIRIAMActionUrlFollowerTests.m +++ b/FirebaseInAppMessaging/Tests/Unit/FIRIAMActionUrlFollowerTests.m @@ -84,8 +84,10 @@ - (void)testUniversalLinkHandlingReturnYES { continueUserActivity:[OCMArg checkWithBlock:^BOOL(id userActivity) { // verifying the type and url field for the userActivity object NSUserActivity *activity = (NSUserActivity *)userActivity; + // Use string literal to ensure compatibility with Xcode 26 and iOS 18 + NSString *browsingWebType = @"NSUserActivityTypeBrowsingWeb"; return [activity.activityType - isEqualToString:NSUserActivityTypeBrowsingWeb] && + isEqualToString:browsingWebType] && [activity.webpageURL isEqual:url]; }] restorationHandler:[OCMArg any]]) diff --git a/FirebaseMessaging/Sources/FIRMessaging.m b/FirebaseMessaging/Sources/FIRMessaging.m index e2bb09b098c..992509cf0b6 100644 --- a/FirebaseMessaging/Sources/FIRMessaging.m +++ b/FirebaseMessaging/Sources/FIRMessaging.m @@ -400,8 +400,10 @@ - (void)handleIncomingLinkIfNeededFromMessage:(NSDictionary *)message { // if they haven't implemented it. if ([NSUserActivity class] != nil && [appDelegate respondsToSelector:continueUserActivitySelector]) { + // Use string literal to ensure compatibility with Xcode 26 and iOS 18 + NSString *browsingWebType = @"NSUserActivityTypeBrowsingWeb"; NSUserActivity *userActivity = - [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb]; + [[NSUserActivity alloc] initWithActivityType:browsingWebType]; userActivity.webpageURL = url; [appDelegate application:application continueUserActivity:userActivity From 52957ce553b711cebb79a82c92c5205cb2602ec7 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:26:54 -0400 Subject: [PATCH 2/4] changelog --- FirebaseMessaging/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/FirebaseMessaging/CHANGELOG.md b/FirebaseMessaging/CHANGELOG.md index 00b746df27a..1019d13a83c 100644 --- a/FirebaseMessaging/CHANGELOG.md +++ b/FirebaseMessaging/CHANGELOG.md @@ -1,3 +1,7 @@ +# 12.1.0 +- [fixed] Fix Xcode 26 crash from missing `NSUserActivityTypeBrowsingWeb` + symbol. The fix will apply to the Firebase.zip in the next release. (#15159) + # 11.14.0 - [fixed] Fix a potential SQL injection issue. (#14846). From 044a2440b6cce7dd4438a43ec42a2dcc3c5f7844 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Thu, 31 Jul 2025 16:30:21 -0400 Subject: [PATCH 3/4] style --- .../Sources/Runtime/FIRIAMActionURLFollower.m | 3 +-- .../Tests/Unit/FIRIAMActionUrlFollowerTests.m | 3 +-- FirebaseMessaging/Sources/FIRMessaging.m | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m b/FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m index 9c6013510f3..e80a4f29f48 100644 --- a/FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m +++ b/FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m @@ -177,8 +177,7 @@ - (BOOL)followURLWithContinueUserActivity:(NSURL *)url { "Simulating action url opening from a web browser."); // Use string literal to ensure compatibility with Xcode 26 and iOS 18 NSString *browsingWebType = @"NSUserActivityTypeBrowsingWeb"; - NSUserActivity *userActivity = - [[NSUserActivity alloc] initWithActivityType:browsingWebType]; + 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 3bfa6f5fb9b..6fe8e363402 100644 --- a/FirebaseInAppMessaging/Tests/Unit/FIRIAMActionUrlFollowerTests.m +++ b/FirebaseInAppMessaging/Tests/Unit/FIRIAMActionUrlFollowerTests.m @@ -86,8 +86,7 @@ - (void)testUniversalLinkHandlingReturnYES { NSUserActivity *activity = (NSUserActivity *)userActivity; // Use string literal to ensure compatibility with Xcode 26 and iOS 18 NSString *browsingWebType = @"NSUserActivityTypeBrowsingWeb"; - return [activity.activityType - isEqualToString:browsingWebType] && + return [activity.activityType isEqualToString:browsingWebType] && [activity.webpageURL isEqual:url]; }] restorationHandler:[OCMArg any]]) diff --git a/FirebaseMessaging/Sources/FIRMessaging.m b/FirebaseMessaging/Sources/FIRMessaging.m index 992509cf0b6..3eb83e94e5f 100644 --- a/FirebaseMessaging/Sources/FIRMessaging.m +++ b/FirebaseMessaging/Sources/FIRMessaging.m @@ -402,8 +402,7 @@ - (void)handleIncomingLinkIfNeededFromMessage:(NSDictionary *)message { [appDelegate respondsToSelector:continueUserActivitySelector]) { // Use string literal to ensure compatibility with Xcode 26 and iOS 18 NSString *browsingWebType = @"NSUserActivityTypeBrowsingWeb"; - NSUserActivity *userActivity = - [[NSUserActivity alloc] initWithActivityType:browsingWebType]; + NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:browsingWebType]; userActivity.webpageURL = url; [appDelegate application:application continueUserActivity:userActivity From d43fab99d78b06d5a8ea5fa310f8bc97edf37809 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:43:36 -0400 Subject: [PATCH 4/4] Update CHANGELOG.md --- FirebaseMessaging/CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/FirebaseMessaging/CHANGELOG.md b/FirebaseMessaging/CHANGELOG.md index 1019d13a83c..f2756c5ce0a 100644 --- a/FirebaseMessaging/CHANGELOG.md +++ b/FirebaseMessaging/CHANGELOG.md @@ -1,6 +1,7 @@ # 12.1.0 - [fixed] Fix Xcode 26 crash from missing `NSUserActivityTypeBrowsingWeb` - symbol. The fix will apply to the Firebase.zip in the next release. (#15159) + 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).