v10.4.0
Highlights
✨ cryptex auto-install: mount-free DDI installation over cryptexd
The new cryptex CLI group talks to cryptexd directly (iOS 17+, over RSD). Its flagship command, auto-install, personalizes and installs the DeveloperDiskImage without going through the image mounter: it has Apple sign a Cryptex1 ticket for the device, downloads and caches the DDI under ~/.pymobiledevice3, and leaves the developer services usable — no Xcode required, on any host.
pymobiledevice3 cryptex auto-install
# inspect / manage cryptexes
pymobiledevice3 cryptex list
pymobiledevice3 cryptex personalization-identifiers
pymobiledevice3 cryptex nonce✨ New RemoteXPC services: install records, notifications, app icons
Three new iOS 17+ services, plus outbound XPC file-transfer support in the RemoteXPC layer:
# LaunchServices install record (DB UUID/sequence, install path, persistent identifier)
pymobiledevice3 apps install-record com.apple.Preferences
# Darwin notifications straight over RemoteXPC (no lockdown shim)
pymobiledevice3 notification observe --remotexpc com.example.notification
# Fetch an app's icon as PNG via the core-device icon service
pymobiledevice3 developer core-device fetch-app-icon com.apple.Preferences icon.png✨ RSD-advertised feature verification
RSD-advertised service features are now exposed and checked before use across cryptexd, fileservice, DSC symbol fetching, and CoreDevice. Commands fail fast with a clear "feature not supported (iOS X.Y)" error instead of dying on a cryptic protocol message — and list-apps automatically prefers streamapplist when the DDI advertises it.
📚 Documentation: full CLI reference, troubleshooting guide, complete API docstrings
The docs site now includes a complete CLI reference generated from the command tree at build time (it can never drift from the code), a troubleshooting guide mapping the errors users actually hit to fixes, and 100% docstring coverage across the Python API reference.
🐛 Fixes
syslog liveno longer raisesIndexErrorwhen a log label contains format metacharacters.backup2 backup --only ...no longer forces manifest patching: filtered backups keep the completeManifest.dbby default (enabling incremental runs), with--patch-manifestnow opt-in (#1818, thanks @chambres).
What's Changed
- 88150b4 remote: Document parameters on the lockdown delegation wrappers (#1832) (@doronz88)
- bfbfd3e docs: Add cryptexd and install-coordination to the API reference (#1832) (@doronz88)
- 6ae6558 docs: Complete docstring coverage of the API-reference surface (#1832) (@doronz88)
- fbbdffe docs: Add troubleshooting guide (#1832) (@doronz88)
- 2abc09a docs: Generate a full CLI reference at build time (#1832) (@doronz88)
- 9ec92e4 file_service: Verify advertised fileservice capabilities before use (#1831) (@doronz88)
- 1e0fb91 core_device: Prefer streamapplist for list-apps when the DDI advertises it (#1830) (@doronz88)
- 53a557f remote_fetch_symbols: Verify the DSC fetch capability before use (#1829) (@doronz88)
- 7c5bb30 cryptexd: Verify advertised capabilities before use (#1829) (@doronz88)
- 7181e21 core_device: Verify feature support before invoking (#1829) (@doronz88)
- 156030e remote: Expose RSD-advertised service features (#1829) (@doronz88)
- 1735b15 docs: Document the cryptex DDI install path (#1828) (@doronz88)
- d22854a cryptex: Add
auto-install, downloading and caching the DDI (#1828) (@doronz88) - 34512f5 cryptex: Personalize against the nonce domain's handle, not its index (#1828) (@doronz88)
- 6981b65 tss: Fix the Cryptex1 personalization request (#1828) (@doronz88)
- 663c058 syslog: Fix IndexError when label contains format metacharacters (#1827) (@doronz88)
- 9b9c23a backup2: Make
--patch-manifestoptional (#1818) (#1818) (@chambres) - f91201f cryptex: Add cryptexd service and CLI group (#1823) (@doronz88)
- 73dddef tss: Add Cryptex1 personalization request (#1823) (@doronz88)
- df942ab mounter: Extract reusable TSS manifest and DDI cache helpers (#1823) (@doronz88)
- 6e57191 apps: Add install-record via installcoordination_proxy (#1823) (@doronz88)
- 1e56a4e notification: Add RemoteXPC notification proxy (#1823) (@doronz88)
- 9bb0d95 core-device: Add icon service (#1823) (@doronz88)
- 08ab2fa darwin_errno: Add device-side errno table (#1823) (@doronz88)
- 1fa04b0 remotexpc: Add outbound XPC file transfer support (#1823) (@doronz88)
- 86344d0 ci: Pin uv to the managed interpreter so the 3.9 macOS job passes (#1824) (@doronz88)
- 0a05f39 tests: Fix ssl_start_sync failure test on Python <= 3.10 (#1824) (@doronz88)
- 3ddc21c ci: Restore python3.9 testing via uv-managed interpreters (#1822) (@doronz88)
- ae28f3a readme: Add AnNEDoMini to sponsors (#1821) (@doronz88)
- 661c91b readme: Fix TestMu AI logo rendering (sha-pinned URLs, picture element) (#1821) (@doronz88)
- 18b75e5 readme: Use official TestMu AI logo assets (#1821) (@doronz88)
- 9f6454b readme: Add Sponsors section (#1821) (@doronz88)
New Contributors
Full Changelog: v10.3.1...v10.4.0