Skip to content
Document DB v12 - Improved Interceptors with Soft Delete Integration, AI protections, & Admin UI with Aspire Integration!How!?

Permissions

Shiny.Contacts uses Shiny.Core’s AccessState permission model — the same model used across every Shiny module — rather than a MAUI-specific permission class. IContactStore exposes two members for working with contact access:

// Request access (triggers the OS prompt if needed)
var access = await contactStore.RequestAccess();
// Check the current state without prompting
var current = contactStore.GetCurrentAccess();

Both return a Shiny.AccessState.

State Meaning
Available All necessary contact permissions are granted
Denied The user denied contact access
Restricted Access is granted in a limited fashion (e.g. read-only or write-only), or restricted by parental controls
Disabled Contact access has been disabled by the user
NotSetup A required manifest/Info.plist entry is missing
NotSupported Contacts are not supported on the current platform
Unknown Access has not yet been checked, or is in an unknown state

On Android, contact access covers both READ_CONTACTS and WRITE_CONTACTS:

  • Available — both read and write access granted
  • Restricted — only read or only write granted (not both)
  • Denied — neither read nor write granted

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

  • Available — contacts access authorized
  • Denied — contacts access denied
  • Restricted — contacts access restricted (e.g. parental controls) or limited
  • Unknown — not yet determined
public class ContactListViewModel(IContactStore contactStore, IDialogs dialogs)
{
public async Task LoadContacts()
{
var access = await contactStore.RequestAccess();
if (access != AccessState.Available)
{
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/>