IMPORTANT CAVEAT: This application is provided solely for training and pedagogical purposes; its information is not guaranteed for accuracy and must not be used for operational decision-making. Always rely on the official Aircraft Flight Manual (AFM) and approved checklists when operating an aircraft.
NOTE: This app has been entirely vibe coded. If you hate that, feel free to close your browser window in disgust and not use it.
An iPad-first application for students and licensed pilots. Works on both iPhone and iPad. This app guides pilots through all checklists during a flight, from preflight to shutdown, while recording GPS tracks and flight data.
New in 4.0 — the biggest overhaul yet: a ground-up, iPad-first redesign with a cockpit-style in-flight HUD, a selectable theme engine (auto / day / sunlight / night), a map-first flight-plan builder, Companion mode (use an iPhone as a synced second screen for your iPad over Wi-Fi Aware, iOS 26+), an accessibility pass, and French localization of the main app UI (the widget, Live Activity, Watch app and the iOS permission prompts remain English-only). See the 4.0.0 release notes.
AéroCheck is open source under the MIT License. The app includes:
-
Free aircraft (bundled with the app):
- WT9 Dynamic (F-HVXA)
-
Premium aircraft (requires AeroCheck Pro subscription):
- 13 aircraft ids (15 registrations) delivered via the AeroCheck API — Piper (Archer II, Warrior II, Cadet, Dakota II, Saratoga II, Super Cub, L4), Robin DR400 (two variants) & DR401, CAP10-C, Pipistrel VELIS Electro and Sportcruiser PS-28. Aircraft with several tails are selectable per registration.
- Sourced from three Swiss flying clubs (Groupe de Vol à Moteur de Porrentruy, Lausanne Aéroclub, and Groupe de Vol à Moteur Neuchâtel)
- Automatic updates when checklists change
- Offline access after initial download
- Monthly: Access to all premium aircraft checklists
- Yearly: Same access with a 30% discount
All subscription payments are handled securely through the Apple App Store. See the API Server for self-hosting options.
Free (bundled)
- F-HVXA - Aerospool WT9 Dynamic - Free
Premium (AeroCheck Pro) — 13 aircraft ids / 15 registrations delivered via the API:
| Registration | Aircraft | Club |
|---|---|---|
| HB-PFA | Piper Archer II PA-28-181 | GVMP Porrentruy |
| F-HPSA | Sportcruiser PS-28 | GVMP Porrentruy |
| HB-PNL | Piper PA28-161 Warrior II | Lausanne Aéroclub |
| HB-OJI | PA28-161 Piper Cadet | Lausanne Aéroclub |
| HB-PMP | Piper PA28-236 Dakota II | Lausanne Aéroclub |
| HB-PJE | Piper PA32R-301 Saratoga II | Lausanne Aéroclub |
| HB-ORV | Piper PA18-150 Super Cub | Lausanne Aéroclub |
| HB-OKN | Piper L4 | Lausanne Aéroclub |
| HB-KFD | Robin DR400/140B | Lausanne Aéroclub |
| HB-KFI | Robin DR400/140B | Lausanne Aéroclub |
| HB-KOJ | Robin DR401/140B | Lausanne Aéroclub |
| HB-SAX | CAP10-C | Lausanne Aéroclub |
| HB-SYI | Pipistrel VELIS Electro SW128 | Lausanne Aéroclub |
| HB-KFO | Robin DR400/140B | GVMN Neuchâtel |
| HB-KFP | Robin DR400/140B | GVMN Neuchâtel |
Checklists, speeds and limits adapt automatically to the selected aircraft. Some aircraft are French- or English-only; most ship in both languages.
- WT9 Dynamic bundled free, additional aircraft via AeroCheck Pro subscription
- All 16 flight phases from official checklists
- Aircraft selection in Settings - checklists, speeds, and limits adapt automatically
- Checklists displayed exactly as in the official documentation
- Easy navigation between phases
- Quick phase selector for jumping to any checklist
- Speed reference card with aircraft-specific speeds always accessible
- Step-by-Step Highlighting: Items highlighted one at a time; tap anywhere in the checklist area to advance
- Smart completion: When all items are checked, the NEXT button pulses to draw attention
- Learning Mode: Toggle to show all checks for studying, or hide memorizable checks to test memory
- Circuit Mode: Streamlined workflow for pattern training - skips irrelevant phases (Cruise, Descent) and tracks full-stop landings
- Full-screen map with real-time aircraft position and track
- Multiple map layers:
- Apple Maps (Standard and Satellite)
- Swiss ICAO Chart (1:500,000) from SwissTopo
- Segelflugkarte (1:300,000) - seamless switch at higher zoom
- Swiss Landeskarten (national map)
- SWISSIMAGE (aerial imagery)
- Two-row bottom bar with the live instrument readout (speed, altitude, heading, time) and a centered VFR leg chronometer
- Expandable flight-plan sheet: pull up the active route to see leg-by-leg timing (FROM → TO), distances and estimated times; go back a leg, or mark the current waypoint
- Ground-track trend vector: a projected track line with 1/2/5-minute graduations
- FREDA cruise-check reminder during the cruise phase
- FREQ panel (
CURRENT / NEXT / EMERGENCY): nearby controlled-airspace and area frequencies organised by where you are and where you're heading (OpenAIP worldwide; OurAirports TWR fallback) - GPS status card, scale bar with accurate distance measurement
- Liquid Glass map controls on iOS 26 (material fallback on iOS 17)
- Offline maps: Download Swiss ICAO Chart (~100 MB) and/or Segelflugkarte (~150 MB) for offline navigation
- Build routes directly on the map: drag a waypoint to move it, drag the route line to insert one, and release near an airfield to auto-snap (name and frequency filled in automatically)
- Smart "cheapest insertion" places a dropped waypoint into the leg that adds the least detour
- From → To bar and route thumbnails on the plan list, with one-tap Activate
- Interactive route profile: a terrain silhouette with your planned-altitude line — drag a point to set its altitude, hold to add one
- On-route airspace conflicts and terrain-clearance warnings update live as you reshape the route. When a ceiling/floor is given as AGL/FL or a leg has no planned altitude, the warning is flagged "verify vertical separation" rather than implying you're clear; a green "no conflicts" only shows when airspace data is actually loaded
- GPX route export for Dynon/Garmin avionics
- Automatic GPS recording during flights
- Configurable recording interval (1-30 seconds)
- Background location tracking support
- Track visualization on map
- GPS failure flags on speed and altitude indicators when signal is lost or degraded
- "Always" permission prompt: If only "While Using" access is granted, the app offers to upgrade to "Always" when a flight starts, so the track keeps recording when the screen locks or you switch apps
- In-flight GPS-lost banner: A warning appears if the position stops updating (no fix for >90 s) or background tracking is limited — a silent GPS dropout is never mistaken for a valid reading
- Real-time GPS ground speed display during flight phases
- Displays "GND SPD" (ground speed) with "kt" (knots) unit
- Color-coded feedback:
- Green: Speed within 5 kt of target
- Orange: Speed outside ±5 kt range
- Flashing Red/White: Below stall speed (aircraft-specific: 42 kt for WT9, 53 kt for PA-28)
- Target speed guidance based on current flight phase and aircraft type
- Arrow indicators showing speed trend (up/down/on target)
- Automatically hidden during ground operations (taxi, parking)
- Honest provenance: The indicator shows GPS ground speed ("GND SPD") by default — not true airspeed — so the stall warning is an awareness aid, never a replacement for the aircraft's airspeed indicator
- Optional aural stall alert: An audible warning below stall speed (off by default; see Estimated Airspeed)
- Optional feature to display estimated indicated airspeed (IAS) calculated from GPS ground speed and wind data
- Uses real-time mean wind from MeteoSwiss automatic weather stations (steady wind, not peak gusts)
- Finds nearest weather station and applies wind correction to ground speed
- Clearly marked as estimated: shows "EST. IAS" with a
~prefix (e.g.~62) so a derived value is never confused with a measured one - Stale wind aged out: wind readings that are too old are discarded rather than used, so an outdated observation can't silently drive the estimate
- Optional aural stall alert: once enabled, an "Aural stall alert" toggle (off by default) plays an audible warning below stall speed
- Important limitations:
- Only works within Switzerland (with ~5 NM margin at borders)
- Requires constant cellular connection
- Can be highly inaccurate - always rely on aircraft's onboard airspeed indicator
- Disabled by default; enable in Settings with mandatory safety warning acknowledgment
- Real-time GPS altitude display (feet MSL)
- Light blue background for easy visibility
- Displayed alongside speed indicator during flight phases
- Complete flight history with all parameters
- Custom flight names: Name your flights for easy identification (e.g., "Circuits 2 (F-HVXA)")
- Flight duration (engine start to shutdown)
- Distance travelled in kilometers
- All times recorded chronologically:
- Session Start
- Engine Start
- Take-off (Line Up +2 min)
- Landing (auto-detected)
- Engine Shutdown
- Session End
- GPS track visualization on map
- Altitude profile graph: Time-based altitude chart with flight event markers (Engine Start, Take-off, Landing, Shutdown)
- Go-arounds and touch-and-goes: Detected and displayed on altitude profile
- Notes for each flight
- Flight sharing: Generate shareable image cards with flight summary and map
- Export flights to GPX format (standard GPS track format)
- Export flights to JSON format (includes all timing data)
- Export all flights: Export entire flight log as a ZIP archive
- All timing data included (start, engine, takeoff, landing, shutdown, stop)
- Distance calculation included in exports
- Bulk import: Import multiple flights from ZIP archives
- Import GPX or JSON files from other sources
- Compatible with most flight tracking software
- Share flights via any iOS sharing method
- Redesigned in-flight HUD: the current checklist item is the hero; past and future steps recede. A cockpit instrument strip shows live speed, altitude, heading and vertical speed with a color-blind-safe on-target bar, plus stall and instrument-failure annunciations
- Tappable phase bar: jump forward and back through the 16 phases from a single segmented bar
- One-tap reference panels: V-Speeds, GPS status and departure/approach briefings open as a docked panel on iPad or a bottom drawer on iPhone
- Hold-to-confirm events: Go-Around, Touch-and-Go and Full-Stop sit behind a deliberate hold, with a brief undo
- Selectable theme engine — choose Auto / Day / Sunlight / Night; Auto follows the system appearance. Tuned for glare, dusk and night cockpits
- Aviation-inspired palette (gold, blue, green); large, high-contrast buttons and readable text; screen stays on during flights
- Adaptive, iPad-first layout: two-column landscape and reflowed portrait across Home, Flight, Navigation, Flight Log and Settings
- Phase completion tracking with color-coded indicators:
- Green dot: Phase completed (pressed NEXT)
- Orange dot: Phase skipped (jumped ahead without NEXT)
- Red dot: Phase skipped with missing action (e.g., Engine Start button not pressed)
- Gold dot: Current active phase
- VoiceOver labels, values and custom actions across the redesigned screens
- Dynamic Type on the ground-use screens (planning, settings, onboarding, paywall). The in-flight
HUD instruments keep fixed sizes on purpose — a readout scanned at a glance from a fixed distance
must not reflow — and expose
accessibilityShowsLargeContentViewerinstead, so a long press gives a large rendition without changing the instrument's geometry. - Contrast and touch targets follow Apple's current guidance (44x44 pt recommended, 28x28 pt minimum). Not independently audited; the sunlight/night palettes have not been measured on device.
- Reduce Motion support
- Pair an iPhone as a synced second screen that mirrors your iPad's live flight data over Wi-Fi Aware
- Pairing and status live under Settings → Companion
- Requires iOS 26 on both devices; on earlier iOS the feature is safely hidden
- Departure briefing modal with runway, routing, speeds, and emergency procedures
- Approach briefing modal with approach info, speeds, and missed approach
- Small widget: Quick-start buttons for the aircraft you own — the free F-HVXA plus any premium aircraft you've unlocked (unowned aircraft are never shown)
- Medium widget: Owned-aircraft quick start plus a Flight Log shortcut
- Deep links start a flight directly from the widget, going through the same checklist load, entitlement, location-permission, and GPS-tracking setup as the in-app START button
The app includes all 16 phases from the official checklists (same structure for both aircraft):
- Preflight Check (Page 1)
- Check Before Engine Start (Page 1)
- Engine Start (Page 1) - with "Engine Start" button
- Check After Engine Start (Page 2)
- Taxi Check (Page 2)
- Runup (Page 2)
- Check Before Departure (Page 2) - with "Ready for Line Up" button
- Line Up Check (Page 3)
- Climb Check (Page 3)
- Cruise Check (Page 3)
- Descent Check (Page 3)
- Approach Check (Page 3)
- Landing Check (Page 3)
- After Landing Check (Page 4)
- Engine Shutdown and Parking Check (Page 4) - with "Engine Shutdown" button
- At the Hangar (Page 4)
- iPad Air (11-inch) or larger recommended
- iPadOS 17.0 or later
- Any iPhone running iOS 17.0 or later
- Compact UI adapts to smaller screens
- Location services enabled
- Xcode 26 for building (ships the iOS 26 SDK required by Companion mode's
WiFiAwareimports)
- Clone or download this repository
- Provide an OpenAIP API key (optional but recommended):
cp Secrets.example.xcconfig Secrets.xcconfig # then paste your key from https://www.openaip.net/ (account → API keys)Secrets.xcconfigis gitignored. Without a key the app still builds and runs, but every OpenAIP request returns 401, so the airspace overlay, the FREQ panel's controlled-airspace entries and on-route airspace conflicts silently do nothing. - Open
AeroCheck.xcodeprojin Xcode 26+ - Select your development team in Signing & Capabilities
- Connect your iPhone/iPad or select a simulator
- Build and run (⌘R)
- In Xcode, select Product → Archive
- Follow the distribution wizard
- Choose Ad Hoc or App Store distribution
- Launch the app
- Select your aircraft in Settings if needed (the free WT9 Dynamic or any unlocked premium aircraft)
- Tap "START FLIGHT"
- GPS tracking begins automatically
- Follow the checklists in order
Premium aircraft: If the aircraft's checklist hasn't finished downloading (no connection or an inactive subscription), the app shows a "Checklist Not Ready" alert and refuses to start rather than launch with an incomplete or wrong checklist.
- Use "PREVIOUS" and "NEXT" buttons to navigate
- Tap the phase indicator to jump to any checklist
- Access speed reference anytime via "SPEEDS" button
- iPad: Side panel shows all phases, flight times, and current status
- iPhone: Tap the info button (i) to view flight info and phases in a sheet
- ENGINE START: Records the engine start time (shown on Engine Start phase)
- READY FOR LINE UP: Adds 2 minutes to current time for take-off time (shown on Check Before Departure phase)
- ENGINE SHUTDOWN: Records the engine shutdown time (shown on Engine Shutdown phase)
Tap on the briefing reminder text to open interactive briefings:
- Departure Briefing: LSZQ 25, wind, routing, speeds (Vr/Vx/Vy/Vbg), emergency procedures
- Approach Briefing: LSZQ 25, routing, approach speeds, missed approach, alternate
- Complete all checklists through "At the Hangar"
- Tap "END FLIGHT" on the final page
- Flight is saved with all data to the Flight Log
- Access via "FLIGHT LOG" on home screen
- View all recorded flights
- Tap any flight to see details and map
- Export flights to GPX or JSON format
- Add notes to flights
- Delete unwanted flights
AeroCheck/
├── AeroCheck.xcodeproj/
│ └── project.pbxproj
├── AeroCheck/
│ ├── AeroCheckApp.swift # App entry point
│ ├── Info.plist # App configuration
│ ├── Configuration.storekit # StoreKit config for testing
│ ├── Assets.xcassets/ # Images and colors
│ ├── Models/
│ │ ├── Aircraft.swift # Bundled aircraft types & metadata
│ │ ├── RemoteAircraft.swift # Remote/API aircraft models
│ │ ├── Flight.swift # Flight data model & GPX
│ │ ├── FlightPlan.swift # Flight plan models
│ │ ├── FlightPlanManager.swift # Flight plan state (CRUD, route)
│ │ ├── Checklist.swift # Checklist phases & items
│ │ ├── WT9ChecklistData.swift # WT9 Dynamic checklist data (bundled)
│ │ └── AppState.swift # App state management (facade-decomposed)
│ ├── Views/
│ │ ├── ContentView.swift # Root view
│ │ ├── HomeView.swift # Home (command rail + hero canvas + carousel)
│ │ ├── FlightView.swift # Active flight HUD
│ │ ├── FlightLogView.swift # Flight Log dashboard + detail
│ │ ├── NavigationView.swift # Full-screen navigation map + FREQ panel
│ │ ├── FlightPlanningView.swift # Flight-plan list (master/detail)
│ │ ├── FlightPlanMapBuilderView.swift # Map-first route builder
│ │ ├── CompanionPairingView.swift / CompanionFlightView.swift # Companion mode
│ │ ├── OnboardingView.swift # First-run onboarding
│ │ ├── SubscriptionView.swift # Subscription / paywall
│ │ ├── SettingsView.swift # Settings hub
│ │ └── Settings/ # 8 cockpit-styled settings sub-pages
│ ├── Components/
│ │ ├── DesignSystem.swift # Theme engine, tokens, styles, Settings kit
│ │ └── ChecklistView.swift # Checklist display
│ └── Services/
│ ├── LocationManager.swift # GPS tracking
│ ├── OfflineMapManager.swift # Offline ICAO/Segelflug chart caching
│ ├── ElevationService.swift # Terrain elevation (swisstopo CH + Open-Meteo)
│ ├── AirspaceAnalyzer.swift # On-route airspace/terrain conflict analysis
│ ├── WindDataService.swift # MeteoSwiss wind data (experimental)
│ ├── CompanionConnectivityManager.swift # Companion mode (Wi-Fi Aware, iOS 26+)
│ ├── SubscriptionManager.swift # StoreKit 2 subscription handling
│ └── AircraftDataService.swift # Remote aircraft checklist API
├── Shared/ # Shared with Watch / Widget / Companion targets
├── AeroCheckWidget/
│ └── AeroCheckWidget.swift # Home screen widgets
├── AeroCheckWatch/ # Apple Watch app
└── README.md
- AeroCheck-server: Cloudflare Workers API for subscription management and premium checklist delivery
- AeroCheck-checklists: Aircraft checklist data in JSON format
Exported flights use standard GPX 1.1 with AeroCheck metadata in a pc: namespace
(http://aerocheck.app/gpx/1). Every extension element is namespaced, and per-point speed/course
live inside <extensions> rather than as direct children of <trkpt> — plain GPX readers ignore
all of it and still see a valid track:
<?xml version="1.0" encoding="UTF-8"?>
<gpx version="1.1" creator="AéroCheck v4.3.0"
xmlns="http://www.topografix.com/GPX/1/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:pc="http://aerocheck.app/gpx/1">
<metadata>
<name>F-HVXA - Dec 1, 2025</name>
<time>2025-12-01T10:00:00Z</time>
</metadata>
<trk>
<name>F-HVXA</name>
<extensions>
<pc:flightData>
<pc:formatVersion>4</pc:formatVersion>
<pc:appVersion>4.3.0</pc:appVersion>
<pc:airplane>F-HVXA</pc:airplane>
<pc:engineStartTime>2025-12-01T10:00:00Z</pc:engineStartTime>
<pc:lineUpTime>2025-12-01T10:12:00Z</pc:lineUpTime>
<pc:landingTime>2025-12-01T11:05:00Z</pc:landingTime>
<pc:distanceKm>82.4</pc:distanceKm>
</pc:flightData>
</extensions>
<trkseg>
<trkpt lat="46.9481" lon="7.4474">
<ele>540</ele>
<time>2025-12-01T10:15:00Z</time>
<extensions>
<pc:speed>38.2</pc:speed>
<pc:course>271</pc:course>
</extensions>
</trkpt>
</trkseg>
</trk>
</gpx>JSON export wraps the flight in an envelope carrying metadata (app name/version, format version,
export date), the flight itself, and the flightPlan when one was active. The flight is not
at the top level — it sits under flight:
{
"metadata": {
"appName": "AéroCheck",
"appVersion": "4.3.0",
"formatVersion": 4,
"exportDate": "2025-12-01T12:00:00Z"
},
"flight": {
"id": "uuid-string",
"airplane": "F-HVXA",
"startTime": "2025-12-01T10:00:00Z",
"engineStartTime": "2025-12-01T10:00:00Z",
"landingTime": "2025-12-01T11:05:00Z",
"gpsTrack": [
{ "latitude": 46.9481, "longitude": 7.4474, "altitude": 540, "timestamp": "2025-12-01T10:15:00Z" }
]
},
"flightPlan": null
}In Settings:
- Aircraft in use: Select your aircraft (the free WT9 Dynamic or any unlocked premium aircraft) - this changes checklists, speeds, and stall warnings
- Theme: Auto / Day / Sunlight / Night cockpit theme (Auto follows the system appearance)
- Companion: Pair an iPhone as a synced second screen for your iPad (iOS 26+)
- GPS Recording Interval: 1-30 seconds between points
- Show Estimated Airspeed (Experimental): Display estimated IAS calculated from GPS ground speed and MeteoSwiss mean-wind data. Estimated values are shown as "EST. IAS" with a
~prefix so they're never mistaken for measured airspeed. Only works in Switzerland with cellular connection. Shows safety warning before enabling. - Aural Stall Alert (Experimental): Revealed once Estimated Airspeed is enabled. Plays an audible warning below the aircraft's stall speed. Off by default.
- Keep Screen On: Prevents display sleep during use
- Always Use UTC Times: Display all times in UTC with a (UTC) suffix
- Force ICAO Chart Layer: Keep ICAO Chart (1:500,000) at all zoom levels instead of switching to Segelflugkarte
- Offline Mode: Use only cached charts for navigation (requires download)
- Step-by-Step Highlighting: Highlights checklist items one at a time; tap anywhere to advance to the next item (auto-scrolls if needed)
- Learning Mode (show all checks): When OFF (default), memorizable checks are hidden to test your memory. When ON, all checks are visible for studying. Hidden phases vary by aircraft
- Circuit Mode: Enable for pattern training - skips Cruise and Descent phases, adds FULL STOP button for tracking landings
Quick access to all important speeds (KIAS). The SPEEDS modal shows aircraft-specific values:
| Speed | Value | Description |
|---|---|---|
| Vso | 33 | Stall (flaps down) |
| Vs | 42 | Stall (clean) |
| Vr | 40 | Rotation |
| Vx | 55 | Best angle |
| Vy | 70 | Best rate of climb |
| Vcc | 85 | Cruise climb |
| Vfe | 76 | Flaps extension |
| Vbg | 70 | Best glide |
Max crosswind: TO 14 kt / LDG 16 kt
| Speed | Value | Description |
|---|---|---|
| Vso | 47 | Stall (flaps down) |
| Vs | 53 | Stall (clean) |
| Vr | 53 | Rotation |
| Vx | 64 | Best angle |
| Vy | 76 | Best rate of climb |
| Vcc | 87 | Cruise climb |
| Vfe | 103 | Flaps extension |
| Vbg | 76 | Best glide |
Max crosswind: 17 kt
Target speeds vary by aircraft. Examples for WT9:
| Phase | Target | Notes |
|---|---|---|
| Climb | 70 | Vy - best rate of climb |
| Cruise | 85 | Vcc - cruise climb/cruise |
| Descent | 70 | Vbg - best glide |
| Approach | 70 | Initial approach, clean |
| Landing | 60 | Final approach, F2 |
These mirror
targetSpeedsin the bundled WT9 checklist. If you change one, change the other — the two drifted apart once already and this table published pre-2.1e values for months, including a climb target labelled Vx when the app targets Vy.
Note: Speed indicator is hidden during ground operations (taxi, runup, parking)
- WT9 F-HVXA Checklist v2.1e from Groupe de Vol à Moteur de Porrentruy (Aeroclub du Jura GVMP)
- Premium checklists from Groupe de Vol à Moteur de Porrentruy and Lausanne Aéroclub (e.g. PA-28-181 HB-PFA v2.0e)
- SPHAIR Bases et procédures
scripts/run-tests.sh # full suite (~390 tests)
scripts/run-tests.sh "iPhone 17" # a different simulator
scripts/run-tests.sh "" ObstacleTests # one test classThe script wraps xcodebuild test -scheme AeroCheckTests with a preflight cleanup and a stall
watchdog. Two details cost time if you meet them cold:
- Tests live on the
AeroCheckTestsscheme. The app scheme isAéroCheck(with the accent) and has no test action, so a plain build never compiles the tests. - If a run hangs with zero test cases started, the build service has wedged — not the harness.
killall SWBBuildService XCBBuildServiceand retry; the script's preflight does this for you.
The app includes a Configuration.storekit file for testing subscriptions locally:
- Open the project in Xcode
- Edit the scheme (Product > Scheme > Edit Scheme)
- Under Run > Options, set StoreKit Configuration to
Configuration.storekit - Run the app to test subscription flows without real purchases
For testing against the development server:
- Run the server locally with Wrangler:
cd ../AeroCheck-server && npm run dev - Point the app at it by setting
API_BASE_URLinSecrets.xcconfig:There is no URL to edit inAPI_BASE_URL = http://localhost:8787SubscriptionManager.swift— it takesAPIConfig.baseURL, which is resolved from theAPIBaseURLInfo.plist key fed by that build setting. Editing the service would also missAircraftDataService, which resolves the same way.APIConfigallowslocalhost/127.0.0.1over plain HTTP for exactly this. - Test subscription verification and checklist fetching
- All flight data stored locally on device
- Your flight log, tracks and settings are never uploaded to AeroCheck's servers. Flights and settings sync only through your own iCloud account (CloudKit private database).
- Terrain profiles send route coordinates to a third party. When you generate a flight-plan or
flight-share terrain profile, the route — for a recorded flight, a sampled version of the actual
GPS track — is sent to swisstopo (
api3.geo.admin.ch) inside Switzerland or Open-Meteo (api.open-meteo.com) elsewhere, to look up ground elevation. Coordinates are rounded to roughly 100 m before they leave the device, and nothing identifying you is attached. No terrain profile means no transmission. - Map, airspace and airport data are fetched by area, not by your position.
- Checklist data cached locally after initial download
- Export only when explicitly requested by user
AéroCheck displays third-party geographic, aeronautical and weather data. These sources require visible attribution (shown in-app on the navigation map's layer panel) and their terms govern your use:
| Data | Source | Attribution |
|---|---|---|
| ICAO / Segelflug / Landeskarte / SwissImage chart tiles | swisstopo / BAZL (geo.admin.ch) | © swisstopo / BAZL |
| Terrain elevation (Switzerland) | swisstopo profile API | © swisstopo |
| Terrain elevation (worldwide) | Open-Meteo elevation API | Elevation: Open-Meteo |
| Wind (experimental, Switzerland) | MeteoSwiss Open Data (geo.admin.ch) | © MeteoSwiss |
| Airspace / airports | OpenAIP | Aeronautical data © OpenAIP contributors |
| Airport / runway / frequency data | OurAirports (public domain) | OurAirports |
Offline chart caching: the offline ICAO/Segelflug chart download is a bulk extraction of BAZL aeronautical chart products. Shipping that feature requires an explicit licence/agreement with swisstopo/BAZL (tracked separately as SEC-09); until then it is a release blocker for the offline-cache feature.
The app code is MIT-licensed; premium checklist content is proprietary. Third-party data remains under its providers' respective licences.
The app is provided as-is and support is not guaranteed. In case of issues, feel free to open an issue on GitHub.
Safe flying!