Summary
Apps signed by this project install successfully on iOS 26 and iOS 27 but refuse to launch.
The device log reports NSPOSIXErrorDomain code 85 (EBADEXEC, "rejected code signature").
The cause is the vendored ldid: upstream_repo is pinned to a commit from April 2022,
and that ldid predates the signature layout newer iOS builds accept.
Detail
upstream_repo currently points at 071b1dd ("Updates version to 1.5.0.0", 2022-04-25).
Note that origin/master of that repository is even older (2021-07-01) — active work lives
on other branches.
rileytestut/AltServer-Windows has since updated ldid to match the AltStore/AltServer macOS
version, in commit 62a7a2b ("[ldid] Updates ldid to match AltStore + AltServer macOS'
version", 2026-03-23), which is on the 26.4_fix branch. Building with ldid from that commit
produces bundles that launch normally on iOS 27.
Why a plain submodule bump does not work
Moving the submodule to 62a7a2b does not build. The newer tree also updates the AltServer
sources, which pull in Windows headers that this project's shims do not currently provide:
build/AltServer_patched/AltServerApp.cpp:10:10: fatal error: Guiddef.h: No such file or directory
build/AltServer_patched/AltInclude.h:3:10: fatal error: windows.h: No such file or directory
So the bump needs shim work alongside it, or ldid needs to be taken in on its own.
A second, smaller problem that surfaces with the new ldid
AltSign/Signer.cpp builds ldid's root path as:
ldid::DiskFolder appBundle(app.path() + "\\");
Newer ldid joins its root with each relative path without inserting a separator, and expects
the root to already end in one. On Linux the Windows backslash is not a separator, so entries
come out as App.app\Info.plist and signing produces an unusable bundle.
This fits the existing rewrite mechanism — makefiles/AltSign-build/rewrite_ldid_source.py
already converts \\ to / for ldid's own sources, but
rewrite_altsign_source.py does not do the same for AltSign. A one-line rule there is enough:
content = content.replace(b'app.path() + "\\\\"', b'app.path() + "/"')
A blanket backslash rewrite would be riskier: AltSign/Archiver.cpp also contains
char ALTDirectoryDeliminator = '\\';, which is the only other occurrence in AltSign and is
better left alone.
Environment
I am happy to prepare a pull request if you have a preference for the approach — bumping the
submodule and extending the shims, or vendoring ldid separately.
Summary
Apps signed by this project install successfully on iOS 26 and iOS 27 but refuse to launch.
The device log reports
NSPOSIXErrorDomain code 85(EBADEXEC, "rejected code signature").The cause is the vendored ldid:
upstream_repois pinned to a commit from April 2022,and that ldid predates the signature layout newer iOS builds accept.
Detail
upstream_repocurrently points at071b1dd("Updates version to 1.5.0.0", 2022-04-25).Note that
origin/masterof that repository is even older (2021-07-01) — active work liveson other branches.
rileytestut/AltServer-Windowshas since updated ldid to match the AltStore/AltServer macOSversion, in commit
62a7a2b("[ldid] Updates ldid to match AltStore + AltServer macOS'version", 2026-03-23), which is on the
26.4_fixbranch. Building with ldid from that commitproduces bundles that launch normally on iOS 27.
Why a plain submodule bump does not work
Moving the submodule to
62a7a2bdoes not build. The newer tree also updates the AltServersources, which pull in Windows headers that this project's shims do not currently provide:
So the bump needs shim work alongside it, or ldid needs to be taken in on its own.
A second, smaller problem that surfaces with the new ldid
AltSign/Signer.cppbuilds ldid's root path as:ldid::DiskFolder appBundle(app.path() + "\\");Newer ldid joins its root with each relative path without inserting a separator, and expects
the root to already end in one. On Linux the Windows backslash is not a separator, so entries
come out as
App.app\Info.plistand signing produces an unusable bundle.This fits the existing rewrite mechanism —
makefiles/AltSign-build/rewrite_ldid_source.pyalready converts
\\to/for ldid's own sources, butrewrite_altsign_source.pydoes not do the same for AltSign. A one-line rule there is enough:A blanket backslash rewrite would be riskier:
AltSign/Archiver.cppalso containschar ALTDirectoryDeliminator = '\\';, which is the only other occurrence in AltSign and isbetter left alone.
Environment
buildenv/(with the fixes from buildenv: fix corecrypto image build (archive layout and missing cmake inputs) #136, without whichthe image does not build at all)
I am happy to prepare a pull request if you have a preference for the approach — bumping the
submodule and extending the shims, or vendoring ldid separately.