# `MobDev.Device`
[🔗](https://github.com/genericjam/mob_dev/blob/main/lib/mob_dev/device.ex#L1)

Represents a connected or available device (physical or emulator/simulator).

# `t`

```elixir
@type t() :: %MobDev.Device{
  dist_port: term(),
  error: term(),
  host_ip: term(),
  name: term(),
  node: term(),
  platform: term(),
  serial: term(),
  status: term(),
  type: term(),
  version: term()
}
```

# `display_id`

```elixir
@spec display_id(t()) :: String.t()
```

Returns the short ID shown in `mix mob.devices` and accepted by `--device`.

- Android: the serial as-is (`emulator-5554`, `R5CW3089HVB`)
- iOS simulator: first 8 hex chars of the UDID, lowercased (`78354490`) —
  same prefix used in the node name
- iOS physical: full UDID

# `match_id?`

```elixir
@spec match_id?(t(), String.t()) :: boolean()
```

Returns true if `input` identifies this device.

Matches `display_id/1` or the full serial, case-insensitively. Used by
`mix mob.deploy --device <id>` to target a specific device.

# `node_name`

```elixir
@spec node_name(t()) :: atom()
```

Returns the Erlang node name atom for a device.

- Android (emulator/physical): `<app>_android_<serial-stub>@127.0.0.1`
  (unique per device — Mac's EPMD is shared via adb-reverse so the suffix
  is required to avoid collisions when two phones run the same app)
- iOS simulator: `<app>_ios_<8-char-udid>@127.0.0.1` (unique per simulator,
  matches the name mob_beam.m builds using SIMULATOR_UDID)
- iOS physical: `<app>_ios@<device-ip>` (mob_beam.m finds IP: USB > WiFi/LAN > Tailscale)

# `short_id`

```elixir
@spec short_id(String.t()) :: String.t()
```

Derives a short identifier from a serial for use in node names.

  iex> MobDev.Device.short_id("emulator-5554")
  "5554"

  iex> MobDev.Device.short_id("R5CW3089HVB")
  "HVBA"  # last 4 chars, uppercased

  iex> MobDev.Device.short_id("78354490-EF38-44D7-A437-DD941C20524D")
  "524D"

# `summary`

```elixir
@spec summary(t()) :: String.t()
```

Human-readable one-line summary.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
