Skip to content

Release 2.0.0 - #805

Open
bestouff wants to merge 2 commits into
libimobiledevice:masterfrom
bestouff:news-2.0.0
Open

bestouff wants to merge 2 commits into
libimobiledevice:masterfrom
bestouff:news-2.0.0

Conversation

@bestouff

@bestouff bestouff commented Sep 29, 2026 •

Copy link
Copy Markdown

This prepares a 2.0.0 release: a NEWS entry and the dependency minimums that
go with it. It follows up on #577.

The version comes from git describe through git-version-gen, so this PR
cannot set it. The tag 2.0.0 still has to be created by a maintainer, with no
v prefix, as for 1.0.0.

Release pull requests are open for the components as well, so the whole set
can move together:

Component Proposed release Pull request
libirecovery 1.4.0 libimobiledevice/libirecovery#171
libtatsu 1.1.0 libimobiledevice/libtatsu#10
libimobiledevice-glue 1.3.3 libimobiledevice/libimobiledevice-glue#54
usbmuxd 1.2.0 libimobiledevice/usbmuxd#287
libideviceactivation 1.2.0 libimobiledevice/libideviceactivation#85

Why now

The last release, 1.0.0, is from June 2020. Since then 276 commits landed.
These include the support for Apple silicon Macs, so the git version is
currently the only one that can restore a current Mac. Downstream
distributions package releases, not git snapshots, so most users cannot get
a working version without building the whole stack from git.

Why 2.0.0

One option changed its meaning since 1.0.0:

Option 1.0.0 Now
-s --cydia, no argument --server URL, required argument

A command line such as idevicerestore -s -e fw.ipsw erased the device
through the Cydia signing service. The same command line now reads -e as
the server URL and does an update instead. The tool prints no error, so the
change is silent. This is an incompatible change to the command line
interface, which calls for a new major version.

-p, --pwn also became conditional at build time, but limera1n support
stays on by default, so that one is not a break for normal builds.

What this PR contains

Two commits:

  1. configure: raise the minimum version of each libimobiledevice component
    to its newest release.
  2. NEWS: the release notes for 2.0.0.

Dependency minimums

Component Was Now Reason
libirecovery 1.3.0 1.3.1 device table of 1.3.0 stops at the M4 generation
libtatsu 1.0.4 1.0.5 newer client version for the signing server
libplist 2.6.0 2.7.0 RFC 8259 exponents in the JSON parser
libusbmuxd 2.0.2 2.1.1 socket send timeout and error code forwarding
libimobiledevice-glue 1.3.0 1.3.2 socket scope_id fix
libimobiledevice 1.4.0 1.4.0 already the newest release

libirecovery is the one that matters in practice. src/dfu.c identifies the
device with irecv_devices_get_device_by_client(). With 1.3.0 an M5 Mac is
not in the table, the lookup fails, and the restore stops at
src/idevicerestore.c:510 with "Unable to discover device type".

The minimums for libzip and libcurl stay where they are. The code builds
against the old versions, and a higher floor there only makes packaging
harder for no gain.

If libimobiledevice/libirecovery#171 and libimobiledevice/libtatsu#10 are
merged and tagged first, these two lines should become 1.4.0 and 1.1.0.

Verification

make distcheck passes on macOS 27.0 on arm64 against the versions in the
table. The resulting binary reports:

idevicerestore 2.0.0 (libirecovery 1.3.1, libtatsu 1.0.5)

No component has to come from git

#577 raises this point repeatedly, so it deserves its own section. The
complete dependency stack was built from release tags alone into an isolated
prefix, with PKG_CONFIG_LIBDIR restricted so that no newer copy could be
picked up. The versions used were the minimums this PR replaces,
which is the hardest case:

libplist 2.6.0   libimobiledevice-glue 1.3.0   libusbmuxd 2.0.2
libtatsu 1.0.4   libimobiledevice 1.4.0        libirecovery 1.3.0

All of them build, and idevicerestore builds and links against them with no
errors. All four optional feature probes pass as well:

IDEVICE_E_TIMEOUT ... yes           enum idevice_connection_type ... yes
RESTORE_E_RECEIVE_TIMEOUT ... yes   reverse proxy support ... yes

So the released components are enough to build this tool. What the released
components cannot do is identify 2026 hardware, which is a data problem in
libirecovery and libtatsu, not a build problem here.

One note for packagers: libimobiledevice 1.4.0 requires libtatsu 1.0.3 or
newer, so libtatsu has to be built before libimobiledevice. The order in
README.md lists libtatsu last.

…nents

Raise the minimum version of each component to its newest release:

  libirecovery           1.3.0 -> 1.3.1
  libusbmuxd             2.0.2 -> 2.1.1
  libplist               2.6.0 -> 2.7.0
  libimobiledevice-glue  1.3.0 -> 1.3.2
  libtatsu               1.0.4 -> 1.0.5

libirecovery is the important one. The device table of 1.3.0 stops at the
M4 generation. An M5 Mac in DFU mode therefore fails the lookup in dfu.c
and the restore stops with "Unable to discover device type". Release 1.3.1
adds Mac17,2, the iPad Pro M5 models and the Apple Vision Pro M5.

libtatsu 1.0.5 sends a newer client version to the signing server.

The minimum for libimobiledevice stays at 1.4.0, which is its newest
release. The minimums for libzip and libcurl stay low on purpose. The code
builds with the old versions, and a higher minimum only makes packaging
more difficult.
276 commits landed since the 1.0.0 release in June 2020. This adds release
notes for them.

The version number goes to 2.0.0 because the -s option changed from the
--cydia flag into --server URL, which needs an argument. A command line
that used -s as a flag now reads the next argument as the URL, so this is
an incompatible change to the command line interface.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant