Skip to main content

Pypi version

Overview

Store both types of Apple's DeveloperDiskImage files:

  • DeveloperDiskImage.dmg & DeveloperDiskImage.dmg.signature
    • Used for each iOS version < 17.0
  • The new Personalized images, but splitted to:
    • APFS
    • BuildManifest.plist
    • Trustcache
  • The Cryptex1 assets, for installing the same DDI through cryptexd instead of the image mounter:
    • APFS
    • BuildManifest.plist
    • Trustcache
    • Cryptex info plist
    • Volume root hash

The split of the new format is requires for OS* other than macOS that will have trouble extracting the original APFS image inside: ~/Library/Developer/DeveloperDiskImages.

Layout

Directory Consumed by
DeveloperDiskImages/<version>/ iOS < 17.0
PersonalizedImages/Xcode_iOS_DDI_Personalized/ the image mounter (mounter auto-mount)
PersonalizedImages/Xcode_iOS_DDI_Cryptex/ cryptexd (cryptex auto-install)

Every payload is published under a fixed file name, so download URLs stay predictable across releases:

File Personalized Cryptex
BuildManifest.plist yes yes
Image.dmg PersonalizedDMG Cryptex1,GenericDmg
Image.dmg.trustcache LoadableTrustCache Cryptex1,GenericTrustCache
Image.dmg.cryptex_info -- Cryptex1,CryptexInfoPlist
Image.dmg.root_hash -- Cryptex1,GenericVolume

Apple's own paths embed a build number (022-22107-072.dmg), so the published BuildManifest.plist is rewritten to declare the fixed names instead. Only Info.Path is adjusted -- the digests personalization depends on are untouched -- which keeps a downloaded cryptex directory usable as a drop-in Restore directory.

Updating

update_ddi.py refreshes every variant from a local Xcode installation. macOS only, no dependencies, run it with uv:

uv run --script update_ddi.py             # refresh every variant of the iOS DDI
uv run --script update_ddi.py --dry-run   # report what would change, write nothing
uv run --script update_ddi.py --platform tvOS --variant cryptex

Pass --script so uv runs it as a standalone script rather than treating this repository as a uv project (which would leave a stray uv.lock and .venv behind).

It reads Xcode's bundle from /Library/Developer (falling back to attaching CoreDevice/CandidateDDIs/<platform>_DDI.dmg when no expanded copy exists), verifies every payload against the SHA-384 digests in the build manifest before publishing it, and removes stale files left over from a previous build. Remember to bump LATEST_DDI_BUILD_ID in pymobiledevice3 to match whatever build it reports.

Python package

Additionally, this repo provides a python API for accessing this repository. You can install it as follows:

python3 -m pip install -U developer_disk_image

Example usage

Payloads are fetched from raw.githubusercontent.com, which is not subject to the REST API's 60-requests-per-hour anonymous quota, so no GitHub token is needed. create() accepts a ref (branch, tag or commit) to read a revision other than main.

from developer_disk_image.repo import DeveloperDiskImageRepository

repo = DeveloperDiskImageRepository.create()

# will get both the APFS and the signature file
developer_disk_image = repo.get_developer_disk_image('16.4')

# will get all necessary files for mount
personalized_disk_image = repo.get_personalized_disk_image()

# will get all necessary files for installing the DDI as a cryptex
cryptex_disk_image = repo.get_cryptex_disk_image()

Writing the cryptex assets back out under their published names produces a directory that cryptexd clients accept as-is:

from pathlib import Path

from developer_disk_image.repo import CRYPTEX_IMAGE_PAYLOADS

restore = Path('Xcode_iOS_DDI_Cryptex')
restore.mkdir(parents=True, exist_ok=True)
(restore / 'BuildManifest.plist').write_bytes(cryptex_disk_image.build_manifest)
for field, name in CRYPTEX_IMAGE_PAYLOADS.items():
    (restore / name).write_bytes(getattr(cryptex_disk_image, field))

Metadata

Release files for developer-disk-image 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for developer-disk-image 0.3.0
File Size Uploaded
developer_disk_image-0.3.0.tar.gz 14.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for developer-disk-image 0.3.0
File Interpreter ABI Platform
developer_disk_image-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 20.9 kB

Release files / developer_disk_image-0.3.0.tar.gz

Download URL developer_disk_image-0.3.0.tar.gz
Size 14.3 kB
Tags Source
SHA-256 checksum
How to use checksums
1fb9841dcc5cf81e697b6e0a9c14909c059c1893d675b38398a91c08cb7ba8bc
BLAKE2b-256 checksum
How to use checksums
52f516c742e98191761d0925ed424468e3bec14503644c84851046602667d3c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 7, 2026.

Transparency log

Release files / developer_disk_image-0.3.0-py3-none-any.whl

Download URL developer_disk_image-0.3.0-py3-none-any.whl
Size 6.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5451eb280bcf5188f406107081b05cb4718f645f5dd9c64ee942f577a43108f9
BLAKE2b-256 checksum
How to use checksums
c9478322b1356a4e3e455a743308d1d43d117b1e82e8311639e710171e950b8f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 7, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.4

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page