Repository navigation
iOS release bundles custom fonts (MOB-480) - #139
Merged
Merged
Conversation
mix mob.release --ios built the .app from the binary and ios/Info.plist alone, so an App Store build shipped none of the app's priv/fonts, plugin or style fonts. release_device.sh now copies the fonts the dev build bundles (NativeBuild.collect_all_fonts/0, through the shared ios_font_copies!/1 collision check) to the .app root and appends the missing names to UIAppFonts, from env computed by Release.ios_fonts_release_env/2. Also records that rejecting a non-font assets key in a v1 style manifest is an accepted upgrade break (CHANGELOG, decision record).
…list with plutil, test the release_env wiring - ios_font_copies!/1 (dev and release) rejects bundle names with ", \, &, <, > or control characters: PlistBuddy dropped " and \ and exited 0, and the dev merge wrote them into the plist XML unescaped. - Existing UIAppFonts are read with plutil, so a binary Info.plist and an XML-escaped name don't produce duplicate entries. - release_fonts_test runs release_env/4 from a project dir, so dropping the fonts from the release env fails a test.
…ux-run tests - Names reach UIAppFonts through plutil -insert as one argument, so quotes, apostrophes and backslashes are exact (PlistBuddy parsed them and still exited 0). Env values are base64, so any source path survives. - The name check (dev and release) now refuses only what the dev XML merge can't carry: &, <, > and control characters. Runtime-compiled regexes only. - Only the tests that run bash/plutil are :macos_only; the release_env/4 wiring and name tests run on Linux CI.
GenericJam
added a commit
that referenced
this pull request
Oct 14, 2026
…undles custom fonts (MOB-480); Android relabels otp/ before the ERTS probe (MOB-478) Release-gate review of 0.7.24..a1933e1: Codex DO NOT SHIP (iOS release bundled no fonts; style assets upgrade note). Fixed in MOB-480 (#139, Codex three rounds, final no source findings, CI green) and the CHANGELOG/decision note. Verified from the packed Hex tarball on a rooted Android emulator (reinstall + native deploy), the iOS simulator (9 style fonts bundled), and a signed mix mob.release --ios IPA (9 fonts + UIAppFonts, codesign OK).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes MOB-480. Found by the Codex review of the 0.7.25 release, which ships style fonts (MOB-476).
mix mob.release --iosbuilt the.appfrom the binary andios/Info.plistalone, so an App Store build shipped no custom fonts: not the app'spriv/fonts/, not plugin or styleassets.fonts. Themes that name a custom font rendered the system font.Change
NativeBuild.ios_font_copies!/1is the dev build's copy plan + collision check, now shared with the release. It also refuses names the dev XML merge can't carry intact (&,<,>, control characters).Release.ios_fonts_release_env/2(fromrelease_env/4) passes the fonts torelease_device.shas base64 (MOB_IOS_FONT_FILES,MOB_IOS_UI_APP_FONTS). Existing UIAppFonts entries are read withplutil(binary plists and XML-escaped names work)..approot and appends missing names withplutil -insert … -append; each name is one argument, so quotes, apostrophes and backslashes are exact.Verification
test/mob_dev/release_fonts_test.exs: runs the real script block with bash/base64/plutil and compares with the dev merge (macOS), plus therelease_env/4wiring and name checks (run on Linux CI). Each fix was mutation-checked: reverting it fails its test.--exclude macos_only.mix mob.release --iosof an app whose style ships 9 fonts: the IPA's.apphas all 9 (byte-identical), all 9 in UIAppFonts,codesign -v --strictOK.Review: Codex, three rounds. Rounds 1–2 DO NOT SHIP (PlistBuddy quoting, tab/newline in paths, regex plist parsing, tests bypassing the wiring, regex literals, macOS-only tests); all fixed. Round 3: no source findings, DO NOT MERGE only pending CI on this commit.