diff --git a/DeviceTests/build.cake b/DeviceTests/build.cake
index 53fbac817..40a4c0cc5 100644
--- a/DeviceTests/build.cake
+++ b/DeviceTests/build.cake
@@ -6,7 +6,7 @@
var TARGET = Argument("target", "Default");
var IOS_SIM_NAME = Argument("ios-device", EnvironmentVariable("IOS_SIM_NAME") ?? "iPhone 11");
-var IOS_SIM_RUNTIME = Argument("ios-runtime", EnvironmentVariable("IOS_SIM_RUNTIME") ?? "com.apple.CoreSimulator.SimRuntime.iOS-13-6");
+var IOS_SIM_RUNTIME = Argument("ios-runtime", EnvironmentVariable("IOS_SIM_RUNTIME") ?? "com.apple.CoreSimulator.SimRuntime.iOS-13-7");
var IOS_PROJ = "./DeviceTests.iOS/DeviceTests.iOS.csproj";
var IOS_BUNDLE_ID = "com.xamarin.essentials.devicetests";
var IOS_IPA_PATH = "./DeviceTests.iOS/bin/iPhoneSimulator/Release/XamarinEssentialsDeviceTestsiOS.app";
diff --git a/Samples/Samples.iOS/Info.plist b/Samples/Samples.iOS/Info.plist
index c71e3c0ca..06926b44c 100644
--- a/Samples/Samples.iOS/Info.plist
+++ b/Samples/Samples.iOS/Info.plist
@@ -88,5 +88,7 @@
Pick Photos
NSMicrophoneUsageDescription
Catpure Video
+ NSContactsUsageDescription
+ Contacts
diff --git a/Samples/Samples/View/ContactsPage.xaml b/Samples/Samples/View/ContactsPage.xaml
index 24b7fe40b..c4e621529 100644
--- a/Samples/Samples/View/ContactsPage.xaml
+++ b/Samples/Samples/View/ContactsPage.xaml
@@ -1,83 +1,37 @@
-
-
+
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
+
+
-
+
+
-
+
+
-
+
-
+
-
+
-
+
+
+
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Samples/Samples/View/ContactsPage.xaml.cs b/Samples/Samples/View/ContactsPage.xaml.cs
index d40a177a0..51c6ca2be 100644
--- a/Samples/Samples/View/ContactsPage.xaml.cs
+++ b/Samples/Samples/View/ContactsPage.xaml.cs
@@ -1,13 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-using Xamarin.Forms;
-using Xamarin.Forms.Xaml;
-
-namespace Samples.View
+namespace Samples.View
{
public partial class ContactsPage
{
diff --git a/Xamarin.Essentials/Contacts/Contacts.ios.cs b/Xamarin.Essentials/Contacts/Contacts.ios.cs
index 9238e45ab..5dfeca196 100644
--- a/Xamarin.Essentials/Contacts/Contacts.ios.cs
+++ b/Xamarin.Essentials/Contacts/Contacts.ios.cs
@@ -1,8 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics;
-using System.Text;
-using System.Threading;
using System.Threading.Tasks;
using Contacts;
using ContactsUI;
@@ -73,33 +70,33 @@ internal static Contact GetContact(CNContact contact)
CNContactType.Organization => ContactType.Work,
_ => ContactType.Unknown,
};
- }
-
- public class ContactPickerDelegate : CNContactPickerDelegate
- {
- public ContactPickerDelegate(Action didSelectContactHandler) =>
- DidSelectContactHandler = didSelectContactHandler;
- public ContactPickerDelegate(IntPtr handle)
- : base(handle)
+ class ContactPickerDelegate : CNContactPickerDelegate
{
- }
+ public ContactPickerDelegate(Action didSelectContactHandler) =>
+ DidSelectContactHandler = didSelectContactHandler;
- public Action DidSelectContactHandler { get; }
+ public ContactPickerDelegate(IntPtr handle)
+ : base(handle)
+ {
+ }
- public override void ContactPickerDidCancel(CNContactPickerViewController picker)
- {
- DidSelectContactHandler?.Invoke(default);
- picker.DismissModalViewController(true);
- }
+ public Action DidSelectContactHandler { get; }
- public override void DidSelectContact(CNContactPickerViewController picker, CNContact contact)
- {
- DidSelectContactHandler?.Invoke(contact);
- picker.DismissModalViewController(true);
- }
+ public override void ContactPickerDidCancel(CNContactPickerViewController picker)
+ {
+ DidSelectContactHandler?.Invoke(default);
+ picker.DismissModalViewController(true);
+ }
- public override void DidSelectContactProperty(CNContactPickerViewController picker, CNContactProperty contactProperty) =>
- picker.DismissModalViewController(true);
+ public override void DidSelectContact(CNContactPickerViewController picker, CNContact contact)
+ {
+ DidSelectContactHandler?.Invoke(contact);
+ picker.DismissModalViewController(true);
+ }
+
+ public override void DidSelectContactProperty(CNContactPickerViewController picker, CNContactProperty contactProperty) =>
+ picker.DismissModalViewController(true);
+ }
}
}
diff --git a/Xamarin.Essentials/Launcher/Launcher.ios.tvos.cs b/Xamarin.Essentials/Launcher/Launcher.ios.tvos.cs
index 0abd4b8d2..5f81bde71 100644
--- a/Xamarin.Essentials/Launcher/Launcher.ios.tvos.cs
+++ b/Xamarin.Essentials/Launcher/Launcher.ios.tvos.cs
@@ -44,11 +44,21 @@ internal static NSUrl GetNativeUrl(Uri uri)
}
#if __IOS__
+ static UIDocumentInteractionController documentController;
+
static Task PlatformOpenAsync(OpenFileRequest request)
{
var fileUrl = NSUrl.FromFilename(request.File.FullPath);
- var documentController = UIDocumentInteractionController.FromUrl(fileUrl);
+ documentController = UIDocumentInteractionController.FromUrl(fileUrl);
+ documentController.Delegate = new DocumentControllerDelegate
+ {
+ DismissHandler = () =>
+ {
+ documentController?.Dispose();
+ documentController = null;
+ }
+ };
documentController.Uti = request.File.ContentType;
var vc = Platform.GetCurrentViewController();
@@ -67,6 +77,14 @@ static Task PlatformOpenAsync(OpenFileRequest request)
return Task.CompletedTask;
}
+
+ class DocumentControllerDelegate : UIDocumentInteractionControllerDelegate
+ {
+ public Action DismissHandler { get; set; }
+
+ public override void DidDismissOpenInMenu(UIDocumentInteractionController controller)
+ => DismissHandler?.Invoke();
+ }
#else
static Task PlatformOpenAsync(OpenFileRequest request) =>
throw new FeatureNotSupportedException();
diff --git a/Xamarin.Essentials/Permissions/Permissions.ios.cs b/Xamarin.Essentials/Permissions/Permissions.ios.cs
index fc07dd12d..232ba3325 100644
--- a/Xamarin.Essentials/Permissions/Permissions.ios.cs
+++ b/Xamarin.Essentials/Permissions/Permissions.ios.cs
@@ -103,14 +103,21 @@ internal static PermissionStatus GetAddressBookPermissionStatus()
};
}
+ static ABAddressBook addressBook;
+
internal static Task RequestAddressBookPermission()
{
- var addressBook = new ABAddressBook();
+ addressBook = new ABAddressBook();
var tcs = new TaskCompletionSource();
addressBook.RequestAccess((success, error) =>
- tcs.TrySetResult(success ? PermissionStatus.Granted : PermissionStatus.Denied));
+ {
+ tcs.TrySetResult(success ? PermissionStatus.Granted : PermissionStatus.Denied);
+
+ addressBook?.Dispose();
+ addressBook = null;
+ });
return tcs.Task;
}
diff --git a/docs/en/Xamarin.Essentials/Browser.xml b/docs/en/Xamarin.Essentials/Browser.xml
index 1dcd05b7b..28379e196 100644
--- a/docs/en/Xamarin.Essentials/Browser.xml
+++ b/docs/en/Xamarin.Essentials/Browser.xml
@@ -117,30 +117,6 @@
-
-
-
-
- Method
-
- Xamarin.Essentials
- 1.0.0.0
-
-
- System.Threading.Tasks.Task
-
-
-
-
-
-
- To be added.
- To be added.
- To be added.
- To be added.
- To be added.
-
-
diff --git a/docs/en/Xamarin.Essentials/FileResult.xml b/docs/en/Xamarin.Essentials/FileResult.xml
index 7ce8e997d..da2d5b1ba 100644
--- a/docs/en/Xamarin.Essentials/FileResult.xml
+++ b/docs/en/Xamarin.Essentials/FileResult.xml
@@ -15,21 +15,6 @@
-
-
-
-
- Constructor
-
- Xamarin.Essentials
- 1.0.0.0
-
-
-
-
-
-
-
diff --git a/docs/en/Xamarin.Essentials/Screenshot.xml b/docs/en/Xamarin.Essentials/Screenshot.xml
index d673da4ba..df8edd642 100644
--- a/docs/en/Xamarin.Essentials/Screenshot.xml
+++ b/docs/en/Xamarin.Essentials/Screenshot.xml
@@ -15,25 +15,6 @@
Output is always a PNG file.
-
-
-
-
- Method
-
- Xamarin.Essentials
- 1.0.0.0
-
-
- System.Threading.Tasks.Task<Xamarin.Essentials.FileResult>
-
-
-
- To be added.
- To be added.
- To be added.
-
-
@@ -53,25 +34,6 @@
Be sure to copy the resulting file to a file you control.
-
-
-
-
- Method
-
- Xamarin.Essentials
- 1.0.0.0
-
-
- System.Threading.Tasks.Task<Xamarin.Essentials.ScreenshotResult>
-
-
-
- To be added.
- To be added.
- To be added.
-
-