Packages
mob_dev
0.6.21
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/adopt/finalize.ex
defmodule Mix.Tasks.Mob.Adopt.Finalize do
@shortdoc "Prints next-steps after mob.adopt"
@moduledoc """
Emits a post-install notice with the next steps for the user.
Performs no file changes — purely informational.
All orchestrator flags accepted but inert. (`--no-live-view` causes a
slight variation in the notice, mentioning the thin-client setup
instead of the standard LV bridge flow.)
"""
use Igniter.Mix.Task
@common_schema [
ios: :boolean,
android: :boolean,
local: :boolean,
python: :boolean,
host_url: :string,
live_view: :boolean
]
@common_defaults [ios: true, android: true, live_view: true]
@impl Igniter.Mix.Task
def info(_argv, _composing_task) do
%Igniter.Mix.Task.Info{
group: :mob,
example: "mix mob.adopt.finalize",
schema: @common_schema,
defaults: @common_defaults
}
end
@impl Igniter.Mix.Task
def igniter(igniter) do
live_view? = Keyword.get(igniter.args.options, :live_view, true)
host_url = igniter.args.options[:host_url]
Igniter.add_notice(igniter, notice(live_view?, host_url))
end
defp notice(live_view?, host_url) do
host_line =
if is_binary(host_url) and host_url != "" do
" - WebView URL set to `#{host_url}` via `config :mob, host_url:`.\n"
else
" - WebView URL defaults to `http://127.0.0.1:4000/`. Override with\n" <>
" `config :mob, host_url: \"https://your-app.example.com/\"`.\n"
end
flavour_line =
if live_view?,
do: " - `mob_app.ex` boots the host Phoenix on-device (LiveView bridge).\n",
else:
" - `mob_app.ex` is the thin-client variant (no on-device Phoenix).\n" <>
" Deploy your Phoenix server separately; WebView opens its URL.\n"
"""
Mob installed.
#{flavour_line}#{host_line}
1. Edit mob.exs with your local paths (mob_dir, elixir_lib).
2. Edit android/local.properties with your Android SDK path.
3. First-time setup (icon generation, OTP runtime, signing):
mix mob.install # mob_dev's first-run task — different from the
# `mix mob.adopt` you just ran. Runs once per device.
4. iOS only — if targeting a physical iPhone:
mix mob.provision # register bundle ID + provisioning profile
5. Deploy to device (first time builds the native APK/iOS app):
mix mob.deploy --native
"""
end
end