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
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
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## When to Apply1415Use this skill when:1617- 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:**5354```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:**6869```typescript70// 🔴 Hardcoded secrets in JS bundle71const API_KEY = "sk_live_xxxxx"; // REJECTION7273// 🔴 External payment for digital goods74Linking.openURL("https://stripe.com/checkout"); // Use react-native-iap7576// 🔴 Dynamic code execution77eval(downloadedCode); // REJECTION7879// 🔴 Major feature changes via CodePush/expo-updates80// OTA updates for bug fixes only, not new features!81```8283### High-Risk Issues8485**Swift:**8687```swift88// 🟡 Missing ATT when using ad SDKs89import FacebookAds // Without ATTrackingManager9091// 🟡 Account creation without deletion92func createAccount() { } // But no deleteAccount()93```9495**React Native / Expo:**9697```typescript98// 🟡 Missing ATT (use expo-tracking-transparency)99import analytics from '@react-native-firebase/analytics';100analytics().logEvent('event'); // Without ATT prompt = REJECTION101102// 🟡 Account deletion via website only103Linking.openURL('https://example.com/delete'); // Must be in-app!104105// 🟡 Social login without Sign in with Apple106<GoogleSigninButton /> // Must also offer Apple login!107```108109### Medium-Risk Issues110111```typescript112// 🟠 Vague purpose strings in Info.plist113"This app needs camera access" // Be specific!114115// 🟠 WebView-only app (insufficient native functionality)116const App = () => <WebView source={{ uri: 'https://site.com' }} />;117118// 🟠 References to Android in iOS app119const text = "Also available on Android"; // REJECTION120121// 🟠 console.log in production122console.log('debug'); // Remove or wrap in __DEV__123```124125---126127## Pre-Submission Checklist128129### Privacy (Section 5.1)130131- [ ] 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)141142- [ ] StoreKit used for all digital purchases143- [ ] Restore purchases implemented144- [ ] Subscription terms clearly displayed145- [ ] Loot box odds disclosed if applicable146- [ ] No external payment for digital goods (unless entitled)147- [ ] Credits/currencies don't expire148149### Safety (Section 1.x)150151- [ ] No objectionable content152- [ ] UGC moderation implemented (filter, report, block, contact)153- [ ] Parental gates for Kids Category apps154- [ ] No false information or prank features155- [ ] Medical disclaimers if applicable156- [ ] No substance promotion157158### Performance (Section 2.x)159160- [ ] No crashes or bugs161- [ ] All features complete and functional162- [ ] No placeholder content163- [ ] IPv6 tested and functional164- [ ] Demo account provided if needed165- [ ] Using only public APIs166- [ ] No deprecated APIs167- [ ] Proper background mode usage168169### Design (Section 4.x)170171- [ ] Sufficient native functionality (not just web wrapper)172- [ ] No copycat concerns173- [ ] Original app name and branding174- [ ] Extensions comply with guidelines175- [ ] Login alternatives if using social login176- [ ] Not monetizing built-in capabilities177178### Legal (Section 5.x)179180- [ ] No unlicensed third-party content181- [ ] Proper Apple trademark usage182- [ ] Gambling license if applicable183- [ ] VPN uses NEVPNManager API184- [ ] COPPA/GDPR compliance for kids185186---187188## References189190- [App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/)191- [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/)192- [App Store Connect Help](https://developer.apple.com/help/app-store-connect/)193- [Apple Developer Documentation](https://developer.apple.com/documentation/)