Tags: GenericJam/mob
Tags
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>
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>
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>
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>
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>
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).
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.
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>
PreviousNext