| name | auditing-app-store-compliance |
| description | Comprehensive App Store compliance audit covering all 5 Apple guideline categories (Safety, Performance, Business, Design, Legal) with mandatory GitHub issue output |
App Store Compliance Audit
Perform a systematic App Store compliance audit covering all 5 Apple guideline categories. Produces actionable GitHub issue with specific findings, file paths, and confidence levels.
Scope (optional): $ARGUMENTS
If no scope is provided, "all" is assumed.
Core principle: Thorough audit regardless of time pressure, scope narrowing, or past approval history. All 5 categories. GitHub issue output. No shortcuts.
Step 1: Audit Scope Validation
Mandatory requirements that CANNOT be skipped:
- All 5 categories: Safety, Performance, Business, Design, Legal
- GitHub issue output: Structured issue with checkboxes
- Specific locations: File paths and line numbers for all findings
- Confidence levels: Certain/Likely/Possible for each finding
Red flags - if you catch yourself thinking any of these, STOP:
- "Quick check is fine given the timeline" → Full audit. Same process.
- "They just want privacy checked" → All 5 categories. Always.
- "They passed review before" → Previous approval is irrelevant.
- "Don't need GitHub issue, just tell them" → Issue is mandatory.
- "This seems simple" → Follow checklist completely.
Step 2: Audit Safety Guidelines (1.x)
Guideline Categories:
- 1.1 Objectionable Content
- 1.2 User Generated Content
- 1.3 Kids Category
- 1.4 Physical Harm
- 1.5 Developer Information
- 1.6 Data Security
2.1 Search for content moderation mechanisms
grep -ri "report\|block\|moderate\|flag" --include="*.swift" | head -20
grep -ri "comment\|post\|upload\|share" --include="*.swift" | head -20
2.2 Check Kids Category requirements (if applicable)
grep -ri "AdMob\|Facebook.*Ad\|Unity.*Ads" --include="*.swift" | head -10
grep -ri "Analytics\|tracking\|IDFA" --include="*.swift" | head -10
grep -ri "openURL\|SFSafariViewController\|WKWebView" --include="*.swift" | head -10
2.3 Check for physical harm content
grep -ri "cure\|treat\|diagnose\|medical\|health" --include="*.swift" | head -10
grep -ri "drug\|medication\|dose\|prescription" --include="*.swift" | head -10
2.4 Verify developer information
- Check Info.plist for valid support URL
- Verify App Store Connect contact information is complete
Report findings as:
Safety (1.x) Issues:
- [ ] **[Confidence]** {Issue} (Guideline 1.X.X)
- Location: `path/file.swift:123`
- Problem: {Specific issue}
- Resolution: {Actionable fix}
Step 3: Audit Performance Guidelines (2.x)
Guideline Categories:
- 2.1 App Completeness
- 2.2 Beta, Demo, Trial, and Test Versions
- 2.3 Accurate Metadata
- 2.4 Hardware Compatibility
- 2.5 Software Requirements
3.1 Search for placeholder/test content
grep -ri "lorem\|placeholder\|coming soon\|TBD\|TODO" --include="*.swift" | head -20
grep -ri "test" --include="*.swift" | grep -v "Tests/" | grep -v "XCTest" | head -20
grep -ri "debug\|#if DEBUG" --include="*.swift" | head -20
grep -ri "TODO\|FIXME\|XXX\|HACK" --include="*.swift" | head -20
grep -ri "print(\|NSLog\|debugPrint" --include="*.swift" | grep -v "Tests/" | head -20
3.2 Check for incomplete features
grep -ri "isEnabled.*false\|disabled\|NotImplemented" --include="*.swift" | head -10
grep -ri "fatalError\|preconditionFailure\|assertionFailure" --include="*.swift" | head -10
3.3 Verify metadata accuracy
- Screenshots must show actual app functionality
- App description must match actual features
- No references to other platforms (Android, Windows)
3.4 Check hardware requirements
grep -A5 "UIRequiredDeviceCapabilities" */Info.plist
3.5 Software requirements check
grep -ri "@available.*deprecated" --include="*.swift" | head -10
grep "IPHONEOS_DEPLOYMENT_TARGET" project.yml *.xcconfig 2>/dev/null
Report findings as:
Performance (2.x) Issues:
- [ ] **[Confidence]** {Issue} (Guideline 2.X.X)
- Location: `path/file.swift:123`
- Problem: {Specific issue}
- Resolution: {Actionable fix}
Step 4: Audit Business Guidelines (3.x)
Guideline Categories:
- 3.1 Payments (In-App Purchase)
- 3.2 Other Business Model Issues
4.1 Check In-App Purchase implementation
grep -ri "StoreKit\|SKProduct\|Product\|purchase\|subscription" --include="*.swift" | head -20
grep -ri "SKPaymentQueue\|SKProductsRequest" --include="*.swift" | head -10
grep -ri "restore\|currentEntitlements\|AppStore.sync" --include="*.swift" | head -10
4.2 Verify subscription requirements
grep -ri "subscription\|renew\|billing\|cancel" --include="*.swift" | head -10
grep -ri "terms\|conditions\|privacy.*policy" --include="*.swift" | head -10
4.3 Check for cryptocurrency/NFT features
grep -ri "crypto\|bitcoin\|ethereum\|NFT\|blockchain\|wallet" --include="*.swift" | head -10
4.4 Verify advertising implementation
grep -ri "AdMob\|GAD\|Facebook.*Ad\|Unity.*Ads\|AppLovin" --include="*.swift" | head -10
grep -ri "IDFA\|advertisingIdentifier\|ATTrackingManager" --include="*.swift" | head -10
Report findings as:
Business (3.x) Issues:
- [ ] **[Confidence]** {Issue} (Guideline 3.X.X)
- Location: `path/file.swift:123`
- Problem: {Specific issue}
- Resolution: {Actionable fix}
Step 5: Audit Design Guidelines (4.x)
Guideline Categories:
- 4.1 Copycats
- 4.2 Minimum Functionality
- 4.3 Spam
- 4.4 Extensions
- 4.5 Apple Sites and Services
- 4.6 Alternate App Icons
- 4.7 HTML5 Games, Bots, etc.
5.1 Check for minimum functionality
- App must provide value beyond a simple website wrapper
- Must have sufficient features for standalone app
- No placeholder or "coming soon" screens
5.2 Check extension guidelines
grep -ri "NSExtension" */Info.plist
ls -la */Extensions/ 2>/dev/null
grep -ri "WidgetKit\|TimelineProvider" --include="*.swift" | head -10
5.3 Check Apple service usage
grep -ri "ASAuthorization\|SignInWithApple\|ASAuthorizationAppleIDProvider" --include="*.swift" | head -10
grep -ri "Google.*SignIn\|Facebook.*Login\|Twitter.*Login" --include="*.swift" | head -10
5.4 Check for App Clip requirements (if applicable)
grep -ri "app-clip\|AppClip" project.yml *.xcconfig 2>/dev/null
Report findings as:
Design (4.x) Issues:
- [ ] **[Confidence]** {Issue} (Guideline 4.X.X)
- Location: `path/file.swift:123`
- Problem: {Specific issue}
- Resolution: {Actionable fix}
Step 6: Audit Legal Guidelines (5.x)
Guideline Categories:
- 5.1 Privacy (CRITICAL - Most common rejection cause)
- 5.2 Intellectual Property
- 5.3 Gaming, Gambling, and Lotteries
- 5.4 VPN Apps
- 5.5 Mobile Device Management
- 5.6 Developer Code of Conduct
6.1 Privacy Manifest Validation (CRITICAL)
Check for PrivacyInfo.xcprivacy at bundle root:
find . -name "PrivacyInfo.xcprivacy" -type f
grep -E "NSPrivacyTracking|NSPrivacyTrackingDomains|NSPrivacyCollectedDataTypes|NSPrivacyAccessedAPITypes" */PrivacyInfo.xcprivacy
Required privacy manifest structure:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
</array>
</dict>
</plist>
6.2 Required Reason API Detection
Search for APIs that require declaration in privacy manifest:
grep -r "UserDefaults" --include="*.swift" --include="*.m" | head -10
grep -rE "(creationDate|modificationDate|getattrlist|stat\(|fstat\(|lstat\()" --include="*.swift" | head -10
grep -rE "(systemUptime|mach_absolute_time)" --include="*.swift" | head -10
grep -rE "(volumeAvailableCapacity|systemFreeSize|statfs|statvfs)" --include="*.swift" | head -10
grep -rE "activeInputModes" --include="*.swift" | head -10
6.3 Info.plist Usage Description Verification
Check all required usage descriptions:
grep -E "NS.*UsageDescription" */Info.plist
Required keys based on API usage:
| API/Framework | Required Key | Example Description |
|---|
| Camera | NSCameraUsageDescription | "Take photos for your profile" |
| Microphone | NSMicrophoneUsageDescription | "Record voice messages" |
| Photo Library (read) | NSPhotoLibraryUsageDescription | "Select photos to share" |
| Photo Library (write) | NSPhotoLibraryAddUsageDescription | "Save edited images" |
| Location (foreground) | NSLocationWhenInUseUsageDescription | "Find nearby restaurants" |
| Location (background) | NSLocationAlwaysAndWhenInUseUsageDescription | "Track your workout route" |
| Contacts | NSContactsUsageDescription | "Find friends already using the app" |
| Calendar | NSCalendarsUsageDescription | "Add events to your calendar" |
| Bluetooth | NSBluetoothAlwaysUsageDescription | "Connect to fitness devices" |
| Motion | NSMotionUsageDescription | "Count your steps" |
| HealthKit (read) | NSHealthShareUsageDescription | "View your health data" |
| HealthKit (write) | NSHealthUpdateUsageDescription | "Save workout data" |
| Face ID | NSFaceIDUsageDescription | "Unlock securely with Face ID" |
| Speech Recognition | NSSpeechRecognitionUsageDescription | "Transcribe voice notes" |
| Local Network | NSLocalNetworkUsageDescription | "Discover devices on your network" |
| Tracking (ATT) | NSUserTrackingUsageDescription | "Deliver personalized ads" |
grep -ri "AVCaptureSession\|UIImagePickerController.*camera" --include="*.swift" | head -5
grep -ri "AVAudioRecorder\|AVAudioSession.*record" --include="*.swift" | head -5
grep -ri "PHPhotoLibrary\|UIImagePickerController" --include="*.swift" | head -5
grep -ri "CLLocationManager\|CoreLocation" --include="*.swift" | head -5
grep -ri "CNContactStore\|Contacts" --include="*.swift" | head -5
grep -ri "HKHealthStore\|HealthKit" --include="*.swift" | head -5
grep -ri "LAContext\|LocalAuthentication" --include="*.swift" | head -5
6.4 Privacy Policy Verification
grep -ri "privacy.*policy\|privacyPolicy" */Info.plist --include="*.swift" | head -5
6.5 Account Deletion Requirement (Mandatory since 2022)
grep -ri "delete.*account\|deleteAccount\|removeAccount" --include="*.swift" | head -10
6.6 App Tracking Transparency (if tracking)
grep -ri "ATTrackingManager\|requestTrackingAuthorization" --include="*.swift" | head -10
grep -ri "advertisingIdentifier\|IDFA" --include="*.swift" | head -10
6.7 Data Collection Disclosure
grep -ri "Firebase.*Analytics\|Mixpanel\|Amplitude\|Segment" --include="*.swift" | head -10
grep -ri "Facebook\|Google\|Twitter\|TikTok" --include="*.swift" | head -10
Report findings as:
Legal (5.x) Issues:
- [ ] **[Confidence]** {Issue} (Guideline 5.X.X)
- Location: `path/file.swift:123`
- Problem: {Specific issue}
- Resolution: {Actionable fix}
Step 7: Build and Binary Verification
7.1 Check Xcode version requirement
xcodebuild -version
7.2 Verify code signing
codesign -vvv --deep --strict *.app 2>&1 | head -20
codesign -d --entitlements - *.app 2>&1 | head -30
security cms -D -i */embedded.mobileprovision 2>&1 | head -50
7.3 Validate Info.plist
plutil -lint */Info.plist
grep "ITSAppUsesNonExemptEncryption" */Info.plist
7.4 Check architectures
lipo -info *.app/* 2>/dev/null | grep -v "is not an object" | head -10
7.5 Check app size constraints
du -sh *.app 2>/dev/null
7.6 Check APNs environment
grep "aps-environment" *.entitlements */embedded.mobileprovision 2>/dev/null
Report findings as:
Build/Binary Issues:
- [ ] **[Confidence]** {Issue}
- Problem: {Specific issue}
- Resolution: {Actionable fix}
Step 8: Third-Party SDK Compliance
8.1 Check for SDKs requiring privacy manifests
Apple's list of 86+ SDKs requiring privacy manifests includes:
Facebook/Meta:
- FBSDKCoreKit, FBSDKLoginKit, FBSDKShareKit, FBAEMKit
Firebase:
- FirebaseCore, FirebaseAuth, FirebaseCrashlytics, FirebaseMessaging, FirebaseAnalytics
Google:
- GoogleSignIn, GoogleUtilities, GTMSessionFetcher
Popular Libraries:
- Alamofire, AFNetworking, SDWebImage, Kingfisher, Lottie, SnapKit, RealmSwift, RxSwift
grep -E "Firebase|Facebook|Google|Alamofire|SDWebImage|Kingfisher|Lottie|SnapKit|Realm|RxSwift" Podfile 2>/dev/null
grep -E "firebase|facebook|google|alamofire|sdwebimage|kingfisher|lottie|snapkit|realm|rxswift" Package.swift 2>/dev/null
find Pods -name "PrivacyInfo.xcprivacy" 2>/dev/null | head -20
8.2 Generate privacy report
After archiving in Xcode:
Product → Archive → Right-click archive → Generate Privacy Report
Report findings as:
Third-Party SDK Issues:
- [ ] **[Confidence]** {SDK} missing privacy manifest
- Resolution: Update to version X.X.X or later
Step 9: Create GitHub Issue
See ./github-issue-template.md for the complete issue template with:
- Summary table by category
- Critical issues, warnings, recommendations sections
- Pre-submission checklist
- Confidence levels reference
Reference Documents
For detailed reference material, see:
./app-store-reference-tables.md — Confidence levels, rejection causes, policy timeline, binary limits, screenshot requirements, entitlements, and Required Reason API codes
./github-issue-template.md — GitHub issue template for audit results