Full-lifecycle Apple App Store review for iOS and iPadOS apps. Use for pre-submission audits, rejection diagnosis and Resolution Center replies, Guideline 4.3 spam or similarity recovery, human-craft and low-effort audits, App Review Notes, privacy manifests, Info.plist permission strings, subscriptions, Sign in with Apple, account deletion, UGC, third-party AI consent, TestFlight or App Store readiness, and vague requests such as "review my app" or "will Apple approve this" when an Xcode, Expo, React Native, or Flutter project is present. Produces evidence-tagged Markdown, JSON, and a self-contained visual HTML report, runs a read-only deterministic scan first, and only offers grouped fixes after the report.
97
97%
Does it follow best practices?
Impact
98%
2.08xAverage score across 4 eval scenarios
Low
Low-risk findings worth noting
Read this file for every repository audit. Framework configuration can be generated, merged, or split across files. Never assume one source file equals the submitted configuration.
Detect with:
*.xcodeproj/project.pbxproj*.xcworkspacePackage.swift, Podfile, or CartfileInspect:
PBXNativeTarget, including widgets and extensionsINFOPLIST_FILE and inline INFOPLIST_KEY_* settingsCODE_SIGN_ENTITLEMENTSPRODUCT_BUNDLE_IDENTIFIERIPHONEOS_DEPLOYMENT_TARGETPrivacyInfo.xcprivacy membership and contentsUse xcodebuild -showBuildSettings when Xcode is available and the project can be resolved safely. Static parsing of project.pbxproj cannot reproduce every inherited or conditional build setting.
Detect with package.json containing expo, plus one of app.json, app.config.js, app.config.ts, or app.config.json.
Inspect authored configuration:
expo.ios.infoPlistexpo.ios.entitlementsexpo.ios.bundleIdentifierexpo.ios.privacyManifests, when presentIf ios/ exists, inspect the generated Xcode project too. If it does not exist, label native-target, target-membership, merged-plist, and archive checks MANUAL CHECK.
When command execution is appropriate, npx expo config --type public --json can expose resolved public configuration. It still does not replace an archive inspection.
Detect with package.json containing react-native.
Inspect:
ios/*.xcodeproj or ios/*.xcworkspaceios/Podfile and Podfile.lockDo not flag React Native itself as a 4.3 risk. Shared framework code is not evidence of duplication by itself.
Detect with pubspec.yaml containing a flutter: section.
Inspect:
ios/Runner.xcodeproj and ios/Runner.xcworkspaceios/Runner/Info.plistios/Runner/*.entitlementsios/Runner/PrivacyInfo.xcprivacy and extension manifestsios/Podfile.lockDo not flag Flutter itself as a 4.3 risk. A framework false positive is a recovery hypothesis only when Apple's message and the app's provenance support it.
Generated files can be overwritten. When recommending a fix:
Do not patch a generated plist alone when an Expo config plugin, React Native setup script, or Flutter build step will overwrite it.
Treat every extension as a separate executable bundle for configuration review. Associate each target with:
If static parsing cannot establish target membership, report that limitation instead of assigning a blocker to a specific target.
An .ipa is a ZIP archive. Inspect it for:
Info.plist filesArchive evidence outranks repository guesses about what ships.