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, developer code of conduct |
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 a privacy-preserving alternative (4.8)
<GoogleSigninButton /> // Also offer a login meeting 4.8 criteria
// (Sign in with Apple is the simplest option)
// 🟡 Custom review prompts (5.6.1)
showCustomAlert('Rate us 5 stars!'); // Use StoreReview.requestReview()
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
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.4license: MIT5---67# App Store Review Guidelines Checker89Comprehensive 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.1011**Supports:** Swift, Objective-C, React Native, and Expo apps1213**Guidelines current through:** Apple's June 8, 2026 App Review Guidelines update.1415## When to Apply1617Use this skill when:18- Preparing an app for App Store submission19- Reviewing code for compliance issues20- Implementing features that may trigger review concerns21- Auditing existing apps for guideline violations22- Building features involving payments, user data, or sensitive content2324## Guideline Sections2526Read individual rule files for detailed explanations, checklists, and code examples:2728| Section | File | Key Topics |29|---------|------|------------|30| **1. Safety** | [rules/1-safety.md](rules/1-safety.md) | Objectionable content, UGC moderation, Kids Category, physical harm, data security |31| **2. Performance** | [rules/2-performance.md](rules/2-performance.md) | App completeness, metadata accuracy, hardware compatibility, software requirements |32| **3. Business** | [rules/3-business.md](rules/3-business.md) | In-app purchase, subscriptions, cryptocurrencies, other business models |33| **4. Design** | [rules/4-design.md](rules/4-design.md) | Copycats, minimum functionality, spam, extensions, Apple services, login |34| **5. Legal** | [rules/5-legal.md](rules/5-legal.md) | Privacy, data collection, intellectual property, gambling, VPN, MDM, developer code of conduct |3536## Risk Levels by Category3738| Risk Level | Category | Section | Common Rejection Reasons |39|------------|----------|---------|--------------------------|40| CRITICAL | Privacy & Data | 5.1 | Missing privacy policy, unauthorized data collection |41| CRITICAL | Payments | 3.1 | Bypassing in-app purchase, unclear pricing |42| HIGH | Safety | 1.x | Objectionable content, inadequate UGC moderation |43| HIGH | Performance | 2.x | Crashes, incomplete features, deprecated APIs |44| MEDIUM | Design | 4.x | Copycat apps, minimum functionality issues |45| MEDIUM | Legal | 5.x | IP violations, gambling without license |4647---4849## Quick Reference: High-Risk Rejection Patterns5051### Critical Issues (Immediate Rejection)5253**Swift:**54```swift55// 🔴 Private API usage56let selector = NSSelectorFromString("_privateMethod")5758// 🔴 Hardcoded secrets59let apiKey = "sk_live_xxxxx"6061// 🔴 External payment for digital goods62func purchaseDigitalContent() {63 openStripeCheckout() // Use StoreKit instead64}65```6667**React Native / Expo:**68```typescript69// 🔴 Hardcoded secrets in JS bundle70const API_KEY = 'sk_live_xxxxx'; // REJECTION7172// 🔴 External payment for digital goods73Linking.openURL('https://stripe.com/checkout'); // Use react-native-iap7475// 🔴 Dynamic code execution76eval(downloadedCode); // REJECTION7778// 🔴 Major feature changes via CodePush/expo-updates79// OTA updates for bug fixes only, not new features!80```8182### High-Risk Issues8384**Swift:**85```swift86// 🟡 Missing ATT when using ad SDKs87import FacebookAds // Without ATTrackingManager8889// 🟡 Account creation without deletion90func createAccount() { } // But no deleteAccount()91```9293**React Native / Expo:**94```typescript95// 🟡 Missing ATT (use expo-tracking-transparency)96import analytics from '@react-native-firebase/analytics';97analytics().logEvent('event'); // Without ATT prompt = REJECTION9899// 🟡 Account deletion via website only100Linking.openURL('https://example.com/delete'); // Must be in-app!101102// 🟡 Social login without a privacy-preserving alternative (4.8)103<GoogleSigninButton /> // Also offer a login meeting 4.8 criteria104 // (Sign in with Apple is the simplest option)105106// 🟡 Custom review prompts (5.6.1)107showCustomAlert('Rate us 5 stars!'); // Use StoreReview.requestReview()108```109110### Medium-Risk Issues111112```typescript113// 🟠 Vague purpose strings in Info.plist114"This app needs camera access" // Be specific!115116// 🟠 WebView-only app (insufficient native functionality)117const App = () => <WebView source={{ uri: 'https://site.com' }} />;118119// 🟠 References to Android in iOS app120const text = "Also available on Android"; // REJECTION121122// 🟠 console.log in production123console.log('debug'); // Remove or wrap in __DEV__124```125126---127128## Pre-Submission Checklist129130### Privacy (Section 5.1)131- [ ] Privacy policy link in App Store Connect132- [ ] Privacy policy link accessible within app133- [ ] All purpose strings are specific and accurate134- [ ] App Privacy details completed in App Store Connect135- [ ] ATT implemented if tracking users136- [ ] Account deletion available if accounts exist137- [ ] Data minimization - only requesting necessary permissions138- [ ] User consent obtained before data collection139140### Payments (Section 3.1)141- [ ] StoreKit used for all digital purchases142- [ ] Restore purchases implemented143- [ ] Subscription terms clearly displayed144- [ ] Loot box odds disclosed if applicable145- [ ] No external payment for digital goods (unless entitled)146- [ ] Credits/currencies don't expire147148### Safety (Section 1.x)149- [ ] No objectionable content150- [ ] UGC moderation implemented (filter, report, block, contact)151- [ ] UGC violations can be removed quickly and backed by a remediation plan152- [ ] Kids and teens receive age-appropriate experiences inside the app153- [ ] Parental gates for Kids Category apps154- [ ] No false information or prank features155- [ ] Medical disclaimers if applicable156- [ ] No substance promotion157158### Performance (Section 2.x)159- [ ] No crashes or bugs160- [ ] All features complete and functional161- [ ] No placeholder content162- [ ] IPv6 tested and functional163- [ ] Demo account provided if needed164- [ ] Using only public APIs165- [ ] No deprecated APIs166- [ ] Proper background mode usage167168### Design (Section 4.x)169- [ ] Sufficient native functionality (not just web wrapper)170- [ ] No copycat concerns171- [ ] Original app name and branding172- [ ] No duplicate Bundle ID spam or low-effort saturated-category clones173- [ ] Live Activities, push notifications, and Game Center are not used for spam, phishing, or unsolicited messages174- [ ] Extensions comply with guidelines175- [ ] Login alternatives if using social login176- [ ] Not monetizing built-in capabilities177178### Legal (Section 5.x)179- [ ] No unlicensed third-party content180- [ ] Proper Apple trademark usage181- [ ] Gambling license if applicable (with real location-based geo-restriction)182- [ ] VPN uses NEVPNManager API183- [ ] COPPA/GDPR compliance for kids184- [ ] Review prompts use the system API only (no custom prompts)185- [ ] No review, chart, search, or referral manipulation (5.6)186187---188189## References190191- [App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/)192- [Apple Developer Program License Agreement](https://developer.apple.com/support/terms/apple-developer-program-license-agreement/)193- [June 8, 2026 App Review Guidelines update](https://developer.apple.com/news/?id=a233fmpw)194- [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/)195- [App Store Connect Help](https://developer.apple.com/help/app-store-connect/)196- [Apple Developer Documentation](https://developer.apple.com/documentation/)