Repository navigation
Conversation
Add RemoteAnisetteDataFetcher, based on the remote anisette fetcher from altstoreio#1806 by Nick Clyde, so AltServer can get anisette data from an anisette v3 server instead of generating it locally. - Fetches client_info and user_agent from /v3/client_info and only accepts servers whose client_info identifies Windows. - Provisions a dedicated identity through /v3/provisioning_session. The URL bag lookup uses a Mac client info; the provisioning requests use the server's Windows client info. The identity is stored in RemoteAnisetteWindows/identity.json, separate from AnisetteKit's. - Re-provisions once when the server reports -45061 and supports resynchronizing with X-Apple-I-MD-DATA. - Defaults to https://ani.jkcoxson.com; can be overridden with the AnisetteServerURL user default. Adds remoteServerUnavailable, remoteServerInvalidResponse and provisioningFailed errors to AnisetteError.
Since October 12 2026 Apple rejects sign-ins whose anisette data comes from Android's CoreADI, which is what AnisetteKit generates locally on macOS 27: first with -80045, and since October 14 with an HTTP 503 HTML page for Android client infos. See altstoreio#1828. On macOS 27, fetch anisette data from a Windows anisette v3 server and pass the server's user agent to AltSign, so the X-MMe-Client-Info and User-Agent sent to GrandSlam match the client that generated the anisette data. Also set AltSign's anisette refresh and resync handlers so fresh anisette data is used between sign-in steps and after hsc 434.
Points AltSign at the GrandSlam changes needed to sign in with Windows anisette data: a configurable User-Agent, matching request headers, clear errors for HTTP failures and hsc 434 resync. Builds on top of rileytestut/AltSign#59 (2FA codes that Apple sends on its own).
|
For people who can't wait for this to be merged: I attached the build I tested as an unofficial, temporary pre-release in my fork, with instructions, SHA-256 checksums and the patches it was built from: https://github.com/kisnner26/AltStore/releases/tag/v1.8-windows-anisette-unofficial It's clearly marked as not official and unsigned, and it's meant to be replaced by an official AltServer as soon as a fix is released. Happy to remove it, or change how it's presented, if the team prefers. The code under review here is the cleaned-up version of the same change. The binary was built from the earlier patches (same approach, different formatting/structure), so please review the PR diff and treat the release as a stopgap. |
|
More test results, on the build from the release linked above (built from the earlier patches of the same change), macOS 27.2, free Apple ID with 2FA:
Not tested: refreshing other sideloaded apps, or an account that gets -80045 with the Windows identity. |
|
@kisnner26 @rileytestut this could potentially work as a definitive solution? https://github.com/sacca97/os-findmy-e |
|
Thanks for the pointer, I haven't tried it, so I can't say if it's a definitive fix. From its README it's a different approach: Python on Linux, running Apple's CoreADI under Unicorn to make up a Mac, while this PR is Swift changes in AltStore and AltSign that use Windows anisette data from a community server. Its own status table says that creating certificates, App IDs or profiles and installing an app aren't shown yet, which is what AltServer needs, so it would need more work before it could replace this. Whether to go that way is for the maintainers to decide. |
|
open the server you provided ,https://ani.jkcoxson.com/ ,get an error Is this the reason that the solution is not universal?
|
|
That page isn't what AltServer uses. The app calls /v3/client_info and the provisioning endpoints, and those answer fine from here (ani.jkcoxson.com and ani2.stikstore.app both return the Windows client info). The -45061 you see on the root page is a different thing and doesn't mean the server is down. It isn't why this isn't universal. Some accounts still get -80045 even with a working Windows anisette server, apparently depending on the account or the network, and I can't say why. If you're trying it, please share the exact error text and your macOS version. |
|
I get it,this only works on macOS 27+
|
Heavily based on PR #1834 by @kisnner26
|
This is very helpful, thanks a bunch! I've merged this in, and we've also used it as the basis to fix AltStore Classic itself. Planning to ship an update with this and your other AltSign fix very soon 🙂 |

Depends on: rileytestut/AltSign#61, which builds on rileytestut/AltSign#59. The
Dependencies/AltSignsubmodule points to that branch until it is merged.Fixes #1828.
Problem
Since October 12 2026, AltServer on macOS 27 can't sign in to Apple at all, so it can't install AltStore or refresh apps (#1828).
On macOS 27, AltServer generates anisette data locally with AnisetteKit, which emulates Android's CoreADI. Apple has been rejecting that in two stages:
ec -80045,hsc 500on the firstGsService2request, because the anisette is Android butX-MMe-Client-Infosays Mac503 Service Temporarily UnavailableHTML page to any request that declares an Android client, including the Pixel 7 identity in #1832 and #1833 (nab138/iloader#920, #921)NSCocoaErrorDomain 3840, "unknown tag html")What still works is anisette data from Windows' ADI (iTunes), served by anisette v3 servers like
ani.jkcoxson.com. TheX-MMe-Client-InfoandUser-Agentsent to Apple must be the ones that server reports in/v3/client_info:nab138/isideload 0.4.6 / iloader 2.3.8 shipped the same approach on October 15.
Solution
On macOS 27, AltServer gets its anisette data from a Windows anisette v3 server instead of AnisetteKit, and signs in as that client.
Your Apple ID password and 2FA code only go to Apple. The anisette server only sees the anisette identity it provisions, as with AltStore's existing remote anisette support.
feat: add an anisette v3 client to AltServerRemoteAnisetteDataFetcher, based on @nickclyde's fetcher from #1806. It only accepts servers whoseclient_infoidentifies Windows. The URL bag lookup uses a Mac client info; provisioning uses the server's client info. The identity is stored inRemoteAnisetteWindows/identity.json, separate from AnisetteKit's. It re-provisions once on-45061and supportsX-Apple-I-MD-DATAresync. Defaults tohttps://ani.jkcoxson.com, overridable withdefaults write com.rileytestut.AltServer AnisetteServerURL <url>. NewAnisetteErrorcases.fix: sign in with Windows anisette data on macOS 27AnisetteDataManageruses the remote fetcher on macOS 27 and passes the server'suser_agentto AltSign.AppDelegatesets AltSign's anisette refresh handler (as in #1832) and the new resync handler.build: update AltSigncpd, readable HTTP errors,hsc 434resync, and the 2FA fix from AltSign#59.LocalAnisetteDataManageris left untouched, so it is easy to switch back if Apple accepts local Android anisette again.Testing
Tested on macOS 27.2 (26B5091g), MacBook Pro M1, with an iPad Pro 12.9" (5th gen) on iPadOS 27.2 (24B5084k) over USB, and a free Apple ID with 2FA.
classic(fafd76e)-80045onGsService2 initclassic+ #1832 (Pixel 7)503HTML → "The data is not in the correct format" (2026-10-15 03:40 UTC)client_inforeturned404fromGsService2instead of the503HTML that Android client infos get, so the request is no longer blocked at the edge.Notes and limitations
ani.jkcoxson.com;ani2.stikstore.appworks too). Servers that serve Android anisette (e.g.ani.sidestore.io, whoseclient_infostill claims a Mac) are rejected by the fetcher, because Apple no longer accepts them.-80045with the Windows identity (Even with 2.3.8 still getting -80045 error. Tried replacing with Pixel ID too, still occurs. 16e - iOS 27.0.1 nab138/iloader#928), apparently depending on the account or IP. SMS 2FA is broken on Apple's side (403); trusted-device codes work.FetchAnisetteDataOperation) has the same Android problem and isn't changed here. Refreshing through AltServer should work, since AltStore then uses AltServer's anisette, but I haven't tested it yet.ldidlinking, and SwiftPM producing an emptyAltSign-Dynamicbinary). They're not part of this PR.Credits
@whydr4 (#1832, AltSign#59), @mattaltgear (#1833, AltSign#60), @nickclyde (#1806, remote anisette fetcher), @nab138 (isideload/iloader, Windows anisette approach), @jkcoxson (anisette server).