Reference library · App Review

Guideline 2.5 Software Requirements: background modes, HealthKit and code you didn't mean to ship

The technical rejections: background modes with no feature behind them, frameworks used without saying so, and code that changes the app after review.

Guideline 2.52. Performance · Software RequirementsApple text last updated June 8, 2026
Updated 8 min read

Checked against Apple's App Review Guidelines (last updated June 8, 2026), Apple Developer News (Nov 13, 2025), Apple's background execution, HealthKit and HIG documentation, Apple's 2025 Transparency Report, and rejection messages posted on Apple Developer Forums and GitHub, on Oct 9, 2026.

The short answer

Guideline 2.5 covers how your app uses iOS itself. Most indie rejections come from three rules: 2.5.4, for declaring a background mode such as audio or location without a feature that needs it; 2.5.1, for HealthKit or other frameworks the app doesn't visibly use; and 2.5.2, for downloading code that changes the app after review. Remove what you don't use, or show the reviewer where the feature is.

Active sub-rules
16
2.5.1–2.5.18; 2.5.7 and 2.5.10 are omitted
Performance rejections, 2025
1,354,418
More than every other section combined
Last change to 2.5
Nov 13, 2025
2.5.10 (test ads) deleted
Private API use
Caught at upload
ITMS-90338 email, before review

01What Guideline 2.5 covers

Guideline 2.5 sits in the Performance section — the section Apple's 2025 Transparency Report cites in 1,354,418 rejections, more than Safety, Business, Design, Legal and Other put together. Most of those are Guideline 2.1 and Guideline 2.3; 2.5 is the technical part. Its 16 active rules, in short:

Guideline 2.5 sub-rules and what trips them (guidelines updated June 8, 2026)
RuleWhat it requiresTypical indie trigger
2.5.1Public APIs only, current OS, frameworks used for their intended purpose and mentioned in the descriptionHealthKit enabled but not visible in the app
2.5.2Self-contained bundle; no downloading code that adds or changes featuresRemote scripts or modules that change behaviour after review
2.5.3Nothing that harms the OS or hardware featuresRare for indie apps
2.5.4Background services only for their intended purposeAn audio or location background mode with no feature behind it
2.5.5Fully functional on IPv6-only networksHard-coded IPv4 addresses
2.5.6Web browsing uses WebKit (alternative engines by entitlement in the EU and Japan)Bundling another browser engine
2.5.8No alternate home screen environmentsLauncher-style apps
2.5.9Don't alter standard switches or block links to other appsHijacking the volume buttons
2.5.11SiriKit and Shortcuts: only intents you handle, no generic aliasesRegistering unrelated intents
2.5.12Call and SMS blocking only for confirmed spam, explained in marketing textVague blocking criteria
2.5.13Face authentication through LocalAuthenticationCustom face login with ARKit
2.5.14Explicit consent and a clear indicator when recording user activityScreen or audio recording with no visible cue
2.5.15File pickers include Files and iCloud documentsA custom picker that hides iCloud Drive
2.5.16Widgets, extensions and notifications relate to the app; App Clip features in the main appA widget unrelated to the app's purpose
2.5.17Matter pairing through Apple's frameworkRare for indie apps
2.5.18Ads only in the main app binary, age-appropriate, closableAds inside a widget or keyboard extension
Summarised from the App Review Guidelines. 2.5.7 and 2.5.10 read “Intentionally omitted”; 2.5.10's ban on test ads was deleted on November 13, 2025.
The finding, in one line
According to ASOitis, many Guideline 2.5 rejections come from settings the developer never chose: a template or dependency switches on a background mode or capability — expo-audio's config plugin adds the “audio” background mode by default — and App Review rejects any declaration with no matching feature in the app.

022.5.4: background modes with nothing behind them

Multitasking apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc.
— App Store Review Guidelines, 2.5.4

Reviewers check the UIBackgroundModes key in your Info.plist against what the app actually does. Declare audio without a feature that plays sound in the background and you get this, quoted from a developer's rejection:

Your app still declares support for audio in the UIBackgroundModes key in your Info.plist but did not include features that require persistent audio. … Please revise your app to provide audible content to the user while the app is in the background or remove the "audio" setting from the UIBackgroundModes key.
— App Review rejection under 2.5.4, posted on Apple Developer Forums

Location gets the same treatment, with a twist: the feature has to serve the user. In a December 2024 rejection, Apple wrote that “using the location background mode for the sole purpose of tracking employees is not appropriate” — even with consent.

The surprise is how often nobody chose the mode on purpose. Expo's expo-audio config plugin adds audio to UIBackgroundModes by default; after an app was rejected in September 2026, a pull request proposed making it opt-in. Starter templates, copied Xcode capabilities and old experiments do the same.

Keep the mode if…

  • Audio: music, podcasts, audiobooks, workouts with spoken cues — sound that should continue when the screen locks
  • Location: navigation, run or ride tracking — the user expects updates while the app is in the background
  • VoIP: real calls through CallKit

Remove it if…

  • Sound only plays while the app is open
  • You only need location occasionally — Apple suggests the significant-change location service instead
  • A dependency added it and no feature uses it

Apple's background execution guide says to “use background execution modes sparingly” and to use an alternative when one exists. If you keep a mode, tell the reviewer exactly how to trigger the feature: both rejections above say the reviewer was “unable to locate” or “did not include” it.

032.5.1: HealthKit and frameworks the reviewer can't see

2.5.1 says apps “should use APIs and frameworks for their intended purposes and indicate that integration in their app description”, and that “HealthKit should be used for health and fitness purposes and integrate with the Health app.” Two rejections show the two ways indie apps fail it:

Two Guideline 2.5.1 HealthKit rejections
What Apple wroteUsual causeFix
“The app uses the HealthKit or CareKit APIs but does not clearly identify the HealthKit and CareKit functionality in the app's user interface.” (Sep 2025)Health data is read, but nothing on screen says soShow it: a Health section or settings row with Apple's Health icon, and a line in the description
“Your app's binary includes references to HealthKit components, but the app does not appear to include any primary features that require health or fitness data.” (Aug 2024)The HealthKit capability is on but unused, often from a template or SDKRemove the capability, or build the feature

For the second case, an Apple engineer's advice on the forum was to “make sure that you didn't accidentally enable the HealthKit entitlement” under Signing & Capabilities. For the first, Apple's HealthKit privacy documentation requires the use to be “clear in both your marketing text and your user interface”, and the HIG offers the simplest visual signal: “The Apple Health icon shows that an app works with HealthKit and the Health app.” Use only Apple's icon.

042.5.2: code that changes the app after review

Apps may not “download, install, or execute code which introduces or changes features or functionality of the app, including other apps.” Rejections developers have posted include “The app installed or launched executable code. Specifically, the app uses the itms-services URL scheme to install an app” (May 2024) and “your app downloaded code that changes your app's behavior or functionality” (August 2022).

The strongest version targets code built to change behaviour after approval — passing arbitrary values to methods like dlopen() or performSelector:, or running remote scripts. One such 2019 rejection warned that the next submission “may require a longer review time” and that the app “will not be eligible for an expedited review until this issue is resolved.” Feature flags that switch between features already in the reviewed build are a different thing; new behaviour delivered from a server is what the rule is about.

05Check your build before you upload

The settings that trigger 2.5.4 and 2.5.1 live in the compiled app, not in your memory of the project. Read them from the archive Xcode just built — after every SDK update, too:

Read background modes, entitlements and frameworks from an archivebash
# Point APP at the .app inside your latest archive
APP="$HOME/Library/Developer/Xcode/Archives/2026-10-09/MyApp.xcarchive/Products/Applications/MyApp.app"

# Background modes the app declares (error = none declared)
plutil -extract UIBackgroundModes json -o - "$APP/Info.plist"

# Capabilities it's signed with (look for HealthKit, HomeKit, etc.)
codesign -d --entitlements - "$APP"

# Third-party frameworks that might add either
ls "$APP/Frameworks"

Guideline 2.5 pre-submission checklist

  • Every value in UIBackgroundModes matches a feature a reviewer can find in under a minute
  • Every entitlement in the signature is used by a visible feature
  • HealthKit use is visible in the app and named in the description, with Apple's Health icon
  • No code, scripts or modules downloaded after review change what the app does
  • The app works on an IPv6-only network (test with your Mac's NAT64 network)
  • Any recording of camera, microphone or screen shows a clear indicator
  • Ads only appear in the main app, never in widgets, extensions or notifications

06Fixing a 2.5 rejection and replying

  1. Decide: remove or reveal

    If the mode or capability isn't needed, remove it and upload a new build. If it is, make the feature easy to find and explain it.

  2. Find who added it

    Check config plugins, SDK setup guides and the Signing & Capabilities tab. Remove it at the source, or the next update will bring it back.

  3. Upload a new build

    Info.plist keys, entitlements and code are in the binary, so 2.5 rejections can't be fixed in metadata alone.

  4. Reply with exact steps

    If you kept the feature, tell the reviewer how to trigger it, step by step, and attach a short screen recording.

Reply in App Store Connect — Guideline 2.5.4text
Hello App Review team,

Thank you for the feedback on Guideline 2.5.4.

[If removed]
The "audio" background mode was added by a dependency and is not used.
We removed it from UIBackgroundModes in build [number].

[If kept]
The app plays [guided workout audio] while in the background.
To verify: [open the app > Workouts > start any workout > lock the
device]. Audio cues continue every [30 seconds]. A screen recording
is attached in App Review Information.

Thank you,
[Name]

Frequently asked questions

What does Guideline 2.5.4 mean?

It says multitasking apps may only use background services for their intended purposes, such as VoIP, audio playback and location. Apple rejects apps that declare a background mode in UIBackgroundModes without a feature that needs it.

How do I fix “declares support for audio in the UIBackgroundModes key”?

If your app doesn't play sound in the background, remove “audio” from UIBackgroundModes and upload a new build; check whether a dependency added it. If it does, reply with exact steps to hear audio continue after locking the device.

Why was my app rejected for HealthKit under Guideline 2.5.1?

Either the app uses HealthKit but doesn't show it clearly in the interface, or the HealthKit capability is enabled without any health feature. Show the integration with Apple's Health icon and mention it in the description, or remove the capability.

Is a Guideline 2.5 rejection fixed without a new build?

Rarely. Background modes, entitlements and code are part of the binary. The exception is when the feature exists and the reviewer couldn't find it — then a reply with exact steps can be enough.

Does Guideline 2.5.2 ban feature flags or server-driven content?

The rule bans downloading or executing code that introduces or changes features. Switching between features already in the reviewed build, or loading content, is not the same as shipping new code, but anything that delivers new behaviour after review is at risk.

Where to go next

Sources

  1. App Store Review Guidelines — 2.5 Software Requirements — Apple Developer
  2. Configuring background execution modes — Apple Developer Documentation
  3. Protecting user privacy (HealthKit) — Apple Developer Documentation
  4. Updated App Review Guidelines now available (Nov 13, 2025) — Apple Developer News
  5. App Store Transparency Report 2025 — Apple
  6. Forum: 2.5.4 rejection for the audio background mode — Apple Developer Forums
  7. Forum: 2.5.1 rejection for unused HealthKit — Apple Developer Forums
  8. expo-audio: make background playback opt-in — GitHub

Published Oct 9, 2026 · last checked Oct 9, 2026. Found something out of date? Tell us and we'll fix it within a day. Machine-readable version: /app-review/guideline-2-5-software-requirements.md