App Store Review Guidelines Checker
Comprehensive guide for evaluating iOS, macOS, tvOS, watchOS, and visionOS app code against Apple's App Store Review Guidelines. This skill covers EVERY guideline point to identify potential rejection issues before submission.
Supports: Swift, Objective-C, React Native, and Expo apps
Guidelines current through: Apple's June 8, 2026 App Review Guidelines update.
When to Apply
Use this skill when:
- Preparing an app for App Store submission
- Reviewing code for compliance issues
- Implementing features that may trigger review concerns
- Auditing existing apps for guideline violations
- Building features involving payments, user data, or sensitive content
Guideline Sections
Read individual rule files for detailed explanations, checklists, and code examples:
| Section |
File |
Key Topics |
| 1. Safety |
rules/1-safety.md |
Objectionable content, UGC moderation, Kids Category, physical harm, data security |
| 2. Performance |
rules/2-performance.md |
App completeness, metadata accuracy, hardware compatibility, software requirements |
| 3. Business |
rules/3-business.md |
In-app purchase, subscriptions, cryptocurrencies, other business models |
| 4. Design |
rules/4-design.md |
Copycats, minimum functionality, spam, extensions, Apple services, login |
| 5. Legal |
rules/5-legal.md |
Privacy, data collection, intellectual property, gambling, VPN, MDM |
Risk Levels by Category
| Risk Level |
Category |
Section |
Common Rejection Reasons |
| CRITICAL |
Privacy & Data |
5.1 |
Missing privacy policy, unauthorized data collection |
| CRITICAL |
Payments |
3.1 |
Bypassing in-app purchase, unclear pricing |
| HIGH |
Safety |
1.x |
Objectionable content, inadequate UGC moderation |
| HIGH |
Performance |
2.x |
Crashes, incomplete features, deprecated APIs |
| MEDIUM |
Design |
4.x |
Copycat apps, minimum functionality issues |
| MEDIUM |
Legal |
5.x |
IP violations, gambling without license |
Quick Reference: High-Risk Rejection Patterns
Critical Issues (Immediate Rejection)
Swift:
// 🔴 Private API usage
let selector = NSSelectorFromString("_privateMethod")
// 🔴 Hardcoded secrets
let apiKey = "sk_live_xxxxx"
// 🔴 External payment for digital goods
func purchaseDigitalContent() {
openStripeCheckout() // Use StoreKit instead
}
React Native / Expo:
// 🔴 Hardcoded secrets in JS bundle
const API_KEY = 'sk_live_xxxxx'; // REJECTION
// 🔴 External payment for digital goods
Linking.openURL('https://stripe.com/checkout'); // Use react-native-iap
// 🔴 Dynamic code execution
eval(downloadedCode); // REJECTION
// 🔴 Major feature changes via CodePush/expo-updates
// OTA updates for bug fixes only, not new features!
High-Risk Issues
Swift:
// 🟡 Missing ATT when using ad SDKs
import FacebookAds // Without ATTrackingManager
// 🟡 Account creation without deletion
func createAccount() { } // But no deleteAccount()
React Native / Expo:
// 🟡 Missing ATT (use expo-tracking-transparency)
import analytics from '@react-native-firebase/analytics';
analytics().logEvent('event'); // Without ATT prompt = REJECTION
// 🟡 Account deletion via website only
Linking.openURL('https://example.com/delete'); // Must be in-app!
// 🟡 Social login without Sign in with Apple
<GoogleSigninButton /> // Must also offer Apple login!
Medium-Risk Issues
// 🟠 Vague purpose strings in Info.plist
"This app needs camera access" // Be specific!
// 🟠 WebView-only app (insufficient native functionality)
const App = () => <WebView source={{ uri: 'https://site.com' }} />;
// 🟠 References to Android in iOS app
const text = "Also available on Android"; // REJECTION
// 🟠 console.log in production
console.log('debug'); // Remove or wrap in __DEV__
Pre-Submission Checklist
Privacy (Section 5.1)
Payments (Section 3.1)
Safety (Section 1.x)
Performance (Section 2.x)
Design (Section 4.x)
Legal (Section 5.x)
References
Source: safaiyeh/app-store-review-skill — distributed by TomeVault.
1---2name: app-store-review3description: Evaluates code against Apple's App Store Review Guidelines. Use this skill when reviewing iOS, macOS, tvOS, watchOS, or visionOS app code (Swift, Objective-C, React Native, or Expo) to identify potential App Store rejection issues before submission. Triggers on tasks involving app review preparation, compliance checking, or App Store submission readiness. Use when this capability is needed.4---56# App Store Review Guidelines Checker78Comprehensive guide for evaluating iOS, macOS, tvOS, watchOS, and visionOS app code against Apple's App Store Review Guidelines. This skill covers EVERY guideline point to identify potential rejection issues before submission.910**Supports:** Swift, Objective-C, React Native, and Expo apps1112**Guidelines current through:** Apple's June 8, 2026 App Review Guidelines update.1314## When to Apply1516Use this skill when:17- Preparing an app for App Store submission18- Reviewing code for compliance issues19- Implementing features that may trigger review concerns20- Auditing existing apps for guideline violations21- Building features involving payments, user data, or sensitive content2223## Guideline Sections2425Read individual rule files for detailed explanations, checklists, and code examples:2627| Section | File | Key Topics |28|---------|------|------------|29| **1. Safety** | [rules/1-safety.md](rules/1-safety.md) | Objectionable content, UGC moderation, Kids Category, physical harm, data security |30| **2. Performance** | [rules/2-performance.md](rules/2-performance.md) | App completeness, metadata accuracy, hardware compatibility, software requirements |31| **3. Business** | [rules/3-business.md](rules/3-business.md) | In-app purchase, subscriptions, cryptocurrencies, other business models |32| **4. Design** | [rules/4-design.md](rules/4-design.md) | Copycats, minimum functionality, spam, extensions, Apple services, login |33| **5. Legal** | [rules/5-legal.md](rules/5-legal.md) | Privacy, data collection, intellectual property, gambling, VPN, MDM |3435## Risk Levels by Category3637| Risk Level | Category | Section | Common Rejection Reasons |38|------------|----------|---------|--------------------------|39| CRITICAL | Privacy & Data | 5.1 | Missing privacy policy, unauthorized data collection |40| CRITICAL | Payments | 3.1 | Bypassing in-app purchase, unclear pricing |41| HIGH | Safety | 1.x | Objectionable content, inadequate UGC moderation |42| HIGH | Performance | 2.x | Crashes, incomplete features, deprecated APIs |43| MEDIUM | Design | 4.x | Copycat apps, minimum functionality issues |44| MEDIUM | Legal | 5.x | IP violations, gambling without license |4546---4748## Quick Reference: High-Risk Rejection Patterns4950### Critical Issues (Immediate Rejection)5152**Swift:**53```swift54// 🔴 Private API usage55let selector = NSSelectorFromString("_privateMethod")5657// 🔴 Hardcoded secrets58let apiKey = "sk_live_xxxxx"5960// 🔴 External payment for digital goods61func purchaseDigitalContent() {62 openStripeCheckout() // Use StoreKit instead63}64```6566**React Native / Expo:**67```typescript68// 🔴 Hardcoded secrets in JS bundle69const API_KEY = 'sk_live_xxxxx'; // REJECTION7071// 🔴 External payment for digital goods72Linking.openURL('https://stripe.com/checkout'); // Use react-native-iap7374// 🔴 Dynamic code execution75eval(downloadedCode); // REJECTION7677// 🔴 Major feature changes via CodePush/expo-updates78// OTA updates for bug fixes only, not new features!79```8081### High-Risk Issues8283**Swift:**84```swift85// 🟡 Missing ATT when using ad SDKs86import FacebookAds // Without ATTrackingManager8788// 🟡 Account creation without deletion89func createAccount() { } // But no deleteAccount()90```9192**React Native / Expo:**93```typescript94// 🟡 Missing ATT (use expo-tracking-transparency)95import analytics from '@react-native-firebase/analytics';96analytics().logEvent('event'); // Without ATT prompt = REJECTION9798// 🟡 Account deletion via website only99Linking.openURL('https://example.com/delete'); // Must be in-app!100101// 🟡 Social login without Sign in with Apple102<GoogleSigninButton /> // Must also offer Apple login!103```104105### Medium-Risk Issues106107```typescript108// 🟠 Vague purpose strings in Info.plist109"This app needs camera access" // Be specific!110111// 🟠 WebView-only app (insufficient native functionality)112const App = () => <WebView source={{ uri: 'https://site.com' }} />;113114// 🟠 References to Android in iOS app115const text = "Also available on Android"; // REJECTION116117// 🟠 console.log in production118console.log('debug'); // Remove or wrap in __DEV__119```120121---122123## Pre-Submission Checklist124125### Privacy (Section 5.1)126- [ ] Privacy policy link in App Store Connect127- [ ] Privacy policy link accessible within app128- [ ] All purpose strings are specific and accurate129- [ ] App Privacy details completed in App Store Connect130- [ ] ATT implemented if tracking users131- [ ] Account deletion available if accounts exist132- [ ] Data minimization - only requesting necessary permissions133- [ ] User consent obtained before data collection134135### Payments (Section 3.1)136- [ ] StoreKit used for all digital purchases137- [ ] Restore purchases implemented138- [ ] Subscription terms clearly displayed139- [ ] Loot box odds disclosed if applicable140- [ ] No external payment for digital goods (unless entitled)141- [ ] Credits/currencies don't expire142143### Safety (Section 1.x)144- [ ] No objectionable content145- [ ] UGC moderation implemented (filter, report, block, contact)146- [ ] UGC violations can be removed quickly and backed by a remediation plan147- [ ] Kids and teens receive age-appropriate experiences inside the app148- [ ] Parental gates for Kids Category apps149- [ ] No false information or prank features150- [ ] Medical disclaimers if applicable151- [ ] No substance promotion152153### Performance (Section 2.x)154- [ ] No crashes or bugs155- [ ] All features complete and functional156- [ ] No placeholder content157- [ ] IPv6 tested and functional158- [ ] Demo account provided if needed159- [ ] Using only public APIs160- [ ] No deprecated APIs161- [ ] Proper background mode usage162163### Design (Section 4.x)164- [ ] Sufficient native functionality (not just web wrapper)165- [ ] No copycat concerns166- [ ] Original app name and branding167- [ ] No duplicate Bundle ID spam or low-effort saturated-category clones168- [ ] Live Activities, push notifications, and Game Center are not used for spam, phishing, or unsolicited messages169- [ ] Extensions comply with guidelines170- [ ] Login alternatives if using social login171- [ ] Not monetizing built-in capabilities172173### Legal (Section 5.x)174- [ ] No unlicensed third-party content175- [ ] Proper Apple trademark usage176- [ ] Gambling license if applicable177- [ ] VPN uses NEVPNManager API178- [ ] COPPA/GDPR compliance for kids179180---181182## References183184- [App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/)185- [Apple Developer Program License Agreement](https://developer.apple.com/support/terms/apple-developer-program-license-agreement/)186- [June 8, 2026 App Review Guidelines update](https://developer.apple.com/news/?id=a233fmpw)187- [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/)188- [App Store Connect Help](https://developer.apple.com/help/app-store-connect/)189- [Apple Developer Documentation](https://developer.apple.com/documentation/)190191---192> Source: [safaiyeh/app-store-review-skill](https://github.com/safaiyeh/app-store-review-skill) — distributed by [TomeVault](https://tomevault.io).193<!-- tomevault:4.0:skill_md:2026-07-05 -->