MapKit & Location-Based App Development
Location-based app development for iPhone and Android: maps, search and routing, geofences, offline map regions and background location, built so the App Store approves the location use and the battery survives it. If you want to hire a MapKit developer directly, without going through a marketplace, you talk to the engineer who writes the code.
I am Puneetpal Arneja, a senior iOS and mobile developer with 13+ years of work in Swift, SwiftUI and UIKit, based in Dallas-Fort Worth. My portfolio includes four Go Outdoors state recreation apps built around parks, trails and maps, one of them with offline maps on Mapbox. This page covers what I build, how I choose between MapKit and Mapbox, and how the location side gets through review.
What I Build
- MapKit maps in SwiftUI and UIKit
- Mapbox maps when offline use or custom styling requires it
- Core Location tracking, from a single fix to a recorded route
- Geofences that trigger when a user arrives or leaves
- Offline map regions and trail data
- Place search, directions and route previews
- Battery-aware and background location updates
- Location permission flows and privacy labels
Who It Is For
- Outdoor, recreation and tourism apps used where signal is weak
- Store finders and service-area apps for retail and field businesses
- Apps that react when a user arrives somewhere: check-ins, reminders, offers
- Teams whose map screen is slow, drains battery or fails App Store review
- Products that need the same map on iOS and Android
Map Apps in My Portfolio
The Go Outdoors series is the map work in my portfolio. Each one is a state outdoor recreation app, and they are listed on the work page with their App Store links:
- Go Outdoors South Dakota: Outdoor recreation guide for South Dakota with offline maps, trail data, and licensing. Built for iOS and Android with Mapbox.
- Go Outdoors Kansas: Kansas outdoor recreation app covering parks, trails, and permitted activities.
- Go Outdoors Oklahoma: Oklahoma outdoor recreation app with detailed trail and park information.
- Go Outdoors North Carolina: North Carolina outdoor activities guide with interactive maps and weather integration.
The South Dakota app pairs offline maps with Mapbox, and that combination reflects the first question I ask on any location project: does the map have to work with no connection? Trail users are often out of signal exactly when they need the map.
MapKit in SwiftUI and UIKit
On iOS 17 and later, MapKit for SwiftUI gives a Map view with a MapCameraPosition binding, Marker and Annotation for pins, and polyline, polygon and circle overlays. For apps that support older iOS versions, or need a tile overlay, I use MKMapView from UIKit, wrapped for SwiftUI where the rest of the app is SwiftUI. Place search and directions come from the same framework through MKLocalSearch and MKDirections.
Mapbox for Offline and Custom Styling
Mapbox downloads an offline region as a style pack (the style, sprites and glyphs) plus a tile region for the geometry and zoom range, and the map then works with the radio off. Styles are designed once and shared by the iOS and Android SDKs, and your own data, such as thousands of trail segments, renders as a GPU-drawn layer. The cost is an access token to manage and billing per monthly active user above a free tier.
Core Location and Geofencing
On iOS 17 and later I use CLLocationUpdate.liveUpdates for streams of location updates and CLMonitor for conditions such as entering or leaving a region; older targets use CLLocationManager. Its region monitoring allows up to 20 regions per app, so an app with hundreds of points of interest monitors the nearest few and swaps them as the user moves.
Battery-Aware Updates
GPS is the most expensive radio on the phone, so I ask for the coarsest accuracy and lowest frequency the feature allows. A store finder needs one fix. A check-in needs a geofence. Only a recorded hike or a delivery run needs continuous updates, and those let the system pause updates when the user stops, through pausesLocationUpdatesAutomatically.
Background Location and App Store Review
Background location is where location apps get rejected. Apple’s App Store Review Guidelines set the rules: 2.5.4 allows background services only for their intended purposes, location included; 5.1.5 says to use Location Services only when directly relevant to the app’s features and to explain the purpose in the app; and 5.1.1 requires purpose strings that clearly and completely describe the use, and suggests an alternative, such as typing an address, for users who decline.
- Ask in context: request When In Use at the moment a feature needs it, through
requestWhenInUseAuthorization(), and request Always only after the user turns on a feature that runs in the background. - Purpose strings that say what happens:
NSLocationWhenInUseUsageDescriptionandNSLocationAlwaysAndWhenInUseUsageDescriptionname the feature and what the location is used for, in words a reviewer can match to the screen. - Approximate location handled: since iOS 14 a user can share approximate location only. The app works with it where it can, and asks for temporary full accuracy only for the feature that needs it.
- Background mode switched on deliberately: the location background mode and
allowsBackgroundLocationUpdatesare enabled for the session that needs them, and the reviewer notes explain how to reach that feature. - Privacy label that matches the SDKs: Apple’s privacy details include data collected by third-party SDKs, so a Mapbox app declares the SDK’s telemetry alongside its own location use.
MapKit or Mapbox: The Short Version
Choose MapKit when
- The map is used with a network connection
- Apple’s cartography fits the product
- The app is iOS only, or Android can have its own map
- You want no access token and no map vendor
Choose Mapbox when
- The map has to work with no signal
- The basemap needs your brand’s styling
- iOS and Android must show the same map
- You draw large datasets such as trail networks
MapKit can also go offline through MKTileOverlay with your own raster tiles, but then you own the tile source, the download manager and the licence. That is reasonable for a campus or a fairground, and a product in itself for a state park system.
How a Location Project Runs
- Requirements that decide the SDK: offline or online, iOS only or both platforms, how much custom data, and whether anything runs in the background.
- Permission and privacy plan: which authorization each feature needs, the purpose strings, and the fallback for users who say no.
- Build and field test: map screens, search, geofences and tracking, tested on devices outdoors, including with no signal.
- Review and release: reviewer notes for the location features, the privacy label, and a TestFlight round before submission.
Work is billed at my contract rate of $120–$180/hr, or quoted per milestone once the scope is agreed. For the whole app around the map, see iOS app development or, for one codebase on both stores, Flutter and React Native development. For an existing location app that is slow or keeps getting rejected, a mobile architecture audit is a good first step, and for map-heavy apps in Dallas-Fort Worth, the Dallas iOS developer page covers working onsite.
Frequently Asked Questions
Should my iOS app use MapKit or Mapbox?
Start with MapKit if the map only has to work with a network connection and Apple’s cartography suits the product. It ships with iOS, needs no access token, and includes search and directions. Move to Mapbox when the map has to work offline, when the basemap needs your own styling, or when the same map has to ship on Android. Switching later means rewriting every map screen, so I make this call with the requirements list in hand.
Can MapKit show maps offline?
Not with Apple’s own map data. MapKit has no public API for downloading Apple Maps tiles. The one offline path is MKTileOverlay with canReplaceMapContent set to true, which draws raster tiles you supply yourself, so you own the tile source, the download manager and the licensing. For a large area such as a park system, Mapbox offline tile regions are usually the cheaper route.
Will Apple approve an app that tracks location in the background?
Yes, when background location serves the feature the user sees. App Store Review Guideline 2.5.4 allows background services only for their intended purposes, location among them, and Guideline 5.1.5 says to use Location Services only when directly relevant to the app’s features and to explain the purpose in the app. I ask for When In Use first, request Always only when a feature needs it, and write purpose strings that say exactly what the location is used for.
How do you keep location tracking from draining the battery?
By asking for the least precise, least frequent updates the feature can live with. Geofences and the significant-change service wake the app only when something meaningful happens; continuous GPS runs only during an active session such as a recorded hike, and pauses when the user stops moving. I test on a device with real movement, because the simulator says nothing about battery.
How many geofences can an iOS app monitor?
Apple’s documentation for CLLocationManager region monitoring says an app can register up to 20 regions at a time. Apps with more points of interest than that monitor the nearest ones and swap the set as the user moves, refreshing it from a significant location change.
Do you build location apps for Android as well?
Yes. The South Dakota app in the Go Outdoors series runs on Mapbox for iOS and Android, and when both platforms matter I usually recommend one map vendor across them so styles and offline behaviour match. Contract work runs $120–$180/hr depending on scope.
Need a map that works where your users actually are?