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

MSBuild Permissions

Declare permissions once in your project file and let MSBuild generate the correct Android manifest entries and iOS Info.plist entries automatically. No more editing XML files by hand.

GitHub GitHub stars for shinyorg/msbuildpermissions
Downloads NuGet downloads for Shiny.Permissions.MSBuild
Frameworks
.NET MAUI
Operating Systems
Android
iOS
  • Single declaration — add MauiPermission items and both Android + iOS entries are generated
  • 12 built-in presets — BluetoothLE, Location, LocationBackground, Geofencing, Push, Microphone, Contacts, Calendar, Camera, Photos, Maps, Biometric
  • Smart deduplication — shared Android permissions appear only once
  • iOS array merging — background modes from multiple presets consolidate automatically
  • Granular control — add platform-specific entries directly when presets aren’t enough
  • Zero config — installs via NuGet, runs automatically before Build
Terminal window
dotnet add package Shiny.Permissions.MSBuild

Add MauiPermission items to your project file:

<ItemGroup>
<MauiPermission Include="Camera" />
<MauiPermission Include="BluetoothLE" />
<MauiPermission Include="Location" />
<MauiPermission Include="Push" />
<MauiPermission Include="Biometric" />
<MauiPermission Include="Contacts" />
</ItemGroup>
Permission Android iOS
BluetoothLE BLUETOOTH, BLUETOOTH_ADMIN, BLUETOOTH_CONNECT, BLUETOOTH_SCAN, ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION UIBackgroundModes (bluetooth-central), NSBluetoothAlwaysUsageDescription
Location ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION + features UIBackgroundModes (location), NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription
LocationBackground FOREGROUND_SERVICE_LOCATION, FOREGROUND_SERVICE, ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION UIBackgroundModes (location), NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription
Geofencing ACCESS_BACKGROUND_LOCATION, ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION UIBackgroundModes (location), NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription
Push POST_NOTIFICATIONS UIBackgroundModes (remote-notification)
Microphone RECORD_AUDIO NSMicrophoneUsageDescription
Contacts READ_CONTACTS NSContactsUsageDescription
Calendar READ_CALENDAR NSCalendarsUsageDescription
Camera CAMERA NSCameraUsageDescription
Photos READ_EXTERNAL_STORAGE NSPhotoLibraryUsageDescription
Maps ACCESS_FINE_LOCATION NSLocationWhenInUseUsageDescription
Biometric USE_BIOMETRIC NSFaceIDUsageDescription

Generated files appear in $(IntermediateOutputPath):

File Description
AndroidManifest.xml Android permissions and features
Info.plist iOS Info.plist entries
claude plugin marketplace add shinyorg/skills
claude plugin install shiny-client@shiny
copilot plugin marketplace add https://github.com/shinyorg/skills
copilot plugin install shiny-client@shiny
View shiny-client Plugin
  • Android — Granular manifest permissions and hardware features
  • iOS — Info.plist entries with typed values and arrays