Skip to main content

priv/mob_plugin.exs

%{
  name: :mob_location,
  mob_version: "~> 0.6",
  plugin_spec_version: 1,
  description: "Device location (GPS/network) — extracted from mob core in Wave 2",
  # A sample screen the host can navigate to by route (auto-listed by a home
  # that enumerates Mob.Plugins.screens/0). Pure-Elixir + hot-pushable; drop it
  # and this entry in a real app that builds its own UI.
  screens: [
    %{module: MobLocation.DemoScreen, default_route: "/mob_location/demo"}
  ],
  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."
    }
  }
}