Warum wir Protomaps und MapLibre in die App stecken — und nicht Apple Maps
Der erste Skyty-Prototyp nutzte Apple MapKit. Sah toll aus. Hörte auf zu funktionieren, sobald das iPhone in den Flugmodus ging. Ich habe es auf einem 90-Minuten-Hop ZRH–LIS getestet, und die grauen Kacheln kamen irgendwo über den Pyrenäen. Prototyp weggeworfen, an einem Sonntag neu angefangen, Karten-Stack von Grund auf neu gebaut um zwei Open-Source-Projekte: Protomaps und MapLibre. Hier warum.
Der Haken bei Apple MapKit
MapKit ist Apples Karten-SDK — das, was Apple Maps antreibt. Als iOS-Entwickler kostet die Integration fast nichts, das Rendering ist wunderschön, und Gesten fühlen sich nativ an, weil sie nativ sind.
Das Problem: Apples Bedingungen verbieten das Cachen von MapKit-Tiles für die Offline-Nutzung. Wenn dein Netzwerk weg ist, zeigt MapKit dir, was es zufällig im Kurzzeit-Cache hat — und danach graue Kacheln. Es gibt keine Offline-API. Das ist eine bewusste Produktentscheidung — Apple Maps soll ein Connected-Erlebnis sein.
Für ein Tool, dessen ganze Botschaft “funktioniert ohne WLAN” lautet, war das ein Showstopper.
Was wir stattdessen brauchten
Drei Eigenschaften:
- Die ganze Karte in einer Datei, redistribuierbar, die wir im App-Store-Binary mitschicken können.
- Ein Renderer, der lokal läuft, ohne nach Hause zu telefonieren.
- Keine API-Keys, keine Per-Load-Gebühren, weil wir keine Abrechnungsbeziehung mit Karten-Anbietern für jeden User pflegen wollen.
Protomaps: die ganze Welt in einer Datei
Protomaps ist ein Open-Source-Format namens PMTiles. Der clevere Trick: statt Millionen einzelner Tile-Dateien (der traditionelle Weg) liegt die gesamte Vektor-Tile-Pyramide des Planeten in einer Datei mit einem winzigen Header, der dir sagt, wo jedes Tile beginnt. Random-Access-Reads sind O(1).
Der vollständige Protomaps-Build von OpenStreetMap wiegt ~120 GB (Zoom 0–15). Für Skyty extrahieren wir nur Zoom 0–6 — genug Detail für Reiseflughöhe — was sich auf ~46 MB komprimiert. Das passt ins App-Store-Binary. Kein Download.
Lizenz: CC0 für die Tile-Schemata und Styles, ODbL (OpenStreetMap) für die Daten. Wir attributieren OSM in der App, fertig.
MapLibre Native: GPU-Rendering, lokal
MapLibre ist der Open-Source-Fork von Mapbox GL Native, entstanden 2020, als Mapbox Closed Source ging. Läuft auf iOS, Android und Embedded-Systemen. Liest Vektor-Tiles, rendert sie auf der GPU und unterstützt dieselbe Style-Spec (JSON), die Mapbox nutzt.
Für Skyty verweisen wir es auf unsere lokale PMTiles-Datei via Custom-URL-Schema (pmtiles://world.pmtiles), das wir zur Laufzeit in den On-Device-Pfad auflösen. Aus MapLibres Sicht ist es einfach eine weitere Tile-Quelle.
Lizenz: BSD-3-Clause. Frei in jedem Sinne.
Warum nicht einfach Mapbox?
Mapbox ist großartig, und wir haben es erwogen. Die Deal-Breaker:
- Es ist kommerziell — braucht einen API-Key pro User.
- Die Preisgrenze setzt bei ~50 000 Map-Loads pro Monat ein, was eine populäre App in einer Woche knackt.
- Es erwartet weiterhin standardmäßig eine Netzwerkverbindung; das Offline-SDK existiert, bringt aber erhebliche Komplexität und lizenzrechtliche Einschränkungen mit.
Protomaps + MapLibre geben uns dieselbe Render-Qualität ohne den operativen Ballast.
Was wir aufgegeben haben
- Hübsche Satellitenbilder out of the box. OpenStreetMap ist Vektor-Daten; für Satellitenansichten liefern wir ein separates Raster-Tile-Pack als optionalen Download.
- Apples nahtlose Integration mit Look Around, Suche und 3D-Gebäuden. Keines davon funktioniert offline, also vermissen wir es für unseren Use Case nicht.
- Etwas Entwicklungs-Komfort. Apples Doku ist makellos; MapLibre Native iOS Doku weniger poliert. Trotzdem den Weg wert.
Das Aviation-Dark-Theme
Out of the Box bringt Protomaps mehrere Styles mit. Keiner davon traf den Cockpit-Display-Vibe, den wir wollten — also haben wir einen geforkt und neu aufgebaut. Das Ergebnis ist aviation-dark — dunkler Untergrund, glühende Ländergrenzen, weichblaue Städte, goldfarbene Flüsse, minimaler Straßen-Clutter bei niedrigen Zoom-Stufen. Es ist der Default in Skyty.
Wenn du die Style-Datei sehen willst — sie liegt im App-Bundle als aviation-dark.json. In jedem Texteditor öffenbar — es ist nur JSON.
Das große Bild
Die Wahl Protomaps + MapLibre erlaubt uns ein Versprechen, das niemand sonst in dieser Kategorie glaubwürdig abgeben kann: die Karte funktioniert immer, jedes Mal, für immer, ohne wiederkehrende Kosten und ohne Abhängigkeit davon, dass es uns morgen noch gibt. Selbst wenn Skyty morgen verschwindet, zeigt deine installierte Kopie weiterhin die Welt.
Das fühlte sich nach dem richtigen Trade-off an.