Documentation
On this page

Configuration

Release and installer commands

release.sh, the signed MANIFEST, and the verbs of mapple-install.

release.sh

A release is a checkout of the release repository with its files in assets/ (gh release download <tag> -D assets, or by hand), its MANIFEST, MANIFEST.sig and allowed_signers. release.sh puts Open Mapple together on your Mac from them and your iOS.

./release.sh [--ipsw IPSW] [--touch-fw FW]
  • It checks MANIFEST.sig against allowed_signers (ssh-keygen -Y verify, identity open-mapple-release, namespace mapple-release) and every file of assets/ against the size and SHA-256 MANIFEST lists, and stops on any difference.
  • Without --ipsw it downloads iOS 16.7.16 (20H392) for the iPhone X from Apple’s servers (6.2 GB into work/): running it is your consent. With --ipsw it uses your copy. Either way the IPSW’s size and SHA-256 are checked.
  • --touch-fw (developers) puts FW_NF_ILI7807S_*.bin into the payload too; normally the loader takes the copy the zip leaves in the tail area.
  • Building the root needs sudo: the script prints the command and stops; run it, then run the script again. Out come out/root.img (for fastboot) and out/mapple-...-PERSONAL.zip (for the recovery).

Maintainers only:

CommandWhat
./release.sh pack OUT TOP TAG [--rehearsal]assets/, assets/SHA256SUMS and MANIFEST for the tag, from an mka build of the single product in OUT and the tree TOP; every project must be clean and at its origin/main (--rehearsal: any commit, the tag marked as such). The kernel in OUT must be the common tree’s HEAD
./release.sh sign KEYMANIFEST.sig with the release key (ssh-keygen -Y sign, namespace mapple-release); writes allowed_signers.new when the key’s line is new

MANIFEST holds: the release tag; the IPSW’s size and SHA-256; the command line; adt, payload_max and root_size; the kernel’s version; one source <project> <commit> line per project; and one file <sha256> <size> <name> line per asset: kernel, shim.Image, mtkloader.bin, mapple-install, root-overlay.tar and tools.tar.

mapple-install

What the zip runs in the recovery (static aarch64), and what mka uses on the Mac to make the boot image. DEV is the partition that holds the root (userdata in the single layout); every write is read back and hashed.

VerbWhat
verify-root RANGES DEVboth volume headers and the SHA-256 of every allocated block against root.ranges
put DEV REGION|OFFSET FILEFILE into a region of the tail (settings, firmware, log; zero-filled to its end) or at a byte offset
save DEV NAME FILEFILE kept in the saved area under NAME (boot), its header updated; chained records only the size and SHA-256 of the boot image as chained
ilifw FIRMWARE OUTthe touch firmware as the loader’s ilifw item
chain BOOT LOADER PAYLOAD [--backup FILE] [--out FILE]the loader in front of the Android kernel in BOOT and the payload after it, written to --out or back to BOOT; --backup keeps BOOT as it was if it carries no loader yet; a kernel that already carries a loader is chained again from the Android kernel inside it
split-carve DISK [--size GIB] [--check]with the dual boot built in: xnusys (default 22 GiB) carved off the end of userdata; the boot partition is not touched
split-chain DISK BOOT LOADER PAYLOADafter the root is flashed and checked: the boot image kept in xnusys’s saved area, then chained, and the chained image recorded
split-uninstall DISK BOOT [--check]the boot image back from the saved area (only while it is still the one chained), the partition table as before the carve

The zip’s script (update-binary) checks the phone, the root and every block before it writes anything: it clears the settings record, writes the phone’s own firmware into the tail area, keeps the Android boot in the saved area, and chains the loader into boot last, recording the chained image’s size and SHA-256 after it. A split zip has two passes (without xnusys it carves it and stops for fastboot flash xnusys root.img; with it, it chains); an uninstall zip gives xnusys back to userdata and the saved boot back to boot.

Source: release.sh of mapple_releases (branch spaced) at a8ff522; installer/mapple-install.c and installer/update-binary of mapple_build at f7431bb; installer/split.c of mapple_splitboot at 406b03a.

Applies to realme 8i (spaced), release 1 · Updated 15 November 2026