%{ name: :mob_location, mob_version: "~> 0.6", plugin_spec_version: 1, description: "Device location (GPS/network) — extracted from mob core in Wave 2", nifs: [ # iOS: Objective-C NIF driving CLLocationManager. lang: :objc -> compiled as # ObjC (.m) with -fobjc-arc; platform: :ios so it isn't pulled into the # Android build. %{module: :mob_location_nif, native_dir: "priv/native/ios", lang: :objc, platform: :ios}, # Android: zig NIF bridging to FusedLocationProviderClient via the Kotlin # MobLocationBridge. platform: :android so the iOS build skips it. %{module: :mob_location_nif, native_dir: "priv/native/jni", lang: :zig, platform: :android} ], permissions: [ # iOS handler self-registered at NIF load (mob_location_request_permission); # Android mapping supplied by MobLocationBridge implementing # MobPermissionProvider (auto-discovered at bootstrap). %{capability: :location, ios: %{handler: "mob_location_request_permission"}} ], android: %{ bridge_kt: "priv/native/android/MobLocationBridge.kt", bridge_class: "io.mob.location.MobLocationBridge", permissions: [ "android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_COARSE_LOCATION" ], gradle_deps: ["com.google.android.gms:play-services-location:21.0.1"] }, ios: %{ frameworks: ["CoreLocation"], plist_keys: %{ "NSLocationWhenInUseUsageDescription" => "Location is used to provide location-based features." } } }