Back

Security

Mobile App Permission Cleanup: Remove Capabilities After Features Move

Mobile app permission cleanup starts when an app still asks for camera, contacts, location, Bluetooth, microphone, notification, or file access after the feature that needed it moved, narrowed, or disappeared. The permission prompt may be the only visible part of the waste, but the risk sits deeper: old SDKs, fallback screens, background workers, crash recovery paths, and store review declarations can all preserve access that no current product flow should need.

The useful outcome is not simply a smaller manifest. It is a release-ready permission change with feature evidence, runtime checks, store metadata updates, QA coverage, and a rollback plan. Treat every removed permission as a product and security migration, because mobile permissions affect trust, conversion, incident response, and platform review.

Key takeaways

  • Start from user journeys and release channels, not from the manifest alone.
  • Prove whether native code, third-party SDKs, background tasks, widgets, and deep links still request the capability.
  • Remove permission copy, store declarations, analytics assumptions, and QA cases with the manifest entry.
  • Stage high-risk permission removals through beta or internal tracks before broad release.
  • Prevent recurrence by requiring a removal owner and review date whenever a new permission is introduced.

Trace Permissions to Screens

Inventory each permission with the feature that justified it, the platform prompt users see, and every caller that can trigger it. A stale permission often survives because the feature owner remembers the main screen but not a dormant import, onboarding branch, or SDK configuration file.

PermissionEvidence to collectCleanup signal
LocationScreens, background modes, geofencing jobs, analytics dimensionsNo foreground or background flow still reads coordinates
Camera or microphoneCapture screens, upload flows, support diagnostics, SDK promptsThe capture path was removed or replaced by file upload
ContactsInvite flows, matching jobs, consent copy, server endpointsNo current release sends address book data
NotificationsTopic subscriptions, permission prompt timing, message categoriesThe app no longer sends the related notification type

Search native modules, dependency configuration, feature flags, and release branches. Runtime telemetry matters too: a permission can be declared but never requested, or requested only by an SDK path the team forgot.

Evidence Before Manifest Changes

Use a review record that separates “declared” from “requested” and “requested” from “needed.”

permission_review:
  capability: precise_location
  declared_in: android_manifest
  current_callers:
    - store_locator_screen
    - legacy_nearby_offer_sdk
  last_runtime_request: none in current stable window
  proposed_change: remove sdk caller, downgrade to approximate location

This record proves why the permission is a candidate. It does not prove deletion is safe until QA covers upgrade installs, fresh installs, denied permissions, and users moving between app versions.

Do Not Rush Platform Edge Cases

Do not rush permissions used by background tasks, emergency support tools, enterprise builds, white-label variants, or old app versions that still call shared APIs. Also slow down when permission copy appears in legal disclosures, app store privacy forms, onboarding screenshots, or customer security questionnaires.

For risky capabilities, first stop asking for the permission in the current flow while keeping defensive code for older installs. Then remove declarations after the team has observed release telemetry and crash reports. If a third-party SDK causes the prompt, remove or reconfigure the SDK before changing the manifest so the next build does not recreate the issue.

Prevention

Change the creation path. Every new mobile permission should include the owning feature, user-facing reason, platform declaration, telemetry event for prompt display, and an expiration trigger. Add permission review to release readiness when a feature is retired, not only when a security audit complains. The best cleanup is a manifest where every capability still has a current screen, a current owner, and a current user benefit.

FAQ

Is removing a permission always safe if telemetry shows no requests?

No. Telemetry can miss disabled analytics, enterprise builds, rare deep links, and users on old versions. Pair runtime data with code search and QA.

Should old app versions block cleanup forever?

No. Keep compatibility only for supported versions and document the cutoff. Cleanup becomes safer when mobile support windows are explicit.