Skip to content

Permissions

The library provides a ContactPermission class that subclasses Permissions.BasePlatformPermission and wraps both read and write contact permissions into a single request.

The easiest way to work with permissions is through the extension methods on IContactStore:

// Request permissions (triggers OS prompt if needed)
var status = await contactStore.RequestPermissionsAsync();
// Check current status without prompting
var status = await contactStore.CheckPermissionStatusAsync();

You can also use the permission class directly with MAUI’s Permissions API:

var status = await Permissions.RequestAsync<ContactPermission>();
var check = await Permissions.CheckStatusAsync<ContactPermission>();

On Android, ContactPermission requests both READ_CONTACTS and WRITE_CONTACTS permissions. The result reflects the combined state:

StatusMeaning
GrantedBoth read and write access granted
LimitedOnly read or only write granted (not both)
DeniedNeither read nor write granted

On iOS, contacts access is all-or-nothing:

StatusMeaning
GrantedContacts access authorized
DeniedContacts access denied
RestrictedContacts access restricted (e.g. parental controls)
public class ContactListViewModel(IContactStore contactStore, IDialogs dialogs)
{
public async Task LoadContacts()
{
var status = await contactStore.RequestPermissionsAsync();
if (status != PermissionStatus.Granted)
{
await dialogs.Alert("Permission Required", "Contact access is needed to continue.");
return;
}
var contacts = await contactStore.GetAll();
// display contacts...
}
}

Reading and writing the Note and Relationships properties on iOS requires the com.apple.developer.contacts.notes entitlement. The library automatically detects whether this entitlement is present at runtime.

  • If absent: Note returns null and Relationships is empty — no errors
  • If present: full read/write access to notes and relations

To enable, add to Entitlements.plist:

<key>com.apple.developer.contacts.notes</key>
<true/>