Client v5: BLE, BLE Hosting, HTTP, Jobs - Linux, MacOS, & Blazor Support! Full AOT, RX on BLE only & MANY other features! Power up!
Permissions
Shiny.Calendar uses Shiny.Core’s AccessState permission model — the same model used across every Shiny module. ICalendarStore exposes two members for working with calendar access:
// Request access (triggers the OS prompt if needed). Pass the level you need.var access = await calendarStore.RequestAccess(CalendarAccessType.ReadWrite);
// Check the current state without promptingvar current = calendarStore.GetCurrentAccess();CalendarAccessType
Section titled “CalendarAccessType”| Value | Meaning |
|---|---|
ReadOnly | Read calendars and events. |
WriteOnly | iOS 17+ add-only access — create events without seeing existing ones. Other platforms treat this as read/write. |
ReadWrite | Full access (default). |
AccessState results
Section titled “AccessState results”| State | Meaning |
|---|---|
AccessState.Available | Access granted. |
AccessState.Restricted | Partial — iOS write-only, or Android read-only / write-only. |
AccessState.Denied | Denied. |
AccessState.Unknown | Not yet determined. Also the Windows GetCurrentAccess() result — call RequestAccess. |
Platform Manifest Keys
Section titled “Platform Manifest Keys”Android — AndroidManifest.xml
Section titled “Android — AndroidManifest.xml”<uses-permission android:name="android.permission.READ_CALENDAR" /><uses-permission android:name="android.permission.WRITE_CALENDAR" />iOS 17+ / Mac Catalyst / macOS — Info.plist
Section titled “iOS 17+ / Mac Catalyst / macOS — Info.plist”<key>NSCalendarsFullAccessUsageDescription</key><string>This app needs access to your calendar.</string>
<!-- Only if you request write-only (add-only) access: --><key>NSCalendarsWriteOnlyAccessUsageDescription</key><string>This app needs to add events to your calendar.</string>On iOS < 17 use the legacy NSCalendarsUsageDescription key.
Mac Catalyst / sandboxed macOS — entitlement
Section titled “Mac Catalyst / sandboxed macOS — entitlement”The Info.plist keys alone are not enough under the App Sandbox — and Mac Catalyst turns the
sandbox on by default. Without the calendar entitlement, RequestAccess returns Denied and the
system prompt never appears, which looks exactly like a missing platform implementation:
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'"> <CustomEntitlements Include="com.apple.security.personal-information.calendars" Type="Boolean" Value="true" /></ItemGroup>Windows — Package.appxmanifest
Section titled “Windows — Package.appxmanifest”<uap:Capability Name="appointments" />Pattern
Section titled “Pattern”var access = await calendarStore.RequestAccess(CalendarAccessType.ReadWrite);if (access != AccessState.Available){ // handle denied / restricted before any CRUD return;}