Location Service Manager for Kotlin Multiplatform Mobile iOS and android
- Super easy to use location capability in one interface
- Provides simple permission settings and management
- Dramatically reduce code to write
- Common interface available on KMM Shared
-
Android
ABCLocation .onPermissionUpdated(this) { isGranted -> println("onPermissionUpdated -> isGranted: $isGranted") } .onLocationUnavailable(this) { println("onLocationUnavailable") }
-
iOS
ABCLocation.Companion() .onPermissionUpdated(target: self) { isGranted -> print("onPermissionUpdated -> isGranted: \(isGranted)") } .onLocationUnavailable(target: self) { print("onLocationUnavailable") } .onAlwaysAllowsPermissionRequired(target: self) { print("onAlwaysAllowsPermissionRequired") }
-
Android
ABCLocation.currentLocation { data -> println("currentLocation -> data: $data") }
-
iOS
ABCLocation.Companion().currentLocation { data in print("currentLocation -> data: \(data)") }
-
Android
ABCLocation .onLocationUpdated(this) { data -> println("onLocationUpdated -> data: $data") } .startLocationUpdating()
-
iOS
ABCLocation.Companion() .onLocationUpdated(target: self) { data in print("onLocationUpdated -> data: \(data)") } .startLocationUpdating()
-
Android
ABCLocation.stopLocationUpdating()
-
iOS
ABCLocation.Companion().stopLocationUpdating()
Add below gradle settings into your KMP (Kotlin Multiplatform Project)
plugins {
id("com.android.library")
kotlin("multiplatform")
}
val abcLocationLib = "com.linecorp.abc:kmm-location:0.2.4"
kotlin {
android()
ios {
binaries
.filterIsInstance<Framework>()
.forEach {
it.baseName = "shared"
it.transitiveExport = true
it.export(abcLocationLib)
}
}
sourceSets {
val commonMain by getting {
dependencies {
implementation(abcLocationLib)
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
val androidMain by getting {
dependencies {
implementation("com.google.android.material:material:1.2.1")
implementation(abcLocationLib)
}
}
val androidTest by getting {
dependencies {
implementation(kotlin("test-junit"))
implementation("junit:junit:4.13.2")
implementation("androidx.test:core:1.0.0")
implementation("androidx.test:runner:1.1.0")
implementation("org.robolectric:robolectric:4.2")
}
}
val iosMain by getting {
dependencies {
implementation(abcLocationLib)
}
}
val iosTest by getting
}
}
Android
- You can use right now without other settings.
iOS
- Create
Podfile
with below setting in your project root.
use_frameworks!
platform :ios, '10.0'
install! 'cocoapods', :deterministic_uuids => false
target 'iosApp' do
pod 'shared', :path => '../shared/'
end
- Run command
pod install
on the terminal
- iOS
- Deployment Target 10.0 or higher
- Android
- minSdkVersion 21