MobDev.Paths (mob_dev v0.3.26)

Copy Markdown View Source

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.

Summary

Functions

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.

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.

The pre-runtime-dir-relocation path. Old ios/build.sh scripts hardcode this; we keep recognising it so existing projects keep deploying.

Returns the directory where the iOS simulator's OTP runtime lives.

Functions

build_sh_aware?(project_dir)

@spec build_sh_aware?(String.t()) :: boolean()

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.

default_runtime_dir()

@spec default_runtime_dir() :: String.t()

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.

legacy_tmp_path()

@spec legacy_tmp_path() :: String.t()

The pre-runtime-dir-relocation path. Old ios/build.sh scripts hardcode this; we keep recognising it so existing projects keep deploying.

sim_runtime_dir(opts \\ [])

@spec sim_runtime_dir(keyword()) :: String.t()

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.