Axiom Location

CharlesWiltgen/Axiom/axiom-cursor/skills/axiom-location

by CharlesWiltgen82c7feafae634a79b4336b3381289441886c122cNo license1.1K starsListed Oct 9, 2026Updated Oct 9, 2026Repository updated today

Use when implementing location services, maps, geofencing, or debugging location/MapKit issues. Covers Core Location, CLMonitor, MapKit, annotations, directions.

Instructions onlySoftware Development
AI-generated overview

Guides iOS developers through Core Location and MapKit implementation, API usage, and troubleshooting.

What it does
This skill routes location and mapping questions to six reference documents covering Core Location and MapKit. It provides decision trees for authorization strategy, monitoring approaches, accuracy selection, and choosing between SwiftUI Map and MKMapView. It also supplies API syntax references and diagnostic guidance for common failures such as missing location updates, geofence issues, and annotation problems. The deliverable is guidance and code patterns rather than generated files.
When to use it
Use it when implementing location services, maps, geofencing, or search and directions in an iOS app. It is also intended for debugging location or MapKit problems such as updates not arriving, authorization denials, or annotations not appearing.
Requirements
No scripts or packages; it is instructions only. It assumes an iOS development context with Core Location and MapKit, and references other skills such as axiom-performance, axiom-integration, axiom-data, and axiom-build.

Location & Maps

You MUST use this skill for ANY location services, mapping, geofencing, or Core Location / MapKit work.

Quick Reference

Symptom / TaskReference
Authorization strategy (When In Use vs Always)See skills/core-location.md
Monitoring approach (continuous, significant-change, CLMonitor)See skills/core-location.md
Accuracy selection, background locationSee skills/core-location.md
CLLocationUpdate, CLMonitor, CLServiceSession APIsSee skills/core-location-ref.md
Authorization API patterns, geofencing APISee skills/core-location-ref.md
Compass heading, heading reference body (headingBody)See skills/core-location-ref.md (Part 12)
Location updates never arriveSee skills/core-location-diag.md
Background location stops workingSee skills/core-location-diag.md
Authorization always denied, geofence failuresSee skills/core-location-diag.md
SwiftUI Map, annotations, markers, clusteringSee skills/mapkit.md
MKMapView vs SwiftUI Map decisionSee skills/mapkit.md
Search, directions, routingSee skills/mapkit.md
MapKit API: Marker, Annotation, MKLocalSearch, MKDirectionsSee skills/mapkit-ref.md
Look Around, MKMapSnapshotter, MKMapItemSee skills/mapkit-ref.md
Annotations not appearing, region jumpingSee skills/mapkit-diag.md
Clustering not working, search failuresSee skills/mapkit-diag.md
Overlay rendering, user location not showingSee skills/mapkit-diag.md

Decision Tree

dot
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)"];}
  1. Authorization strategy, monitoring approach, accuracy? → skills/core-location.md 1a. Need specific API syntax (CLLocationUpdate, CLMonitor, CLServiceSession)? → skills/core-location-ref.md 1b. Location not working? → skills/core-location-diag.md
  2. Adding a map, annotations, search, directions? → skills/mapkit.md 2a. Need specific MapKit API syntax (Marker, MKLocalSearch, MKDirections)? → skills/mapkit-ref.md 2b. Map display broken? → skills/mapkit-diag.md
  3. Location draining battery? → See axiom-performance (skills/energy.md)
  4. Background task scheduling for location? → See axiom-integration
  5. Privacy manifest for location? → See axiom-integration

Conflict Resolution

location vs axiom-performance: When location is draining battery:

  1. Try location FIRST — Excessive accuracy or continuous updates are the #1 cause. skills/core-location.md covers accuracy selection and monitoring strategy.
  2. Only use axiom-performance if location settings are already correct — Profile after ruling out obvious over-tracking.

location vs axiom-integration: When implementing background location:

  • Background location configuration (Info.plist, capabilities, CLServiceSession) → use location
  • BGTaskScheduler for periodic location processing → use axiom-integration

location vs axiom-data: When storing or syncing location data:

  • Getting location updates, geofencing → use location
  • Persisting location history, CloudKit sync → use axiom-data

location vs axiom-build: When location permissions fail in simulator:

  • Authorization dialogs, Info.plist keys → use location (skills/core-location-diag.md)
  • Simulator GPS simulation, simctl location → use axiom-build

Critical Patterns

Core Location (skills/core-location.md):

  • Authorization escalation strategy (When In Use first, Always later)
  • Monitoring decision tree (continuous vs significant-change vs CLMonitor)
  • Accuracy selection with battery impact
  • Background location configuration
  • Anti-patterns with time costs (premature Always authorization, unnecessary continuous updates)

Core Location API (skills/core-location-ref.md):

  • CLLocationUpdate AsyncSequence (iOS 17+)
  • CLMonitor condition-based geofencing (iOS 17+)
  • CLServiceSession declarative authorization (iOS 18+)
  • Authorization API patterns, background mode configuration

Core Location Diagnostics (skills/core-location-diag.md):

  • Location updates never arrive
  • Background location stops working
  • Authorization always denied
  • Geofence events not triggering
  • Location accuracy unexpectedly poor

MapKit (skills/mapkit.md):

  • SwiftUI Map vs MKMapView decision tree
  • Annotation patterns (Marker, custom Annotation)
  • Search (MKLocalSearch, autocomplete)
  • Directions and routing
  • Anti-patterns (annotations in view body, no view reuse, setRegion loops)

MapKit API (skills/mapkit-ref.md):

  • SwiftUI Map API (MapCameraPosition, content builders, controls)
  • MKMapView delegate patterns
  • MKLocalSearch, MKDirections
  • Look Around, MKMapSnapshotter
  • Clustering configuration

MapKit Diagnostics (skills/mapkit-diag.md):

  • Annotations not appearing (lat/lng swapped, missing delegate)
  • Map region jumping/looping (updateUIView guard)
  • Clustering not working (missing clusteringIdentifier)
  • Search returning no results (resultTypes, region bias)
  • Overlay rendering failures

Anti-Rationalization

ThoughtReality
"Just request Always authorization upfront"30-60% denial rate. Request When In Use first, escalate later. skills/core-location.md covers the strategy.
"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. skills/mapkit.md has the decision tree.
"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 @State or @Observable.
"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.

Example Invocations

User: "How do I request location permissions?" → Read: skills/core-location.md

User: "What's the CLLocationUpdate API?" → Read: skills/core-location-ref.md

User: "My location updates never arrive" → Read: skills/core-location-diag.md

User: "How do I add a map with pins?" → Read: skills/mapkit.md

User: "What's the SwiftUI Map API?" → Read: skills/mapkit-ref.md

User: "My annotations aren't showing on the map" → Read: skills/mapkit-diag.md

User: "How do I implement geofencing?" → Read: skills/core-location.md then skills/core-location-ref.md

User: "Location is draining battery" → Read: skills/core-location.md, then See axiom-performance (skills/energy.md)

User: "How do I add search to my map?" → Read: skills/mapkit.md then skills/mapkit-ref.md

Source and attribution

Source:CharlesWiltgen/Axiominaxiom-cursor/skills/axiom-locationat commit82c7fea

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal