From 2919357f0b5079eae7a8ac7d9562d964a0b44dd7 Mon Sep 17 00:00:00 2001 From: Matthew Leibowitz Date: Sat, 26 Dec 2020 21:38:14 +0200 Subject: [PATCH] Use manual selectors for new APIs (#1606) This will allow the code to build in older VS versions Fixes #1589 --- .../LocationExtensions.ios.tvos.watchos.macos.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Xamarin.Essentials/Types/LocationExtensions.ios.tvos.watchos.macos.cs b/Xamarin.Essentials/Types/LocationExtensions.ios.tvos.watchos.macos.cs index 80355b6df..9d1c7082e 100644 --- a/Xamarin.Essentials/Types/LocationExtensions.ios.tvos.watchos.macos.cs +++ b/Xamarin.Essentials/Types/LocationExtensions.ios.tvos.watchos.macos.cs @@ -8,6 +8,9 @@ namespace Xamarin.Essentials { public static partial class LocationExtensions { + [System.Runtime.InteropServices.DllImport(ObjCRuntime.Constants.ObjectiveCLibrary, EntryPoint = "objc_msgSend")] + public static extern CLAuthorizationStatus CLAuthorizationStatus_objc_msgSend(IntPtr receiver, IntPtr selector); + internal static Location ToLocation(this CLPlacemark placemark) => new Location { @@ -52,15 +55,19 @@ internal static DateTimeOffset ToDateTime(this NSDate timestamp) internal static CLAuthorizationStatus GetAuthorizationStatus(this CLLocationManager locationManager) { -#if !__MACOS__ // this is coming in macOS 11 -#if __WATCHOS__ +#if __MACOS__ + if (DeviceInfo.Version >= new Version(11, 0)) +#elif __WATCHOS__ if (Platform.HasOSVersion(7, 0)) #else if (Platform.HasOSVersion(14, 0)) #endif - return locationManager.AuthorizationStatus; + { + // return locationManager.AuthorizationStatus; -#endif + var sel = ObjCRuntime.Selector.GetHandle("authorizationStatus"); + return CLAuthorizationStatus_objc_msgSend(locationManager.Handle, sel); + } return CLLocationManager.Status; }