Flutter iOS & Android permissions: what each plugin needs in Info.plist and AndroidManifest
Description and use
Flutter apps often miss required native permission entries, causing crashes. This guide consolidates requirements for 10 popular plugins, shows how to add meaningful usage strings, and verifies the setup with plumb.
Problem
Flutter plugins require native permission entries that developers often miss, causing runtime failures or app crashes.
Outcome
After applying the checklist and using plumb, the app’s native permission configuration matches plugin requirements, eliminating crashes and ensuring proper permission prompts.
Workflow
- Add plugin to pubspec.yaml and run flutter pub get.
- Insert required iOS usage strings (e.g., NSCameraUsageDescription) with real sentences.
- Add iOS entitlements (e.g., aps-environment) and background modes if needed.
- Add AndroidManifest permissions,
<queries>,<meta-data>and receivers as specified. - Extend MainActivity to FlutterFragmentActivity for plugins like local_auth.
- Run
dart pub global activate plumb && plumb doctorto audit the app’s native config. - Fix any reported missing or empty entries.
- Rebuild and test the app to ensure permissions work correctly.
Evidence
Every iOS permission your app actually asks for needs a *UsageDescription* in Info.plist, with a real sentence, not TODO.
I ran a checker over the 25 most-starred open-source Flutter apps and verified every finding by hand.
plumb doctor checks all of this for you, read-only.
- Record date: 2026-11-02T20:28:48.055Z