I am integrating Google Maps SDK for iOS into my Kotlin Multiplatform (KMP) project. Earlier I was using CocoaPods and everything was working. Now I migrated to Swift Package Manager (SPM) and removed Pod integration from my project.
I added GoogleMaps via SPM in Xcode like this:
https://github.com/googlemaps/ios-maps-sdk
❗ Problem
In my shared KMP module (iosMain), Google Maps symbols are NOT recognized unless I create a .def file and configure a manual cinterop. For example, without .def, this line fails in iosMain but the code works in XCode, I can build the app:
import platform.GoogleMaps.GMSMapView // <- Unresolved
So I had to manually add this in build.gradle.kts:
iosTarget().compilations.getByName("main") {
cinterops.create("GoogleMaps") {
defFile("src/iosMain/kotlin/org/example/project/GoogleMaps.def")
}
}
And I had to create this GoogleMaps.def file:
language = Objective-C
headers = <GoogleMaps/GoogleMaps.h>
linkerOpts = -framework GoogleMaps -ObjC
Now it works, but my question is:
Question
- If I am already using Swift Package Manager to add GoogleMaps to my iOS app, why do I still need a cinterop .def file in Kotlin Multiplatform to access Google Maps from iosMain?
- Is there a way to consume an SPM dependency directly in Kotlin Multiplatform without manually writing .def and cinterop config?
What I expect
- Use SPM only (no CocoaPods)
- Avoid .def + manual cinterop
- Import Google Maps directly in iosMain