Detects missing or insufficient in-app account deletion functionality required since June 30, 2022 under Guideline 5.1.1(v) for all apps that support account creation.
日本語の概要は準備中です。原文の説明を表示しています。
Detects apps that abuse iOS background execution modes — particularly silent audio used to keep the app alive, location background mode used for non-navigation purposes, and background task implementations that do excessive work — enforcing Guideline 2.5.4.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Detects apps that abuse iOS background execution modes — particularly silent audio used to keep the app alive, location background mode used for non-navigation purposes, and background task implementations that do excessive work — enforcing Guideline 2.5.4 which requires background modes to be used only for their intended purpose.
references/guidelines/2-performance.mdCase: App declared the audio background mode and played a silent audio session to prevent the system from suspending the app — rejected under 2.5.4
Source: Apple Developer Forums (multiple reports)
Root cause: Playing silent audio in the background solely to prevent app suspension is explicitly prohibited — it abuses the audio background mode, which is intended for apps that provide audible content to the user. Use BGTaskScheduler for background processing instead.
Case: Fitness app declared location background mode to track user steps, but only needed step count data — Apple reviewer noted the app used CoreLocation for step counting instead of the appropriate CoreMotion/CMPedometer API
Source: Apple Developer Forums (Guideline 2.5.4 enforcement)
Root cause: Background location must be used only when the app's core functionality genuinely requires continuous location updates (navigation, geo-fencing). Using it as a workaround to run in the background for non-location tasks violates 2.5.4.
Case: App declared voip background mode to maintain a persistent socket connection for non-VoIP chat — rejected; VoIP mode is reserved for apps providing telephone-like calling features
Source: Apple Developer Forums
Root cause: Each background mode has a specific intended use case — declaring a background mode for a purpose other than its design is treated as abuse. Use BGProcessingTask or BGAppRefreshTask for periodic background work.
Invoke on any iOS/macOS project that declares background modes in Info.plist or uses BGTaskScheduler, CLLocationManager, or AVAudioSession.
| Name | Type | Default | Description |
|---|---|---|---|
project_root | path | cwd | iOS/macOS project root |
shared_context | object | nil | Pre-collected context from appstore-full-audit Phase 1 |
Skip this phase if shared_context is provided.
Glob **/Info.plist — locate Info.plist for background mode declarations.Glob **/*.swift — collect all Swift source files.Background audio mode with silent/zero-volume session
Read Info.plist — check UIBackgroundModes for audio.
If audio is declared, Grep AVAudioSession|AVAudioPlayer in **/*.swift.
If audio session category is .ambient or .soloAmbient with no audible content, OR if volume is set to 0 near background mode activation → 🔴 CRITICAL. Silent audio background mode abuse.
Background location declared — justify core use
Read Info.plist — check UIBackgroundModes for location.
If location is present, Grep CMPedometer|CMMotionActivityManager|CoreMotion in **/*.swift.
If the app uses CoreMotion/pedometer APIs while also declaring background location → 🟠 HIGH. Step counting and activity tracking belong in CoreMotion, not CoreLocation — background location should not be used as a substitute.
VoIP background mode without calling functionality
Read Info.plist — check UIBackgroundModes for voip.
If voip is present, Grep CXProvider|CXCallController|CallKit|VoIP in **/*.swift.
If voip background mode declared but no CallKit integration found → 🔴 CRITICAL. VoIP background mode is reserved for apps providing telephone-like calling via CallKit — using it for persistent socket connections violates 2.5.4.
BGTaskScheduler not registered for declared modes
Grep pattern BGTaskScheduler|BGProcessingTask|BGAppRefreshTask in **/*.swift.
If background modes fetch or processing are declared but BGTaskScheduler.shared.register is absent → 🟠 HIGH. Background fetch/processing tasks must be registered with BGTaskScheduler — unregistered tasks waste background time and will be deprecated.
Location background mode with Always authorization
Grep pattern requestAlwaysAuthorization in **/*.swift.
If requestAlwaysAuthorization is called but background location mode is absent from Info.plist → 🟠 HIGH. Requesting Always authorization without declaring background location mode causes the OS to silently downgrade to WhenInUse.
Collect all findings from Phase 2 and build the prioritised findings list below. Include file paths and line numbers. Omit tiers with no findings.
## Background Execution Audit — Findings
### 🔴 CRITICAL — Guaranteed rejection
- [ ] TODO: Remove silent audio background mode — playing inaudible audio to prevent suspension violates 2.5.4; use BGTaskScheduler for background work — `AudioKeepAlive.swift:12` — Guideline 2.5.4
- [ ] TODO: Remove voip background mode or integrate CallKit — voip mode requires telephone-like calling functionality via CXProvider — `Info.plist` — Guideline 2.5.4
### 🟠 HIGH — Very likely rejection
- [ ] TODO: Replace CoreLocation-based step counting with CMPedometer — background location is not required for pedometry — `StepTracker.swift:34` — Guideline 2.5.4
- [ ] TODO: Register BGProcessingTask in BGTaskScheduler — background-processing mode declared but BGTaskScheduler not configured — `AppDelegate.swift` — Guideline 2.5.4
### 🟡 MEDIUM — Possible rejection
- [ ] TODO: Review all declared UIBackgroundModes against actual usage — remove any mode not actively used by a core feature
### 🟢 LOW — Best practice
- [ ] TODO: Add a comment next to each UIBackgroundMode entry explaining which feature requires it — helps reviewers and future maintainers understand the justification
Glob, Grep, Read
shared_context is provided by orchestrating agent.audio, navigation apps for location, calling apps for voip) are not flagged — context from Phase 2 checks determines whether usage matches intent.# Check declared background modes
!plutil -convert json -o - Info.plist 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print('Background modes:', d.get('UIBackgroundModes', 'none'))"
# Check for silent audio pattern
!grep -rn "AVAudioSession\|AVAudioPlayer" . --include="*.swift" -A5 | grep -i "ambient\|volume.*0\|setVolume(0"
# Check for BGTaskScheduler usage
!grep -rn "BGTaskScheduler\|BGProcessingTask\|BGAppRefreshTask" . --include="*.swift"
# Check for voip + CallKit
!grep -rn "CXProvider\|CXCallController\|CallKit" . --include="*.swift" | wc -l
examples/swift/BackgroundExecutionPatterns.swift
Find target files
**/Info.plist, **/*.swift, **/*.mSearch for rejection patterns
Info.plist → check UIBackgroundModes array valuesAVAudioSession.*categoryPlayback\|AVAudioSession.*setCategory.*playback + mixWithOthers — silent audio abusekCLAuthorizationStatusAuthorizedAlways\|requestAlwaysAuthorization — always locationPKPushRegistry\|voip in Info.plist UIBackgroundModes — VoIP background modeCXProvider\|CXCallController — CallKit usage (required for VoIP)Determine verdict
audio in UIBackgroundModes + mixWithOthers option (silent audio trick) → 🔴 CRITICAL (Guideline 2.5.4)location in UIBackgroundModes + app is not navigation/fitness → 🔴 CRITICALvoip in UIBackgroundModes + no CXProvider (CallKit) usage → 🔴 CRITICALReport
UIBackgroundModes values found in Info.plistまだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Detects missing or insufficient in-app account deletion functionality required since June 30, 2022 under Guideline 5.1.1(v) for all apps that support account creation.
日本語の概要は準備中です。原文の説明を表示しています。
Detects feature patterns that require a higher age rating than commonly submitted, enforcing Guideline 2.3.6 which requires age ratings to accurately reflect the app's content and social features.
日本語の概要は準備中です。原文の説明を表示しています。
Detects apps that send user data to third-party AI systems without explicit in-app consent and disclosure, enforcing Guideline 5.1.2(i).
日本語の概要は準備中です。原文の説明を表示しています。
Detects placeholder content, stub UI, hardcoded test credentials, and non-production endpoints that signal an incomplete app to reviewers under Guideline 2.1.
日本語の概要は準備中です。原文の説明を表示しています。
Detects app name violations including names exceeding 30 characters, beta labels, Apple trademark terms, and version numbers in the display name, enforcing Guideline 2.3.7.
日本語の概要は準備中です。原文の説明を表示しています。
App Store rejection prevention for iOS/macOS apps. Covers privacy, UGC, IAP, metadata, layout, and quality checks based on real Apple rejection cases.
日本語の概要は準備中です。原文の説明を表示しています。