diff --git a/NuGet.config b/NuGet.config
index 8d1e18b667ef..43b6c8313d71 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -6,14 +6,10 @@
-
-
-
-
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index b65fb483b466..82ecbb99c770 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -12,21 +12,21 @@
https://github.com/xamarin/xamarin-android
04623cdc317c3da5efce46cb16d94befe4833125
-
+
https://github.com/xamarin/xamarin-macios
- 4bd34d034c8c5a4e092c8bd3c8868153d94277b4
+ ad955c0d4f7c1e680fddae23707c94faf3cb2802
-
+
https://github.com/xamarin/xamarin-macios
- 4bd34d034c8c5a4e092c8bd3c8868153d94277b4
+ d84d07446e1163cb15012e3a6d181599a1054192
-
+
https://github.com/xamarin/xamarin-macios
- 4bd34d034c8c5a4e092c8bd3c8868153d94277b4
+ d84d07446e1163cb15012e3a6d181599a1054192
-
+
https://github.com/xamarin/xamarin-macios
- 4bd34d034c8c5a4e092c8bd3c8868153d94277b4
+ ad955c0d4f7c1e680fddae23707c94faf3cb2802
https://github.com/dotnet/emsdk
diff --git a/eng/Versions.props b/eng/Versions.props
index e1784c7c9b7a..ce4b0d78f6fb 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -11,10 +11,10 @@
32.0.468
- 15.4.454
- 15.4.454
- 12.3.454
- 15.4.454
+ 16.0.514
+ 15.4.465
+ 12.3.465
+ 16.0.514
7.0.400-preview.1.0
diff --git a/eng/pipelines/common/variables.yml b/eng/pipelines/common/variables.yml
index dbba305b3b15..a7bceb223817 100644
--- a/eng/pipelines/common/variables.yml
+++ b/eng/pipelines/common/variables.yml
@@ -7,6 +7,10 @@ variables:
value: true
- name: DOTNET_VERSION
value: 5.0.201
+- name: REQUIRED_XCODE
+ value: 14.0.0
+- name: DEVICETESTS_REQUIRED_XCODE
+ value: 14.0.0
- name: LocBranchPrefix
value: 'loc-hb'
- name: isMainBranch
diff --git a/src/BlazorWebView/src/Maui/iOS/BlazorWebViewHandler.iOS.cs b/src/BlazorWebView/src/Maui/iOS/BlazorWebViewHandler.iOS.cs
index ef46a3cdb405..9e367d0deccd 100644
--- a/src/BlazorWebView/src/Maui/iOS/BlazorWebViewHandler.iOS.cs
+++ b/src/BlazorWebView/src/Maui/iOS/BlazorWebViewHandler.iOS.cs
@@ -207,7 +207,7 @@ public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask
}
}
- private byte[] GetResponseBytes(string url, out string contentType, out int statusCode)
+ private byte[] GetResponseBytes(string? url, out string contentType, out int statusCode)
{
var allowFallbackOnHostPage = AppOriginUri.IsBaseOfPage(url);
url = QueryStringHelper.RemovePossibleQueryString(url);
diff --git a/src/BlazorWebView/src/Maui/iOS/IOSWebViewManager.cs b/src/BlazorWebView/src/Maui/iOS/IOSWebViewManager.cs
index b28f0aa65269..193e82cfb33c 100644
--- a/src/BlazorWebView/src/Maui/iOS/IOSWebViewManager.cs
+++ b/src/BlazorWebView/src/Maui/iOS/IOSWebViewManager.cs
@@ -266,8 +266,11 @@ public override void DidReceiveServerRedirectForProvisionalNavigation(WKWebView
var uri = _currentUri;
_currentUri = null;
_currentNavigation = null;
- var request = new NSUrlRequest(uri);
- webView.LoadRequest(request);
+ if (uri is not null)
+ {
+ var request = new NSUrlRequest(new NSUrl(uri.AbsoluteUri));
+ webView.LoadRequest(request);
+ }
}
}
diff --git a/src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ListViewRenderer.cs b/src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ListViewRenderer.cs
index 5b7aa309466b..007d59034384 100644
--- a/src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ListViewRenderer.cs
+++ b/src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ListViewRenderer.cs
@@ -221,7 +221,11 @@ protected override void OnElementChanged(ElementChangedEventArgs e)
{
if (Control == null)
{
- if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11))
+ if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsMacCatalystVersionAtLeast(11)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ )
{
var parentNav = e.NewElement.FindParentOfType();
_usingLargeTitles = (parentNav != null && parentNav.OnThisPlatform().PrefersLargeTitles());
@@ -229,7 +233,11 @@ protected override void OnElementChanged(ElementChangedEventArgs e)
_tableViewController = new FormsUITableViewController(e.NewElement, _usingLargeTitles);
SetNativeControl(_tableViewController.TableView);
- if (OperatingSystem.IsIOSVersionAtLeast(15) || OperatingSystem.IsTvOSVersionAtLeast(15))
+ if (OperatingSystem.IsIOSVersionAtLeast(15) || OperatingSystem.IsMacCatalystVersionAtLeast(15)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(15)
+#endif
+ )
_tableViewController.TableView.SectionHeaderTopPadding = new nfloat(0);
_backgroundUIView = _tableViewController.TableView.BackgroundView;
diff --git a/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellFlyoutLayoutManager.cs b/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellFlyoutLayoutManager.cs
index cc05f9978014..dbe5a228db51 100644
--- a/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellFlyoutLayoutManager.cs
+++ b/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellFlyoutLayoutManager.cs
@@ -127,8 +127,14 @@ private set
else if (ContentView is IPlatformViewHandler ver && ver.PlatformView is UIScrollView uIScroll)
ScrollView = uIScroll;
- if (ScrollView != null && (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11)))
+ if (ScrollView != null && (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsMacCatalystVersionAtLeast(11)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ ))
+ {
ScrollView.ContentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.Never;
+ }
LayoutParallax();
SetHeaderContentInset();
diff --git a/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellScrollViewTracker.cs b/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellScrollViewTracker.cs
index 996a2d5e2aea..c9fe9c92bb54 100644
--- a/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellScrollViewTracker.cs
+++ b/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellScrollViewTracker.cs
@@ -68,7 +68,11 @@ public void OnLayoutSubviews()
if (!_isInShell)
return;
- if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11))
+ if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsMacCatalystVersionAtLeast(11)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ )
{
var newBounds = _scrollView.AdjustedContentInset.InsetRect(_scrollView.Bounds).ToRectangle();
newBounds.X = 0;
@@ -108,7 +112,11 @@ void UpdateContentInset(Thickness inset, double tabThickness)
{
_lastInset = inset;
_tabThickness = tabThickness;
- if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11))
+ if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsMacCatalystVersionAtLeast(11)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ )
{
if (ShellSectionController.GetItems().Count > 1 && _isInItems)
{
@@ -173,7 +181,7 @@ void UpdateVerticalBounce()
}
}
- #region IDisposable Support
+#region IDisposable Support
public void Dispose()
{
@@ -197,6 +205,6 @@ protected virtual void Dispose(bool disposing)
}
}
- #endregion IDisposable Support
+#endregion IDisposable Support
}
}
\ No newline at end of file
diff --git a/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRootRenderer.cs b/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRootRenderer.cs
index 22c8242f836b..b78ce2cd9bf0 100644
--- a/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRootRenderer.cs
+++ b/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRootRenderer.cs
@@ -74,8 +74,14 @@ public override void ViewDidLoad()
base.ViewDidLoad();
_containerArea = new UIView();
- if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11))
+ if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsMacCatalystVersionAtLeast(11)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ )
+ {
_containerArea.InsetsLayoutMarginsFromSafeArea = false;
+ }
View.AddSubview(_containerArea);
@@ -508,7 +514,12 @@ void LayoutHeader()
if (_header != null)
{
tabThickness = HeaderHeight;
- var headerTop = (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11)) ? View.SafeAreaInsets.Top : TopLayoutGuide.Length;
+ var headerTop = (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsMacCatalystVersionAtLeast(11)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ ) ? View.SafeAreaInsets.Top : TopLayoutGuide.Length;
+
CGRect frame = new CGRect(View.Bounds.X, headerTop, View.Bounds.Width, HeaderHeight);
_blurView.Frame = frame;
_header.ViewController.View.Frame = frame;
@@ -518,7 +529,11 @@ void LayoutHeader()
nfloat top;
nfloat right;
nfloat bottom;
- if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11))
+ if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsMacCatalystVersionAtLeast(11)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ )
{
left = View.SafeAreaInsets.Left;
top = View.SafeAreaInsets.Top;
diff --git a/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellTableViewController.cs b/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellTableViewController.cs
index d60d01798d87..64280281898e 100644
--- a/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellTableViewController.cs
+++ b/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellTableViewController.cs
@@ -76,8 +76,14 @@ public override void ViewDidLoad()
base.ViewDidLoad();
TableView.SeparatorStyle = UITableViewCellSeparatorStyle.None;
- if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11))
+ if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsMacCatalystVersionAtLeast(11)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ )
+ {
TableView.ContentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.Never;
+ }
TableView.Source = _source;
ShellFlyoutContentManager.ViewDidLoad();
diff --git a/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewController.cs b/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewController.cs
index 9ea7c84f3f9c..21b0ac6a01cd 100644
--- a/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewController.cs
+++ b/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewController.cs
@@ -134,7 +134,11 @@ public override void ViewDidLoad()
ItemsSource = CreateItemsViewSource();
- if (!(OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11)))
+ if (!(OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsMacCatalystVersionAtLeast(11)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ ))
{
AutomaticallyAdjustsScrollViewInsets = false;
}
diff --git a/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs b/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs
index cc173dcf9084..7998540ab947 100644
--- a/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs
+++ b/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs
@@ -44,7 +44,11 @@ protected ItemsViewLayout(ItemsLayout itemsLayout, ItemSizingStrategy itemSizing
Initialize(scrollDirection);
- if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11))
+ if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsMacCatalystVersionAtLeast(11)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ )
{
// `ContentInset` is actually the default value, but I'm leaving this here as a note to
// future maintainers; it's likely that someone will want a Platform Specific to change this behavior
@@ -563,7 +567,11 @@ public override bool ShouldInvalidateLayoutForBoundsChange(CGRect newBounds)
return base.ShouldInvalidateLayoutForBoundsChange(newBounds);
}
- if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11))
+ if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsMacCatalystVersionAtLeast(11)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ )
{
UpdateConstraints(CollectionView.AdjustedContentInset.InsetRect(newBounds).Size);
}
diff --git a/src/Controls/src/Core/Platform/GestureManager/GestureManager.iOS.cs b/src/Controls/src/Core/Platform/GestureManager/GestureManager.iOS.cs
index e76e32c59418..ff4712e50d7a 100644
--- a/src/Controls/src/Core/Platform/GestureManager/GestureManager.iOS.cs
+++ b/src/Controls/src/Core/Platform/GestureManager/GestureManager.iOS.cs
@@ -412,7 +412,11 @@ _handler.VirtualView is View v &&
{
_platformView.AccessibilityTraits |= UIAccessibilityTrait.Button;
_addedFlags |= UIAccessibilityTrait.Button;
- if (OperatingSystem.IsIOSVersionAtLeast(13) || OperatingSystem.IsTvOSVersionAtLeast(13))
+ if (OperatingSystem.IsIOSVersionAtLeast(13) || OperatingSystem.IsMacCatalystVersionAtLeast(13)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ )
{
_defaultAccessibilityRespondsToUserInteraction = _platformView.AccessibilityRespondsToUserInteraction;
_platformView.AccessibilityRespondsToUserInteraction = true;
@@ -528,7 +532,7 @@ void GestureRecognizersOnCollectionChanged(object? sender, NotifyCollectionChang
{
_platformView.AccessibilityTraits &= ~_addedFlags;
- if (OperatingSystem.IsIOSVersionAtLeast(13) || OperatingSystem.IsTvOSVersionAtLeast(13))
+ if (OperatingSystem.IsIOSVersionAtLeast(13) || OperatingSystem.IsMacCatalystVersionAtLeast(13))
{
if (_defaultAccessibilityRespondsToUserInteraction != null)
_platformView.AccessibilityRespondsToUserInteraction = _defaultAccessibilityRespondsToUserInteraction.Value;
diff --git a/src/Core/src/Handlers/ViewHandlerExtensions.iOS.cs b/src/Core/src/Handlers/ViewHandlerExtensions.iOS.cs
index 270d067021dc..12c80dd0fa82 100644
--- a/src/Core/src/Handlers/ViewHandlerExtensions.iOS.cs
+++ b/src/Core/src/Handlers/ViewHandlerExtensions.iOS.cs
@@ -23,7 +23,13 @@ internal static void LayoutVirtualView(
}
bounds = bounds ?? platformView.Bounds;
- if (virtualView is ISafeAreaView sav && !sav.IgnoreSafeArea && (System.OperatingSystem.IsIOSVersionAtLeast(11) || System.OperatingSystem.IsTvOSVersionAtLeast(11)))
+
+ if (virtualView is ISafeAreaView sav && !sav.IgnoreSafeArea
+ && (System.OperatingSystem.IsIOSVersionAtLeast(11) || System.OperatingSystem.IsMacCatalystVersionAtLeast(11)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ ))
{
bounds = platformView.SafeAreaInsets.InsetRect(bounds.Value);
}
diff --git a/src/Core/src/Handlers/WebView/WebViewHandler.iOS.cs b/src/Core/src/Handlers/WebView/WebViewHandler.iOS.cs
index d9e865526828..f6f8f27d0a2c 100644
--- a/src/Core/src/Handlers/WebView/WebViewHandler.iOS.cs
+++ b/src/Core/src/Handlers/WebView/WebViewHandler.iOS.cs
@@ -158,7 +158,7 @@ internal async Task FirstLoadUrlAsync(string url)
var safeHostUri = new Uri($"{uri.Scheme}://{uri.Authority}", UriKind.Absolute);
var safeRelativeUri = new Uri($"{uri.PathAndQuery}{uri.Fragment}", UriKind.Relative);
- NSUrlRequest request = new NSUrlRequest(new Uri(safeHostUri, safeRelativeUri));
+ var request = new NSUrlRequest(new NSUrl(new Uri(safeHostUri, safeRelativeUri).AbsoluteUri));
if (HasCookiesToLoad(url) && !(OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11)))
return;
diff --git a/src/Core/src/Platform/iOS/MauiPageControl.cs b/src/Core/src/Platform/iOS/MauiPageControl.cs
index 8ad57efe2f72..edf73aefaaf1 100644
--- a/src/Core/src/Platform/iOS/MauiPageControl.cs
+++ b/src/Core/src/Platform/iOS/MauiPageControl.cs
@@ -15,7 +15,12 @@ public class MauiPageControl : UIPageControl
public MauiPageControl()
{
ValueChanged += MauiPageControlValueChanged;
- if (OperatingSystem.IsIOSVersionAtLeast(14) || OperatingSystem.IsTvOSVersionAtLeast(14))
+
+ if (OperatingSystem.IsIOSVersionAtLeast(14) || OperatingSystem.IsMacCatalystVersionAtLeast(14)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(14)
+#endif
+ )
{
AllowsContinuousInteraction = false;
BackgroundStyle = UIPageControlBackgroundStyle.Minimal;
diff --git a/src/Core/src/Platform/iOS/MauiWKWebView.cs b/src/Core/src/Platform/iOS/MauiWKWebView.cs
index 455818148f29..deee1d19985f 100644
--- a/src/Core/src/Platform/iOS/MauiWKWebView.cs
+++ b/src/Core/src/Platform/iOS/MauiWKWebView.cs
@@ -77,7 +77,7 @@ public void LoadUrl(string? url)
var uri = new Uri(url ?? string.Empty);
var safeHostUri = new Uri($"{uri.Scheme}://{uri.Authority}", UriKind.Absolute);
var safeRelativeUri = new Uri($"{uri.PathAndQuery}{uri.Fragment}", UriKind.Relative);
- NSUrlRequest request = new NSUrlRequest(new Uri(safeHostUri, safeRelativeUri));
+ NSUrlRequest request = new NSUrlRequest(new NSUrl(new Uri(safeHostUri, safeRelativeUri).AbsoluteUri));
LoadRequest(request);
}
diff --git a/src/Essentials/samples/Sample.Server.WebAuthenticator/Essentials.Sample.Server.WebAuthenticator.csproj b/src/Essentials/samples/Sample.Server.WebAuthenticator/Essentials.Sample.Server.WebAuthenticator.csproj
index 9eae47013c1d..d69f3925f5ce 100644
--- a/src/Essentials/samples/Sample.Server.WebAuthenticator/Essentials.Sample.Server.WebAuthenticator.csproj
+++ b/src/Essentials/samples/Sample.Server.WebAuthenticator/Essentials.Sample.Server.WebAuthenticator.csproj
@@ -4,12 +4,13 @@
$(_MauiDotNetTfm)
+
-
+
diff --git a/src/Essentials/samples/Sample.Server.WebAuthenticator/Properties/launchSettings.json b/src/Essentials/samples/Sample.Server.WebAuthenticator/Properties/launchSettings.json
index 1047368dfb59..6c0ef8184858 100644
--- a/src/Essentials/samples/Sample.Server.WebAuthenticator/Properties/launchSettings.json
+++ b/src/Essentials/samples/Sample.Server.WebAuthenticator/Properties/launchSettings.json
@@ -18,10 +18,10 @@
"Sample.Server.WebAuthenticator": {
"commandName": "Project",
"launchBrowser": true,
+ "applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
- },
- "applicationUrl": "https://localhost:5001;http://localhost:5000"
+ }
}
}
}
\ No newline at end of file
diff --git a/src/Essentials/src/DeviceDisplay/DeviceDisplay.ios.cs b/src/Essentials/src/DeviceDisplay/DeviceDisplay.ios.cs
index 8288d10936c0..045224cd25ee 100644
--- a/src/Essentials/src/DeviceDisplay/DeviceDisplay.ios.cs
+++ b/src/Essentials/src/DeviceDisplay/DeviceDisplay.ios.cs
@@ -18,9 +18,16 @@ protected override DisplayInfo GetMainDisplayInfo()
var bounds = UIScreen.MainScreen.Bounds;
var scale = UIScreen.MainScreen.Scale;
- var rate = (OperatingSystem.IsIOSVersionAtLeast(10, 3) || OperatingSystem.IsTvOSVersionAtLeast(10, 3))
- ? UIScreen.MainScreen.MaximumFramesPerSecond
- : 0;
+ nint rate = 0;
+
+ if (OperatingSystem.IsIOSVersionAtLeast(10, 3) || OperatingSystem.IsMacCatalystVersionAtLeast(10, 3)
+#if TVOS
+ || OperatingSystem.IsTvOSVersionAtLeast(11)
+#endif
+ )
+ {
+ rate = UIScreen.MainScreen.MaximumFramesPerSecond;
+ }
return new DisplayInfo(
width: bounds.Width * scale,
diff --git a/src/Essentials/src/WebAuthenticator/WebAuthenticator.shared.cs b/src/Essentials/src/WebAuthenticator/WebAuthenticator.shared.cs
index eb12ee874617..b592d2e973f1 100644
--- a/src/Essentials/src/WebAuthenticator/WebAuthenticator.shared.cs
+++ b/src/Essentials/src/WebAuthenticator/WebAuthenticator.shared.cs
@@ -57,8 +57,13 @@ public static Task AuthenticateAsync(this IWebAuthentica
public static bool OpenUrl(this IWebAuthenticator webAuthenticator, Uri uri) =>
webAuthenticator.AsPlatformCallback().OpenUrlCallback(uri);
- public static bool OpenUrl(this IWebAuthenticator webAuthenticator, UIKit.UIApplication app, Foundation.NSUrl url, Foundation.NSDictionary options) =>
- webAuthenticator.OpenUrl(new Uri(url.AbsoluteString));
+ public static bool OpenUrl(this IWebAuthenticator webAuthenticator, UIKit.UIApplication app, Foundation.NSUrl url, Foundation.NSDictionary options)
+ {
+ var absUri = url?.AbsoluteString;
+ if (!string.IsNullOrEmpty(absUri))
+ return webAuthenticator.OpenUrl(new Uri(absUri));
+ return false;
+ }
public static bool ContinueUserActivity(this IWebAuthenticator webAuthenticator, UIKit.UIApplication application, Foundation.NSUserActivity userActivity, UIKit.UIApplicationRestorationHandler completionHandler)
{