Loading...
Loading...
Use when implementing location services, maps, geofencing, or debugging location/MapKit issues. Covers Core Location, CLMonitor, MapKit, annotations, directions.
npx skill4agent add charleswiltgen/axiom axiom-location| Symptom / Task | Reference |
|---|---|
| Authorization strategy (When In Use vs Always) | See |
| Monitoring approach (continuous, significant-change, CLMonitor) | See |
| Accuracy selection, background location | See |
| CLLocationUpdate, CLMonitor, CLServiceSession APIs | See |
| Authorization API patterns, geofencing API | See |
| Location updates never arrive | See |
| Background location stops working | See |
| Authorization always denied, geofence failures | See |
| SwiftUI Map, annotations, markers, clustering | See |
| MKMapView vs SwiftUI Map decision | See |
| Search, directions, routing | See |
| MapKit API: Marker, Annotation, MKLocalSearch, MKDirections | See |
| Look Around, MKMapSnapshotter, MKMapItem | See |
| Annotations not appearing, region jumping | See |
| Clustering not working, search failures | See |
| Overlay rendering, user location not showing | See |
digraph location {
start [label="Location / Maps task" shape=ellipse];
domain [label="Core Location or MapKit?" shape=diamond];
cl_type [label="Need what?" shape=diamond];
mk_type [label="Need what?" shape=diamond];
start -> domain;
domain -> cl_type [label="Core Location"];
domain -> mk_type [label="MapKit / Maps"];
cl_type -> "skills/core-location.md" [label="authorization, monitoring\nstrategy, accuracy,\nbackground location"];
cl_type -> "skills/core-location-ref.md" [label="API syntax\n(CLLocationUpdate,\nCLMonitor, CLServiceSession)"];
cl_type -> "skills/core-location-diag.md" [label="something broken\n(no updates, denied,\ngeofence not firing)"];
mk_type -> "skills/mapkit.md" [label="patterns, decisions\n(SwiftUI Map vs MKMapView,\nannotations, search)"];
mk_type -> "skills/mapkit-ref.md" [label="API syntax\n(Marker, Annotation,\nMKLocalSearch, MKDirections)"];
mk_type -> "skills/mapkit-diag.md" [label="something broken\n(annotations missing,\nregion jumping, clustering)"];
}skills/core-location.mdskills/core-location-ref.mdskills/core-location-diag.mdskills/mapkit.mdskills/mapkit-ref.mdskills/mapkit-diag.mdskills/core-location.mdskills/core-location-diag.mdsimctl locationskills/core-location.mdskills/core-location-ref.mdskills/core-location-diag.mdskills/mapkit.mdskills/mapkit-ref.mdskills/mapkit-diag.md| Thought | Reality |
|---|---|
| "Just request Always authorization upfront" | 30-60% denial rate. Request When In Use first, escalate later. |
| "Continuous updates are fine for my use case" | Continuous updates drain battery even when the app doesn't need sub-second location. Use significant-change or CLMonitor. |
| "I'll use MKMapView, it's more flexible" | SwiftUI Map covers most use cases since iOS 17. MKMapView means UIViewRepresentable boilerplate. |
| "Annotations in the view body is fine for a few items" | Annotations recreate on every view update. Even 50 items cause hitches. Move to model with |
| "I know how geofencing works" | CLMonitor (iOS 17+) replaces legacy region monitoring with conditions. The API changed significantly. |
| "Background location just needs the capability" | It needs Info.plist keys, capability, CLServiceSession (iOS 18+), AND correct authorization level. Missing any one silently fails. |
| "I'll handle location errors later" | Authorization denial is not an error — it's the default state. Handle it from the start. |
skills/core-location.mdskills/core-location-ref.mdskills/core-location-diag.mdskills/mapkit.mdskills/mapkit-ref.mdskills/mapkit-diag.mdskills/core-location.mdskills/core-location-ref.mdskills/core-location.mdskills/mapkit.mdskills/mapkit-ref.md