Skip to main content

iOS App Store Preflight Scanner

Know before
you submit

Scan your iOS project for App Store rejection risks. Catches privacy manifests, entitlements, Info.plist issues, and more.

npm install -g shiplint

Free and open source. Works with Xcode projects and Swift packages.

What ShipLint Checks

10 rules targeting the most common App Store rejection causes

Privacy Manifests

Required API declarations for iOS 17+

Entitlements

Validates capabilities match provisioning

Info.plist

Required keys, formats, and values

Usage Descriptions

Camera, location, photos, etc. strings

ATS Exceptions

App Transport Security audit

Sign in with Apple

SIWA compliance with third-party auth

URL Schemes

Deep link and custom scheme setup

Build Settings

Deployment target, architectures

SDK Signatures

Detects SDKs requiring declarations

Asset Validation

App icons, launch screens

How It Works

Three commands. That's it.

1

Install

$ npm install -g shiplint
2

Run

$ shiplint scan ./YourApp.xcodeproj
3

Fix issues before submitting

ShipLint outputs clear, actionable messages. Fix what's flagged, then ship with confidence.

Output Formats

--format text --format json --format sarif

For AI Coding Agents

Structured output for automated workflows. Parse, integrate, ship.

Quick Reference
# Install
npm install -g shiplint
# Scan (human-readable)
shiplint scan ./path/to/project
# Scan (JSON for parsing)
shiplint scan ./path/to/project --format json
# Exit codes: 0=pass, 1=errors found, 2=scan failed
.github/workflows/shiplint.yml
name: ShipLint
on: [push, pull_request]

jobs:
  lint:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm install -g shiplint
      - run: shiplint scan . --format sarif > results.sarif
      - uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: results.sarif
JSON Output Schema
{
  "version": "1.0.0",
  "project": "MyApp.xcodeproj",
  "summary": {
    "errors": 2,
    "warnings": 1,
    "passed": 7
  },
  "issues": [
    {
      "rule": "privacy-manifest",
      "severity": "error",
      "message": "...",
      "file": "Info.plist",
      "fix": "..."
    }
  ]
}

Agent Integration Tips

  • Use --format json for parsing
  • Check exit code before parsing output
  • Each issue includes a fix field with remediation
  • SARIF format for GitHub code scanning
  • Run in CI to catch issues before merge

Stop guessing. Start shipping.

Catch rejection risks before Apple does.

npm install -g shiplint
View on GitHub