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: ivx-qv-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:16- Preparing an app for App Store submission17- Reviewing code for compliance issues18- Implementing features that may trigger review concerns19- Auditing existing apps for guideline violations20- Building features involving payments, user data, or sensitive content2122## Guideline Sections2324Read individual rule files for detailed explanations, checklists, and code examples:2526| Section | File | Key Topics |27|---------|------|------------|28| **1. Safety** | [rules/1-safety.md](rules/1-safety.md) | Objectionable content, UGC moderation, Kids Category, physical harm, data security |29| **2. Performance** | [rules/2-performance.md](rules/2-performance.md) | App completeness, metadata accuracy, hardware compatibility, software requirements |30| **3. Business** | [rules/3-business.md](rules/3-business.md) | In-app purchase, subscriptions, cryptocurrencies, other business models |31| **4. Design** | [rules/4-design.md](rules/4-design.md) | Copycats, minimum functionality, spam, extensions, Apple services, login |32| **5. Legal** | [rules/5-legal.md](rules/5-legal.md) | Privacy, data collection, intellectual property, gambling, VPN, MDM |3334## Risk Levels by Category3536| Risk Level | Category | Section | Common Rejection Reasons |37|------------|----------|---------|--------------------------|38| CRITICAL | Privacy & Data | 5.1 | Missing privacy policy, unauthorized data collection |39| CRITICAL | Payments | 3.1 | Bypassing in-app purchase, unclear pricing |40| HIGH | Safety | 1.x | Objectionable content, inadequate UGC moderation |41| HIGH | Performance | 2.x | Crashes, incomplete features, deprecated APIs |42| MEDIUM | Design | 4.x | Copycat apps, minimum functionality issues |43| MEDIUM | Legal | 5.x | IP violations, gambling without license |4445---4647## Quick Reference: High-Risk Rejection Patterns4849### Critical Issues (Immediate Rejection)5051**Swift:**52```swift53// 🔴 Private API usage54let selector = NSSelectorFromString("_privateMethod")5556// 🔴 Hardcoded secrets57let apiKey = "sk_live_xxxxx"5859// 🔴 External payment for digital goods60func purchaseDigitalContent() {61 openStripeCheckout() // Use StoreKit instead62}63```6465**React Native / Expo:**66```typescript67// 🔴 Hardcoded secrets in JS bundle68const API_KEY = 'sk_live_xxxxx'; // REJECTION6970// 🔴 External payment for digital goods71Linking.openURL('https://stripe.com/checkout'); // Use react-native-iap7273// 🔴 Dynamic code execution74eval(downloadedCode); // REJECTION7576// 🔴 Major feature changes via CodePush/expo-updates77// OTA updates for bug fixes only, not new features!78```7980### High-Risk Issues8182**Swift:**83```swift84// 🟡 Missing ATT when using ad SDKs85import FacebookAds // Without ATTrackingManager8687// 🟡 Account creation without deletion88func createAccount() { } // But no deleteAccount()89```9091**React Native / Expo:**92```typescript93// 🟡 Missing ATT (use expo-tracking-transparency)94import analytics from '@react-native-firebase/analytics';95analytics().logEvent('event'); // Without ATT prompt = REJECTION9697// 🟡 Account deletion via website only98Linking.openURL('https://example.com/delete'); // Must be in-app!99100// 🟡 Social login without Sign in with Apple101<GoogleSigninButton /> // Must also offer Apple login!102```103104### Medium-Risk Issues105106```typescript107// 🟠 Vague purpose strings in Info.plist108"This app needs camera access" // Be specific!109110// 🟠 WebView-only app (insufficient native functionality)111const App = () => <WebView source={{ uri: 'https://site.com' }} />;112113// 🟠 References to Android in iOS app114const text = "Also available on Android"; // REJECTION115116// 🟠 console.log in production117console.log('debug'); // Remove or wrap in __DEV__118```119120---121122## Pre-Submission Checklist123124### Privacy (Section 5.1)125- [ ] Privacy policy link in App Store Connect126- [ ] Privacy policy link accessible within app127- [ ] All purpose strings are specific and accurate128- [ ] App Privacy details completed in App Store Connect129- [ ] ATT implemented if tracking users130- [ ] Account deletion available if accounts exist131- [ ] Data minimization - only requesting necessary permissions132- [ ] User consent obtained before data collection133134### Payments (Section 3.1)135- [ ] StoreKit used for all digital purchases136- [ ] Restore purchases implemented137- [ ] Subscription terms clearly displayed138- [ ] Loot box odds disclosed if applicable139- [ ] No external payment for digital goods (unless entitled)140- [ ] Credits/currencies don't expire141142### Safety (Section 1.x)143- [ ] No objectionable content144- [ ] UGC moderation implemented (filter, report, block, contact)145- [ ] Parental gates for Kids Category apps146- [ ] No false information or prank features147- [ ] Medical disclaimers if applicable148- [ ] No substance promotion149150### Performance (Section 2.x)151- [ ] No crashes or bugs152- [ ] All features complete and functional153- [ ] No placeholder content154- [ ] IPv6 tested and functional155- [ ] Demo account provided if needed156- [ ] Using only public APIs157- [ ] No deprecated APIs158- [ ] Proper background mode usage159160### Design (Section 4.x)161- [ ] Sufficient native functionality (not just web wrapper)162- [ ] No copycat concerns163- [ ] Original app name and branding164- [ ] Extensions comply with guidelines165- [ ] Login alternatives if using social login166- [ ] Not monetizing built-in capabilities167168### Legal (Section 5.x)169- [ ] No unlicensed third-party content170- [ ] Proper Apple trademark usage171- [ ] Gambling license if applicable172- [ ] VPN uses NEVPNManager API173- [ ] COPPA/GDPR compliance for kids174175---176177## References178179- [App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/)180- [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/)181- [App Store Connect Help](https://developer.apple.com/help/app-store-connect/)182- [Apple Developer Documentation](https://developer.apple.com/documentation/)