Current section

Files

Jump to
mob_dev lib mix tasks mob adopt finalize.ex
Raw

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