Packages
mob_dev
0.2.7
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.37
0.3.35
0.3.34
0.3.33
0.3.28
0.3.26
0.3.23
0.3.21
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.18
0.2.17
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
Development tooling for the Mob mobile framework
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/mob.devices.ex
defmodule Mix.Tasks.Mob.Devices do
use Mix.Task
@shortdoc "List all connected Android and iOS devices"
@moduledoc """
Scans for connected Android devices (via adb) and iOS simulators
(via xcrun simctl) and prints their status.
mix mob.devices
Useful for diagnosing connection issues before running mix mob.connect.
## Under the hood
# Android
adb devices -l
# → parses serial numbers, device/emulator state, and manufacturer/model
# iOS (macOS only)
xcrun simctl list devices --json
# → filters for Booted simulators with device name and UDID
You can run either command directly to get the raw output. `mix mob.devices`
adds status hints (e.g. "enable Developer Mode", "check USB debugging prompt").
"""
alias MobDev.Discovery.{Android, IOS}
alias MobDev.Device
@impl Mix.Task
def run(_args) do
Mix.Task.run("app.config")
android = Android.list_devices()
ios = IOS.list_devices()
IO.puts("\n#{IO.ANSI.cyan()}Android#{IO.ANSI.reset()}")
if android == [] do
IO.puts(" (none — is adb installed? Any devices connected?)")
else
Enum.each(android, fn d ->
IO.puts(" " <> Device.summary(d))
print_android_hints(d)
end)
end
IO.puts("\n#{IO.ANSI.cyan()}iOS#{IO.ANSI.reset()}")
if ios == [] do
IO.puts(" (none — is a simulator running?)")
else
Enum.each(ios, fn d ->
IO.puts(" " <> Device.summary(d))
end)
end
IO.puts("")
end
defp print_android_hints(%{status: :unauthorized}) do
IO.puts(" #{IO.ANSI.yellow()}→ Check device for 'Allow USB debugging?' prompt#{IO.ANSI.reset()}")
end
defp print_android_hints(%{platform: :android, serial: serial}) do
case Android.developer_mode(serial) do
:disabled ->
IO.puts(" #{IO.ANSI.yellow()}→ Enable Developer Mode: Settings → About → tap Build Number 7×#{IO.ANSI.reset()}")
_ -> :ok
end
end
defp print_android_hints(_), do: :ok
end