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/native/ios.ex
defmodule Mix.Tasks.Mob.Adopt.Native.Ios do
@shortdoc "Generates the ios/ native tree from mob_new templates"
@moduledoc """
Walks `priv/templates/mob.new/ios/**/*.eex` (resolved from mob_new —
see `MobDev.Adopt.Generator`), renders each, and writes via
`Igniter.create_new_file/4` with `on_exists: :skip`. Then copies binary
static iOS assets via direct `File.copy!/2`.
Idempotent — `on_exists: :skip` for EEx-rendered files; `File.exists?`
pre-check for binaries.
With `--python`, also applies the Pythonx wiring (`{:pythonx, ...}` dep
in `mix.exs`, generates `lib/<app>/python_paths.ex`). iOS-only — Android
Python is intentionally out of scope. Mirrors `mix mob.enable pythonx`.
"""
use Igniter.Mix.Task
alias Igniter.Project.Application, as: ProjectApplication
alias Mix.Tasks.Mob.Adopt.Native.Android, as: AndroidInstaller
alias MobDev.Adopt.Generator
@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.native.ios --python",
schema: @common_schema,
defaults: @common_defaults
}
end
@impl Igniter.Mix.Task
def igniter(igniter) do
opts = igniter.args.options
app_name = ProjectApplication.app_name(igniter) |> to_string()
assigns = Generator.assigns(app_name, opts)
igniter
|> AndroidInstaller.emit_templates(assigns, opts, "ios")
|> AndroidInstaller.copy_static_binaries(opts, "ios")
|> maybe_apply_python(opts, app_name)
end
defp maybe_apply_python(igniter, opts, app_name) do
if opts[:python] == true do
# apply_python_patches operates on the filesystem directly (it
# predates the Igniter install path). Wrap as a side-effect noticed
# by Igniter so users see it in the output.
Generator.apply_python_patches(File.cwd!(), app_name)
Igniter.add_notice(igniter, "* applied Pythonx wiring (mix.exs + python_paths.ex)")
else
igniter
end
end
end