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 push notification implementations that violate Guideline 4.5.4 — including requesting push permission at launch, using push for unsolicited marketing, and broken notification handling.
中文简介正在准备中。当前显示原文说明。
查看安装方法安装前可以查看交给 AI 代理的指令内容。
Detects push notification implementations that violate Guideline 4.5.4 — including requesting push permission at launch, using push for unsolicited marketing, and broken notification handling — which are common causes of rejection and post-approval removal.
references/guidelines/4-design.mdCase: App requested push notification permission immediately on launch before any user interaction — rejected under 4.5.4 Source: Apple Developer Forums (multiple reports) Root cause: Push permission must be requested in context — at the moment the user encounters a feature that would benefit from notifications. Requesting on first launch with no explanation is treated the same as any other permission abuse and is rejected.
Case: App sent daily promotional push notifications unrelated to any user action after users had only granted permission for transactional alerts — rejected on resubmission after user complaints triggered review Source: Apple Developer Forums (Guideline 4.5.4 enforcement) Root cause: Guideline 4.5.4 prohibits using push notifications for advertising, promotions, or direct marketing without explicit user opt-in for those categories — permission for one type of notification does not cover all marketing use cases
Case: App used push notifications to display full-screen interstitial ads — rejected Source: Apple Developer Forums Root cause: Push notifications may not be used to display ads — notification content must be relevant to the user's in-app activity or provide utility the user has opted into
Invoke on any iOS/macOS project that uses UNUserNotificationCenter or remote push notifications.
| 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 **/*.swift — collect all Swift source files.Glob **/AppDelegate.swift **/SceneDelegate.swift — locate app lifecycle files.Push permission requested at launch
Grep pattern requestAuthorization in **/AppDelegate.swift and **/SceneDelegate.swift.
If UNUserNotificationCenter.*requestAuthorization found in application(_:didFinishLaunchingWithOptions:) or scene(_:willConnectTo:) → 🟠 HIGH. Push permission requested at launch before any user context is a known rejection pattern — move the request to a point where the value of notifications is clear to the user.
Marketing / promotional push content patterns
Grep pattern "sale"|"discount"|"offer"|"promo"|"% off"|"limited time"|"deal" in push notification payload construction (near UNMutableNotificationContent).
Any match in notification body strings → 🟠 HIGH. Marketing content in push requires an explicit separate opt-in for promotional notifications per 4.5.4.
Push used for ads
Grep pattern "advertisement"|"sponsored"|"ad "|"banner" near UNMutableNotificationContent in **/*.swift.
Any match → 🔴 CRITICAL. Push notifications may not carry advertising content.
Notification delegate implemented
Grep pattern UNUserNotificationCenterDelegate|userNotificationCenter(_:didReceive in **/*.swift.
If UNUserNotificationCenter is used but no delegate is implemented → 🟠 HIGH. Apps must handle notification responses — unhandled taps indicate a broken push implementation (Guideline 2.1).
Push entitlement present
Glob **/*.entitlements — Read and search for aps-environment.
If app uses UNUserNotificationCenter.requestAuthorization but no .entitlements file contains aps-environment → 🟠 HIGH. Missing push entitlement causes silent push failures at review time.
Collect all findings from Phase 2 and build the prioritised findings list below. Include file paths and line numbers. Omit tiers with no findings.
## Push Notification Audit — Findings
### 🔴 CRITICAL — Guaranteed rejection
- [ ] TODO: Remove advertising content from push notification body — push may not carry ads — `NotificationScheduler.swift:33` — Guideline 4.5.4
### 🟠 HIGH — Very likely rejection
- [ ] TODO: Move push permission request out of application(_:didFinishLaunchingWithOptions:) — request in context when the user first encounters a notification-driven feature — `AppDelegate.swift:22` — Guideline 4.5.4
- [ ] TODO: Add UNUserNotificationCenterDelegate to handle notification taps — broken notification handling signals incomplete implementation — `AppDelegate.swift` — Guideline 2.1
- [ ] TODO: Add aps-environment entitlement to MyApp.entitlements — push notifications will silently fail without it
### 🟡 MEDIUM — Possible rejection
- [ ] TODO: Add a separate opt-in step for promotional notifications — general push permission does not cover marketing use cases — Guideline 4.5.4
### 🟢 LOW — Best practice
- [ ] TODO: Show a pre-permission prompt explaining the value of notifications before requesting system permission — improves opt-in rate and demonstrates context to reviewers
Glob, Grep, Read
shared_context is provided by orchestrating agent.# Check where push permission is requested
!grep -rn "requestAuthorization" . --include="*.swift" -B3 | grep -E "func application|func scene|requestAuthorization"
# Check notification content for marketing keywords
!grep -rn "UNMutableNotificationContent" . --include="*.swift" -A 10 | grep -i "sale\|discount\|promo\|offer\|% off"
# Check for notification delegate
!grep -rn "UNUserNotificationCenterDelegate\|didReceive.*response" . --include="*.swift"
# Check for push entitlement
!find . -name "*.entitlements" | xargs grep -l "aps-environment" 2>/dev/null
examples/swift/PushNotificationPatterns.swift
Find target files
**/AppDelegate.swift, **/SceneDelegate.swift, **/*.swift, **/*.mSearch for rejection patterns
UNUserNotificationCenter.*requestAuthorization — push permission request call siteapplication(_:didFinishLaunchingWithOptions:) or scene(_:willConnectTo:) — launch-time requestUNUserNotificationCenterDelegate — delegate conformanceuserNotificationCenter.*didReceive\|willPresent — delegate method implementationsDetermine verdict
didFinishLaunchingWithOptions without prior user action → 🟠 HIGH (Guideline 4.5.4)UNUserNotificationCenterDelegate not set → 🟡 MEDIUMReport
requestAuthorization call to after user taps a "Enable Notifications" button or enters a relevant feature还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
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.
中文简介正在准备中。当前显示原文说明。