# Guideline 2.5.4 - Software Requirements: Declaring Unused Background Modes

**Guideline:** 2.5.4 · **Store:** Apple App Store · **Severity:** low · **Fix difficulty:** easy · **Typical turnaround:** 1-2 hours

Canonical URL: https://appstorereject.com/rejections/apple/2/guideline-254-software-requirements-declaring-unused-background-modes

## Description

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).

## Common variations

- App declares unused background audio mode
- App declares background location but does not use continuous location
- App declares background fetch but does not implement background refresh
- App declares VoIP background mode but is not a VoIP app
- UIBackgroundModes contains capabilities not used by the app

## Example rejection email

```
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.
```

## Resolution steps

## Quick Assessment
- **Risk level:** Low
- **Resolution path:** Fix & Resubmit
- **Typical turnaround:** 1-2 hours

## The Fix

1. **Open your project's capabilities** -- In Xcode, go to your target > Signing & Capabilities > Background Modes. Uncheck any modes you don't actively use.

2. **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`.

3. **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?

4. **Check CocoaPods/SPM dependencies** -- Some third-party libraries modify Info.plist to add background modes during installation. Check your Podfile post-install hooks.

5. **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

## Appeal guidance

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.

## Before / after examples

**Before:** Info.plist UIBackgroundModes: ['audio', 'location', 'fetch', 'remote-notification'] -- but the app only uses remote-notification for push-triggered content updates
**After:** 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.'
**Why it works:** Only declare the background modes you actively use, and be prepared to explain each one to Apple.

## Common questions

**Can you appeal a 2.5.4 rejection?**

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.

**How long does this typically take to fix?**

Typical turnaround is 1-2 hours (difficulty: easy). After resubmission, most re-reviews complete within 24-48 hours.

---
*Machine-readable source: https://api.appstorereject.com/api/rejections/detail?slug=guideline-254-software-requirements-declaring-unused-background-modes*