Packages
mob_dev
0.3.35
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/mob_dev/paths.ex
defmodule MobDev.Paths do
@moduledoc """
Resolution helpers for paths Mob writes to outside the project tree.
Centralised here so the deployer, the build script, the iOS simulator
app's `mob_beam.m`, the cache-listing task, and the doctor all agree on
one answer.
"""
@doc """
Returns the directory where the iOS simulator's OTP runtime lives.
Resolution order:
1. `MOB_SIM_RUNTIME_DIR` env var if set
2. `~/.mob/runtime/ios-sim` (new default — managed by `mix mob.cache`)
3. `/tmp/otp-ios-sim` (legacy fallback for projects whose `ios/build.sh`
was generated before the env-var-aware template)
The third branch is the back-compat path: a project's `ios/build.sh` is
generated once at project creation and kept thereafter, so old projects
still write the OTP runtime to `/tmp/otp-ios-sim`. We detect that case
by looking inside the project's own `ios/build.sh` for the
`MOB_SIM_RUNTIME_DIR` token. If it's missing, the project hasn't been
regenerated against the new mob_new template and we honor its old
hardcoded path so `mix mob.deploy` keeps working.
When `:project_dir` is passed, the build.sh-presence check uses that
directory; otherwise it uses `File.cwd!/0`. Pure of side effects.
"""
@spec sim_runtime_dir(keyword()) :: String.t()
def sim_runtime_dir(opts \\ []) do
project_dir = Keyword.get(opts, :project_dir, File.cwd!())
cond do
env = System.get_env("MOB_SIM_RUNTIME_DIR") ->
env
build_sh_aware?(project_dir) ->
default_runtime_dir()
true ->
legacy_tmp_path()
end
end
@doc """
The new default runtime path — under `~/.mob/runtime/` so `mix mob.cache`
can list and clear it the same way it handles the OTP cache.
"""
@spec default_runtime_dir() :: String.t()
def default_runtime_dir do
Path.join([System.user_home!(), ".mob", "runtime", "ios-sim"])
end
@doc """
The pre-runtime-dir-relocation path. Old `ios/build.sh` scripts hardcode
this; we keep recognising it so existing projects keep deploying.
"""
@spec legacy_tmp_path() :: String.t()
def legacy_tmp_path, do: "/tmp/otp-ios-sim"
@doc """
True when the project's `ios/build.sh` was generated from a template that
knows about `MOB_SIM_RUNTIME_DIR` (mob_new ≥ 0.1.20). False if the file
is missing or predates the env-var support.
"""
@spec build_sh_aware?(String.t()) :: boolean()
def build_sh_aware?(project_dir) do
path = Path.join([project_dir, "ios", "build.sh"])
case File.read(path) do
{:ok, content} -> String.contains?(content, "MOB_SIM_RUNTIME_DIR")
_ -> false
end
end
end