Guideline 2.5.4
Guideline 2.5.4 - Software Requirements: Declaring Unused Background Modes
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
Open your project's capabilities
In Xcode, go to your target > Signing & Capabilities > Background Modes. Uncheck any modes you don't actively use.
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.
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?
Check CocoaPods/SPM dependencies
Some third-party libraries modify Info.plist to add background modes during installation. Check your Podfile post-install hooks.
Document legitimate background usage
In Review Notes, explain each background mode you declare and how to trigger it during review.
Prevention
Example Rejection Email
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.
Before & After
Info.plist UIBackgroundModes: ['audio', 'location', 'fetch', 'remote-notification'] -- but the app only uses remote-notification for push-triggered content updates
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
- Guideline 2.1 - App Completeness: App Crashes During Review
- Guideline 2.1 - App Completeness: App Requires External Hardware Not Provided for Review
- Guideline 2.1 - App Completeness: Crashes on Launch
- Guideline 2.1 - App Completeness: Demo Account Not Working
- Guideline 2.1 - App Completeness: IAP Products Not Found in Binary
- Guideline 2.1 - App Completeness: Missing App Icon