Repository navigation
v1.0.6822
Geo v1.0
The first App Store release of Geo — an iPhone hiking instrument
with live altitude (GPS + barometer), atmospheric pressure, an
augmented-reality view that names the mountains around you, and
an Apple Watch companion with complications.
Highlights
- Live altitude, two ways. GPS and barometric altitude shown
side by side; pressure in kPa, mmHg, and atm; 30-day history. - AR Nature view. Point the camera at the horizon — every
visible peak within 5 km is labelled with name, elevation, and
distance. History points from your past routes appear too,
anchored to their real GPS coordinates. - Terrain-aware horizon. Instead of a flat sea-level circle,
the horizon line traces the real skyline computed from public
elevation data — bending up over distant ranges and dipping
into valleys. Falls back to a geometric horizon when offline. - Cardinal markers. N / NE / E / SE / S / SW / W / NW labels
welded to the horizon line as you turn. - iPhone Lock Screen and Home Screen widgets (small + medium),
refreshed in the background byBGTaskScheduler. - Apple Watch app + complications in all four shapes (corner,
circular, inline, rectangular). Standalone barometer on the
watch, paired with the iPhone overWatchConnectivity. - iCloud sync. Altitude and pressure history syncs across
your devices viaNSPersistentCloudKitContainer. End-to-end
private; no servers we run.
Privacy
- No accounts, no logins.
- No analytics, no advertising, no third-party SDKs.
NSPrivacyTracking = falsedeclared in every binary.- Outbound calls limited to Apple Maps, OpenStreetMap Overpass,
and Open-Elevation. Coordinates are rounded to ~100 m before
any third-party request, so the precise device location is
never disclosed.
Engineering notes
- Swift 6 strict-concurrency clean across all targets.
PrivacyInfo.xcprivacymanifests for main app, iPhone widget,
Watch app, and Watch widget — UserDefaults (CA92.1), file
timestamp (C617.1), system boot time (35F9.1), disk space
(E174.1).- Resilient CoreData store load: corrupted SQLite is deleted and
retried, with a final in-memory fallback. No morefatalError
on launch. - Background buffer + ring-buffer backfill: barometer samples
captured by the widget while the app is suspended are queued in
the App Group store and drained into CoreData on the next
launch via a background context, so the main thread never
contends with CloudKit's WAL checkpoint. - Unit tests covering the geometry primitives (geodesic
projection, apparent-altitude angle with Earth-curvature drop,
skyline max-angle picker, horizon distance, GPS↔ENU, peak ID
stability, legacy-formatInformationTokendecoding).
Compatibility
- iPhone with a barometric pressure sensor for full altitude
features (most iPhones since the 6 series). - iOS 17.0 or later.
- Apple Watch app: watchOS 10 or later. Optional.