6 Python lints + 8 integration wrappers. Catches the 5 most common Apple Review and CI rejection categories in ~20 seconds — while you still have time to fix them.
You submit. Apple rejects. You fix. You resubmit. Apple takes 24-48h to review. Each round-trip costs you 1-3 days and burns your review credits.
The worst part: most rejections fall into a handful of predictable categories. Signed integer overflow in accumulators. Bundle(for:) inside @testable import. Capability drift between Xcode and App Store Connect. These are all catchable — before you ever tag a build.
iOS Pre-Ship Lint Suite runs 6 targeted checks against your repo in ~20 seconds. It catches the 5 rejection categories that cause the most round-trips — so you fix them in your IDE, not after Apple's review cycle.
Works on any xcodegen-based iOS project. Fastlane match assumed but adaptable. Python 3.10+. Runs locally, in CI, or as a pre-commit hook.
| Lint | Catches | Offline? |
|---|---|---|
| swift_modular_lint.py | truncatingRemainder + signed % on accumulators | ✅ |
| test_bundle_audit.py | Bundle(for:) inside @testable import | ✅ |
| match_audit.py | Matchfile vs project.yml bundle ID drift | ✅ |
| asc_capability_consistency.py | Code uses HealthKit/iCloud/App Group not registered on Apple | ❌ |
| asc_health_check_one_shot.py | Submission readiness (build attach / locales / IAP) | ❌ |
| ios_preflight_master.py | All 5 above in one command | ❌ |
Lints marked ❌ require ASC API credentials (Key ID + Issuer ID + .p8 key file). Lints marked ✅ run fully offline — no network, no API key needed.
01_run_all_local.sh — local dev loop (run after every build)02_run_in_ci.sh — GitHub Actions CI gate03_lint_single_repo.py — programmatic JSON output for tooling04_run_swift_modular_with_filter.py — false-positive suppression05_run_asc_health_on_schedule.py — cron snapshot before submission06_pre_commit_hook.sh — git hook drop-in (block bad tags)07_verify_before_tag.sh — pre-tag readiness probe08_verify_i18n_kit_completeness.py — companion to the i18n template kitI shipped 4 iOS apps in 60 days using one Claude Code agent. The hardest part wasn't building — it was Apple's review cycle. Each rejection took 24-48h to hear back, and the fix was usually trivial once I knew what to look for.
I built these 6 lints after watching the same categories of rejections repeat across 4 different apps. They're the post-mortem of 60 days of Apple review cycles — encoded into scripts you can run in 20 seconds.
Built for iOS developers who ship fast and can't afford to burn review credits on preventable rejections.
Ship fast, burn fewer review credits. 5 rejections prevented = ~1 week saved.
CI gate prevents bad builds from reaching App Store review. Team-wide.
Claude Code / Cursor / Copilot can run these lints between "build done" and "tag pushed".
Gumroad processes payment. Download link arrives immediately.