Install
$ agentstack add skill-cruisediary-apple-app-review-skills-age-rating-accuracy ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
About
Skill: Age Rating Accuracy
Purpose
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.
Apple Guideline
- Primary: 2.3.6 — Performance: Accurate Metadata — Age Ratings
- Related: 2.3.1
- Reference:
references/guidelines/2-performance.md
Real-World Rejection Cases
- Case: Social chat app rated 4+ — reviewer found strangers could message each other — rejected, must be 12+ minimum
Source: Apple Developer Forums (Guideline 2.3.6 enforcement) Root cause: Age rating must accurately reflect content; apps enabling stranger communication require 12+ or 17+ rating — reviewers test social features and will flag a 4+ rating if strangers can interact
Trigger
Invoke on any iOS/macOS project before App Store submission to verify the selected age rating is appropriate for the app's features.
Inputs
| 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 |
Actions
Phase 1: Context Collection
Skip this phase if shared_context is provided.
Glob**/*.swift— collect all Swift source files.Glob**/*.m— collect Objective-C source files.
Phase 2: Checks
- Stranger communication features (12+ minimum)
Grep pattern "message"|"chat"|"inbox"|"direct message"|"DM"|"send.*message"|"message.*stranger" in **/*.swift. If found and app enables communication with unknown users (not just friends/contacts) → 🟠 HIGH. Flag for 12+ age rating review. Reviewer will test whether strangers can contact each other.
- Alcohol or substance references (17+ consideration)
Grep pattern "alcohol"|"beer"|"wine"|"spirits"|"liquor"|"cocktail"|"whiskey" in **/*.swift. If found as primary app theme or purchasable content → 🟠 HIGH. Flag for 17+ age rating consideration.
- Gambling or wagering features (17+)
Grep pattern SKProduct|StoreKit near "bet"|"wager"|"casino"|"slots"|"poker"|"gamble" in **/*.swift. If real-money or simulated gambling found → 🟠 HIGH. Flag for 17+ age rating requirement.
- Unmoderated user-generated content (12+ or 17+)
Grep pattern "post"|"comment"|"UGC"|"userContent"|"community" in **/*.swift. If unmoderated UGC is possible and no contentFilter|moderateContent patterns detected → 🟠 HIGH. Unmoderated UGC apps typically require 12+ or 17+ rating depending on content type.
Phase 3: Output
Collect all findings from Phase 2 and build the prioritised findings list below. Include file paths and line numbers. Omit tiers with no findings.
Output Format
## Age Rating Accuracy — Findings
### 🔴 CRITICAL — Guaranteed rejection
- [ ] TODO: — `file:line` — Guideline 2.3.6
### 🟠 HIGH — Very likely rejection
- [ ] TODO: Review age rating — app enables stranger-to-stranger messaging; minimum 12+ rating required — `ChatViewController.swift` — Guideline 2.3.6
- [ ] TODO: Review age rating — alcohol purchasing/content found; consider 17+ rating — `DrinkMenuViewController.swift:44` — Guideline 2.3.6
- [ ] TODO: Review age rating — simulated gambling or wagering detected; 17+ rating required — `CasinoViewController.swift` — Guideline 2.3.6
- [ ] TODO: Review age rating — unmoderated user-generated content without content filter requires at minimum 12+ rating — Guideline 2.3.6
### 🟡 MEDIUM — Possible rejection
- [ ] TODO: Manually verify age rating in App Store Connect matches all features — use Apple's rating questionnaire as a checklist
### 🟢 LOW — Best practice
- [ ] TODO: Document the age rating rationale in review notes — helps reviewers understand why certain features are rated appropriately
Tools Used
Glob, Grep, Read
Constraints
- Read-only. No file edits.
- No network calls.
- Skip Phase 1 if
shared_contextis provided by orchestrating agent. - Works on Swift, Objective-C, React Native, Flutter projects.
Quick Commands
Run these in your project root to check manually:
# Check for chat/messaging features (may require 12+ rating)
!grep -rn "message\|chat\|inbox\|DirectMessage\b\|\"DM\"" . --include="*.swift" | grep -v "//" | wc -l
# Check for gambling keywords
!grep -rn "bet\b\|wager\|casino\|gambling" . --include="*.swift" -i | grep -v "//"
# Check current age rating in project
!grep -rn "ITSAppUsesNonExemptEncryption\|MinimumOSVersion" . --include="*.plist" | head -5
Swift Anti-Pattern Reference
examples/swift/QualityPatterns.swift
Detection Steps
- Find target files
- Glob:
**/*.swift,**/*.m,**/Info.plist
- Search for rejection patterns
- Grep
alcohol\|tobacco\|gambling\|casino\|betting\|Gambling— regulated content categories - Grep
nudity\|explicit\|adult.*content\|NSFW— mature content indicators - Grep
violence\|gore\|brutal\|Violent— violence content indicators - Read
Info.plist→ checkCFBundleShortVersionStringfor existing age rating indicators - Note: Apple determines age rating from a questionnaire about content (violence level, sexual content, profanity, drug/alcohol references, gambling) — not from hardware APIs used
- Determine verdict
- Gambling/casino content found (
casino\|betting\|roulette) → flag for 17+ content rating review - Explicit or mature content patterns found → flag for age-appropriate rating review
- Cannot determine age rating from API usage alone — location/camera/messaging APIs do not affect rating
- All content checks clean → 🟢 pass (confirm rating in App Store Connect questionnaire)
- Report
- Content patterns found that may require a higher content rating
- Note: Age rating is configured entirely in App Store Connect via a questionnaire — this is a content-pattern hint only
- Fix: Review the age rating questionnaire in App Store Connect; select accurate answers for violence level, sexual content, profanity, drug references, and gambling
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: cruisediary
- Source: cruisediary/apple-app-review-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.