diff --git a/src/Core/src/Platform/iOS/ApplicationExtensions.cs b/src/Core/src/Platform/iOS/ApplicationExtensions.cs index cdaff59c07d6..41683e290f83 100644 --- a/src/Core/src/Platform/iOS/ApplicationExtensions.cs +++ b/src/Core/src/Platform/iOS/ApplicationExtensions.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Runtime.Versioning; using Foundation; using Microsoft.Extensions.Logging; @@ -57,14 +58,23 @@ public static void CreatePlatformWindow(this IUIWindowSceneDelegate sceneDelegat dicts.Add(session.UserInfo); if (session.StateRestorationActivity?.UserInfo is not null) dicts.Add(session.StateRestorationActivity.UserInfo); - if (connectionOptions.UserActivities is not null) + try { - foreach (var u in connectionOptions.UserActivities) + using var activities = connectionOptions.UserActivities; + if (activities is not null) { - if (u is NSUserActivity userActivity && userActivity.UserInfo is not null) - dicts.Add(userActivity.UserInfo); + foreach (var u in activities) + { + if (u is NSUserActivity userActivity && userActivity.UserInfo is not null) + dicts.Add(userActivity.UserInfo); + } } } + catch (InvalidCastException) + { + // HACK: Workaround for https://github.com/xamarin/xamarin-macios/issues/13704 + // This only throws if the collection is empty. + } var window = CreatePlatformWindow(application, scene as UIWindowScene, dicts.ToArray()); if (window is not null) diff --git a/src/Essentials/src/Platform/WindowStateManager.ios.cs b/src/Essentials/src/Platform/WindowStateManager.ios.cs index b03f794ac24c..16e64f18a1bf 100644 --- a/src/Essentials/src/Platform/WindowStateManager.ios.cs +++ b/src/Essentials/src/Platform/WindowStateManager.ios.cs @@ -101,9 +101,18 @@ public void Init(Func? getCurrentUIViewController) => // if we have scene support, use that if (OperatingSystem.IsIOSVersionAtLeast(13) || OperatingSystem.IsMacCatalystVersionAtLeast(13)) { - var scenes = UIApplication.SharedApplication.ConnectedScenes; - var windowScene = scenes.ToArray().FirstOrDefault(); - return windowScene?.Windows.FirstOrDefault(); + try + { + using var scenes = UIApplication.SharedApplication.ConnectedScenes; + var windowScene = scenes.ToArray().FirstOrDefault(); + return windowScene?.Windows.FirstOrDefault(); + } + catch (InvalidCastException) + { + // HACK: Workaround for https://github.com/xamarin/xamarin-macios/issues/13704 + // This only throws if the collection is empty. + return null; + } } // use the windows property (up to 13.0) @@ -115,9 +124,18 @@ public void Init(Func? getCurrentUIViewController) => // if we have scene support, use that if (OperatingSystem.IsIOSVersionAtLeast(13) || OperatingSystem.IsMacCatalystVersionAtLeast(13)) { - var scenes = UIApplication.SharedApplication.ConnectedScenes; - var windowScene = scenes.ToArray().FirstOrDefault(); - return windowScene?.Windows; + try + { + using var scenes = UIApplication.SharedApplication.ConnectedScenes; + var windowScene = scenes.ToArray().FirstOrDefault(); + return windowScene?.Windows; + } + catch (InvalidCastException) + { + // HACK: Workaround for https://github.com/xamarin/xamarin-macios/issues/13704 + // This only throws if the collection is empty. + return null; + } } // use the windows property (up to 15.0)