Contact Store | Getting Started
A cross-platform .NET MAUI library for accessing device contacts on Android and iOS. Provides full CRUD operations, LINQ query support, MAUI permission classes, and dependency injection integration.
Features
Section titled “Features”- Full CRUD — create, read, update, and delete device contacts
- LINQ queries —
IQueryable<Contact>with native translation on both platforms - MAUI permissions —
ContactPermissionclass for requesting read/write access - Permission extensions —
RequestPermissionsAsync()andCheckPermissionStatusAsync()onIContactStore - AOT compatible — trimmer and AOT safe
- Dependency injection — register with a single
AddContactStore()call
Platforms
Section titled “Platforms”| Platform | Minimum Version |
|---|---|
| Android | API 24 |
| iOS | 15.0 |
-
Install the NuGet package
Terminal window dotnet add package Shiny.Maui.ContactStore -
Register in
MauiProgram.csusing Shiny.Maui.ContactStore;public static class MauiProgram{public static MauiApp CreateMauiApp(){var builder = MauiApp.CreateBuilder();builder.UseMauiApp<App>().ConfigureFonts(fonts =>{fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");});builder.Services.AddContactStore();return builder.Build();}} -
Add platform permissions
Android —
AndroidManifest.xml:<uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" />iOS —
Info.plist:<key>NSContactsUsageDescription</key><string>This app needs access to your contacts.</string> -
Inject
IContactStoreand request permissionsusing Shiny.Maui.ContactStore;public class MyViewModel(IContactStore contactStore){public async Task LoadContacts(){var status = await contactStore.RequestPermissionsAsync();if (status != PermissionStatus.Granted)return;var contacts = await contactStore.GetAll();}}
Quick Example
Section titled “Quick Example”// Request permissionsvar status = await contactStore.RequestPermissionsAsync();
// Get all contactsvar contacts = await contactStore.GetAll();
// Query with LINQvar results = contactStore.Query() .Where(c => c.GivenName.Contains("John")) .ToList();
// Create a contactvar contact = new Contact { GivenName = "John", FamilyName = "Doe" };contact.Phones.Add(new ContactPhone("555-1234", PhoneType.Mobile));string id = await contactStore.Create(contact);
// Updatecontact.GivenName = "Jane";await contactStore.Update(contact);
// Deleteawait contactStore.Delete(id);AI Coding Assistant
Section titled “AI Coding Assistant”An AI skill is available for Shiny.Maui.ContactStore to help generate code for device contact access directly in your IDE.
Claude Code
claude plugin add github:shinyorg/skillsGitHub Copilot — Copy the shiny-contactstore skill file into your repository’s custom instructions.
Next Steps
Section titled “Next Steps”- Permissions — MAUI permission classes and status handling
- Querying — LINQ queries with native translation
- Release Notes — Version history