Build map and location features for iOS 17+ using SwiftUI MapKit and modern CoreLocation async APIs.
Works with
Supports SwiftUI Map views with markers, annotations, polylines, polygons, and circles; includes camera positioning, style options, and interaction modes
Provides CLLocationUpdate.liveUpdates() async stream for location tracking and CLMonitor for geofencing with up to 20 monitored conditions
Covers geocoding (forward and reverse), local search with autocomplete via MKLocalSearchComple
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionmapkit-locationExecute the skills CLI command in your project's root directory to begin installation:
Fetches mapkit-location from dpearson2699/swift-ios-skills and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate mapkit-location. Access via /mapkit-location in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Create detailed user stories, acceptance criteria, and feature specs
Example
Generate user stories for 'password reset feature' with acceptance criteria, edge cases, and test scenarios
Reduce spec writing time by 50%, ensure comprehensive coverage
Research competitors, compare features, identify gaps
Example
Analyze 5 competitor products, create feature comparison matrix, suggest differentiation opportunities
Complete competitive research in 2 hours instead of 2 days
Evaluate features using frameworks (RICE, ICE, Kano) and create prioritized backlogs
Example
Score 20 feature ideas using RICE framework, generate prioritized roadmap with rationale
0
total installs
0
this week
372
GitHub stars
0
upvotes
Run in your terminal
0
installs
0
this week
372
stars
Build map-based and location-aware features targeting iOS 17+ with SwiftUI
MapKit and modern CoreLocation async APIs. Use Map with MapContentBuilder
for views, CLLocationUpdate.liveUpdates() for streaming location, and
CLMonitor for geofencing.
See references/mapkit-patterns.md for extended MapKit patterns and
references/corelocation-patterns.md for CoreLocation patterns.
MapKit.Map view with optional MapCameraPosition binding.Marker, Annotation, MapPolyline, MapPolygon, or MapCircle
inside the MapContentBuilder closure..mapStyle()..mapControls { }.selection: binding.NSLocationWhenInUseUsageDescription to Info.plist.CLServiceSession to manage authorization.CLLocationUpdate.liveUpdates() in a Task.MKLocalSearchCompleter for autocomplete suggestions.MKLocalSearch.Request for full results.MKDirections.Request with source and destination MKMapItem.transportType (.automobile, .walking, .transit, .cycling).MKDirections.calculate().MapPolyline(route.polyline).Run through the Review Checklist at the end of this file.
import MapKit
import SwiftUI
struct PlaceMap: View {
@State private var position: MapCameraPosition = .automatic
var body: some View {
Map(position: $position) {
Marker("Apple Park", coordinate: applePark)
Marker("Infinite Loop", systemImage: "building.2",
coordinate: infiniteLoop)
}
.mapStyle(.standard(elevation: .realistic))
.mapControls {
MapUserLocationButton()
MapCompass()
MapScaleView()
}
}
}
// Balloon marker -- simplest way to pin a location
Marker("Cafe", systemImage: "cup.and.saucer.fill", coordinate: cafeCoord)
.tint(.brown)
// Annotation -- custom SwiftUI view at a coordinate
Annotation("You", coordinate: userCoord, anchor: .bottom) {
Image(systemName: "figure.wave")
.padding(6)
.background(.blue.gradient, in: .circle)
.foregroundStyle(.white)
}
Map {
// Polyline from coordinates
MapPolyline(coordinates: routeCoords)
.stroke(.blue, lineWidth: 4)
// Polygon (area highlight)
MapPolygon(coordinates: parkBoundary)
.foregroundStyle(.green.opacity(0.3))
.stroke(.green, lineWidth: 2)
// Circle (radius around a point)
MapCircle(center: storeCoord, radius: 500)
.foregroundStyle(.red.opacity(0.15))
.stroke(.red, lineWidth: 1)
}
MapCameraPosition controls what the map displays. Bind it to let the user
interact and to programmatically move the camera.
// Center on a region
@State private var position: MapCameraPosition = .region(
MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: 37.334, longitude: -122.009),
span: MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05)
)
)
// Follow user location
@State private var position: MapCameraPosition = .userLocation(fallback: .automatic)
// Specific camera angle (3D perspective)
@State private var position: MapCameraPosition = .camera(
MapCamera(centerCoordinate: applePark, distance: 1000, heading: 90, pitch: 60)
)
// Frame specific items
position = .item(MKMapItem.forCurrentLocation())
position = .rect(MKMapRect(...))
.mapStyle(.standard) // Default road map
.mapStyle(.standard(elevation: .realistic, showsTraffic: true))
.mapStyle(.imagery) // Satellite
.mapStyle(.imagery(elevation: .realistic)) // 3D satellite
.mapStyle(.hybrid) // Satellite + labels
.mapStyle(.hybrid(elevation: .realistic, showsTraffic: true))
.mapInteractionModes(.all) // Default: pan, zoom, rotate, pitch
.mapInteractionModes(.pan) // Pan only
.mapInteractionModes([.pan, .zoom]) // Pan and zoom
.mapInteractionModes([]) // Static map (no interaction)
@State private var selectedMarker: MKMapItem?
Map(selection: $selectedMarker) {
ForEach(Make data-driven prioritization decisions faster
Draft PRDs, status updates, and stakeholder presentations
Example
Create executive summary of Q3 roadmap, monthly progress report, feature launch announcement
Save 3-5 hours/week on communication overhead
Prerequisites
Time Estimate
30-60 minutes to see productivity improvements
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use for user story writing, competitive research, roadmap prioritization, stakeholder communication, and PRD drafting. Best for reducing repetitive documentation and research work.
✗ Avoid when
Avoid for strategic product vision (requires deep customer empathy), pricing decisions (needs market and financial expertise), or when face-to-face customer discovery is more valuable than speed.
mattpocock/skills
parcadei/continuous-claude-v3
cursor/plugins
ailabs-393/ai-labs-claude-skills
pproenca/dot-skills
mattpocock/skills
mapkit-location has been reliable in day-to-day use. Documentation quality is above average for community skills.
Keeps context tight: mapkit-location is the kind of skill you can hand to a new teammate without a long onboarding doc.
I recommend mapkit-location for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
mapkit-location has been reliable in day-to-day use. Documentation quality is above average for community skills.
Keeps context tight: mapkit-location is the kind of skill you can hand to a new teammate without a long onboarding doc.
Solid pick for teams standardizing on skills: mapkit-location is focused, and the summary matches what you get after install.
mapkit-location is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
mapkit-location reduced setup friction for our internal harness; good balance of opinion and flexibility.
mapkit-location fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
mapkit-location is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
showing 1-10 of 44