Skip to content

Tags: GenericJam/mob

Tags

0.7.0

Toggle 0.7.0's commit message
Release 0.7.0 — the plugin-extraction major (BREAKING)

Capabilities ship as first-party packages; core is the kernel plus the
plugin/composite/styles runtime. See the CHANGELOG Removed table for
the migration map.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

0.6.26

Toggle 0.6.26's commit message
Release 0.6.26: remove the hardcoded iOS -MIscs 10 literal cap

mob_beam.m appended `-MIscs 10` after the configured BEAM flags; allocator
flags are last-wins, so it silently overrode the 0.6.24 `-MIscs 128` default
(and runtime mob_beam_flags), pinning the literal super-carrier at 10 MB. An
embedded Livebook plus a notebook Mix.install then aborted with literal_alloc.
Removed it; the 128 MB default applies (iOS accepts the reservation). Verified
on a physical iPhone: emu_args has one `-MIscs 128`, Mix.install => :ok.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

0.6.25

Toggle 0.6.25's commit message
Release 0.6.25: "open with" — Mob.Files.take_opened_document/0

Receive a file another app opens into yours (e.g. a notebook emailed and
tapped), the inbound counterpart to Mob.Files.pick/2:

* Mob.Files.take_opened_document/0 → %{path,name,mime,size} | :none, called at
  the root screen's mount; a file opened while running arrives as
  {:files, :opened, item} (iOS warm delivery).
* New NIF take_opened_document + C-export mob_set_opened_document on iOS
  (ios/mob_nif.m) and Android (android/jni/mob_nif.zig), declared in both
  mob_beam.h. iOS AppDelegate calls mob_handle_opened_url from
  application:openURL:options:; Android MainActivity reads the ACTION_VIEW/SEND
  intent and calls MobBridge.setOpenedDocument.

The app declares the document type (iOS CFBundleDocumentTypes, Android
intent-filter) and forwards the open. Verified end-to-end on a physical iPhone
and a physical Android (Moto G): a .livemd opened into the embedded-Livebook
app (Io) opens as a notebook.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

0.6.24

Toggle 0.6.24's commit message
iOS: default to a 128 MB literal super-carrier (-MIscs 128)

iOS can't reserve the OTP default 1 GB literal virtual area
(ERTS_LITERAL_VIRTUAL_AREA_SIZE) and falls back to ~10 MB. A large app such
as an embedded Livebook, plus a notebook's Mix.install, fills that 10 MB and
the VM aborts with `literal_alloc: Cannot allocate N bytes (of type
"literal")`. Add -MIscs 128 to the iOS native launcher's default BEAM flags —
a virtual MAP_NORESERVE reservation iOS accepts where 1 GB fails, so apps no
longer need a per-app beam_flags: override. iOS-only; Android keeps its normal
large carrier. Runtime mob_beam_flags override still wins.

Verified on a physical iPhone (Io / livebook_mob): embedded Livebook serves
and Mix.install([{:short_uuid, "~> 0.1"}]) returns :ok.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

0.6.23

Toggle 0.6.23's commit message
Release 0.6.23 — agent-driving test harness + Mob.Bt extraction

Cuts a release for the screenshot / scroll / element-frame test harness
(#40) — in-process screenshot, deterministic id-addressed scroll, and
screenshot-free element frames over Erlang dist (no adb/xcrun), the
capability Sloppy Joe and WireTap need. Also ships the Mob.Bt →
mob_bluetooth plugin extraction already on master (breaking: no compat
shim; apps add {:mob_bluetooth, ...} and rename to MobBluetooth.*).

Companion release: mob_new 0.3.15 (the Kotlin bridge side).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

otp-7d46fdd4

Toggle otp-7d46fdd4's commit message
Remove Mob.Bt — extracted to standalone mob_bluetooth plugin

Wave 1 / Session A of the plugin epic. Mob.Bt and its sub-profiles
(Hfp / Hid / Spp) now live in a separate repo (mob_bluetooth) as
MobBluetooth.*. See plugin_extraction_plan.md.

Deletes from mob:
  lib/mob/bt.ex
  lib/mob/bt/hfp.ex
  lib/mob/bt/hid.ex
  lib/mob/bt/spp.ex
  test/mob/bt_test.exs
  test/mob/bt/hfp_test.exs
  test/mob/bt/spp_test.exs

NOT deleted (Session B will move these): the bt_* NIF stubs in
src/mob_nif.erl, the Android NIF in android/jni/mob_nif.zig, and
the iOS BT stubs in ios/mob_nif.m. The new MobBluetooth Elixir
wrappers still call :mob_nif.bt_* because the NIF physically lives
in mob's binary until Session B promotes the plugin to tier-1.

Docs:
  - CHANGELOG.md: Unreleased section flagging the breaking change.
    No deprecation shim by design; apps migrate by adding the plugin
    dep and renaming Mob.Bt -> MobBluetooth.
  - guides/mobile_surface_matrix.md: row updated to point at the plugin.
  - MOB_PLUGINS.md: tier-1 example header updated from hypothetical
    to extracted.

mix test still 0 failures (813 tests, was 825; the 12 dropped tests
are the BT encoder tests now exercised in mob_bluetooth).

0.6.22

Toggle 0.6.22's commit message
Release 0.6.22 — Mob.Certs + escript symlinks (#38) + body_tag dedupe

Bundles PR #38 (Android CA certificates via Mob.Certs.load_cacerts!/1
and the optional jniLibs symlinks for runtime rebar3 / escript /
beam.smp) plus the mix.exs before_closing_body_tag/1 dedupe so the
language-elixir highlighter and the mermaid renderer are no longer
mutually shadowed.

CHANGELOG.md has the full per-section breakdown.

0.6.21

Toggle 0.6.21's commit message
Release 0.6.21 — Android in-process DNS via Bionic getaddrinfo NIF

Bumps version + CHANGELOG entry for the Mob.DNS Android NIF added in #36.
`Mob.DNS.resolve/1` and `preresolve/1` now work on physical Android the
same way they do on iOS — symmetric NIF, identical Elixir surface, no
caller-side platform branching.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>