A unified mapping library that provides a common API for multiple map providers including Google Maps, Mapbox, MapKit, ArcGIS, and MapLibre. Write once, deploy across all major mapping platforms.
- Multi-Provider Support: Seamlessly switch between Google Maps, Mapbox, MapKit, ArcGIS, and MapLibre with a single API
- Unified Interface: Common abstractions for markers, circles, polylines, polygons, ground overlays, heatmaps, and marker clustering
- SwiftUI: Modern iOS UI framework integration
| Module | Package | Product | Description |
|---|---|---|---|
ios-sdk-core |
mapconductor-core |
MapConductorCore |
Core abstractions, geometry types, overlay states |
ios-for-googlemaps |
mapconductor-for-googlemaps |
MapConductorForGoogleMaps |
Google Maps implementation |
ios-for-mapbox |
ios-for-mapbox |
MapConductorForMapbox |
Mapbox implementation |
ios-for-mapkit |
mapconductor-for-mapkit |
MapConductorForMapKit |
Apple MapKit implementation |
ios-for-arcgis(creating) |
mapconductor-for-arcgis |
MapConductorForArcGIS |
ArcGIS implementation |
ios-for-maplibre |
mapconductor-for-maplibre |
MapConductorForMapLibre |
MapLibre implementation |
ios-heatmap |
mapconductor-heatmap |
MapConductorHeatmap |
Map-provider-agnostic heatmap overlay |
ios-marker-cluster |
mapconductor-marker-cluster |
MapConductorMarkerCluster |
Automatic marker clustering across all providers |
Add the required packages in Xcode (File → Add Package Dependencies) or in your Package.swift:
dependencies: [
.package(url: "https://github.com/MapConductor/ios-sdk-core", from: "1.0.0"),
.package(url: "https://github.com/MapConductor/ios-for-googlemaps", from: "1.0.0"), // or your chosen provider
],Then add the products to your target:
.target(
name: "YourApp",
dependencies: [
.product(name: "MapConductorCore", package: "ios-sdk-core"),
.product(name: "MapConductorForGoogleMaps", package: "ios-for-googlemaps"),
]
)import SwiftUI
import MapConductorCore
import MapConductorForGoogleMaps
struct ContentView: View {
@StateObject private var mapState = GoogleMapViewState(
cameraPosition: MapCameraPosition(
position: GeoPoint(latitude: 35.6762, longitude: 139.6503),
zoom: 12
)
)
var body: some View {
GoogleMapView(state: mapState) {
Marker(position: GeoPoint(latitude: 35.6762, longitude: 139.6503))
Circle(
center: GeoPoint(latitude: 35.6762, longitude: 139.6503),
radiusMeters: 500
)
}
}
}Simply change the state and view — all overlays work unchanged:
// Google Maps
GoogleMapView(state: googleMapState) { /* overlays */ }
// Mapbox
MapboxMapView(state: mapboxState) { /* overlays */ }
// Apple MapKit
MapKitMapView(state: mapKitState) { /* overlays */ }
// ArcGIS (still working on)
ArcGISMapView(state: arcgisState) { /* overlays */ }
// MapLibre
MapLibreMapView(state: maplibreState) { /* overlays */ }| Google Maps | Mapbox | MapKit | ArcGIS | MapLibre | |
|---|---|---|---|---|---|
| Map | ☑ | ☑ | ☑ | ☑ | ☑ |
| Marker | ☑ | ☑ | ☑ | ☑ | ☑ |
| Circle | ☑ | ☑ | ☑ | ☑ | ☑ |
| Polyline | ☑ | ☑ | ☑ | ☑ | ☑ |
| Polygon | ☑ | ☑ | ☑ | ☑ | ☑ |
| GroundImage | ☑ | ☑ | ☑ | ☑ | ☑ |
| Heatmap | ☑ | ☑ | ☑ | ☑ | ☑ |
| Marker Clustering | ☑ | ☑ | ☑ | ☑ | ☑ |
| RasterTileLayer | ☑ | ☑ | ☑ | ☑ | ☑ |
| VectorTileLayer | ☐ | ☐ | ☐ | ☐ | ☐ |
See samples/MapConductorSampleApp for a full-featured demo app showcasing all modules.