Guideline 2.5.4

Guideline 2.5.4 - Software Requirements: Declaring Unused Background Modes

Low SeverityEasy FixTypical Fix: 1-2 hours0 Reports
Also known as:App declares unused background audio modeApp declares background location but does not use continuous locationApp declares background fetch but does not implement background refreshApp declares VoIP background mode but is not a VoIP appUIBackgroundModes contains capabilities not used by the app

Our Take

Apple is rejecting your app because it declares background mode capabilities in its Info.plist (UIBackgroundModes) that the app doesn't actually use. This commonly happens when developers enable background modes 'just in case' during development, or when a project template includes background modes that the app doesn't need. Apple checks the declared background modes against actual usage. If you declare audio background mode but the app doesn't play audio in the background, that's a rejection. If you declare location but the app doesn't need continuous background location, that's a rejection. The most commonly over-declared modes are: audio, location, fetch, remote-notification, and bluetooth-central. This rejection is sometimes combined with a 2.5.1 rejection if the background mode declaration suggests the app might be doing something it shouldn't (e.g., declaring voip but the app isn't a VoIP app -- which can be used to keep the app running indefinitely in the background).

Resolution Guide

01

Open your project's capabilities

In Xcode, go to your target > Signing & Capabilities > Background Modes. Uncheck any modes you don't actively use.

02

Verify Info.plist

Check the UIBackgroundModes array in Info.plist directly. Remove any values you don't need: audio, location, voip, fetch, remote-notification, bluetooth-central, bluetooth-peripheral, external-accessory, processing.

03

Audit actual background usage

For each remaining background mode, verify there's actual code that uses it:

  • audio: Do you call AVAudioSession.setCategory(.playback) and play audio when backgrounded?
  • - location: Do you use startUpdatingLocation() or startMonitoringSignificantLocationChanges() in the background?

    - fetch: Do you implement application(_:performFetchWithCompletionHandler:)?

    - remote-notification: Do you implement application(_:didReceiveRemoteNotification:fetchCompletionHandler:) with content-available pushes?

    04

    Check CocoaPods/SPM dependencies

    Some third-party libraries modify Info.plist to add background modes during installation. Check your Podfile post-install hooks.

    05

    Document legitimate background usage

    In Review Notes, explain each background mode you declare and how to trigger it during review.

    Prevention

  • Only enable background modes when you're ready to implement the feature
  • Audit capabilities before every submission
  • Don't use project templates with pre-enabled background modes without reviewing them
  • Document background mode justifications in review notes
  • Example Rejection Email

    From:Apple App Review Team
    Subject:Guideline 2.5.4 - Software Requirements: Declaring Unused
    Guideline 2.5.4 - Performance - Software Requirements Your app declares support for background modes that are not used by the app. Specifically, your app declares support for audio background mode, but the app does not play audio in the background. Apps that declare background modes must use them. If your app does not need background audio capabilities, please remove the audio background mode declaration. Next Steps: Please revise your app to remove any unused background mode declarations from the UIBackgroundModes key in your Info.plist.

    Consider Appealing

    If you genuinely use the background mode but Apple didn't trigger it during review, explain the specific user flow that activates background processing and provide steps to reproduce. Include screenshots or a video.

    Generate Appeal

    Before & After

    Before — Rejected

    Info.plist UIBackgroundModes: ['audio', 'location', 'fetch', 'remote-notification'] -- but the app only uses remote-notification for push-triggered content updates

    After — Approved

    Info.plist UIBackgroundModes: ['remote-notification'] -- with Review Notes explaining: 'Background remote-notification mode is used for silent pushes that refresh content when new data is available on our server.'

    What changed: Only declare the background modes you actively use, and be prepared to explain each one to Apple.

    Community Solutions · 0

    Sign in to share your solution.

    More Guideline 2 (Performance) rejections

    View all Guideline 2 rejections