writeup

apple blocked altserver twice in a week. i proposed the fix.

kisnner obando · october 2026 · altserver · macos 27.2 · ipados 27.2 · altstore#1834 · status: proposed, not merged

altserver on macos 27 showing the error: the data is not in the correct format

sequel to altstore couldn't sign in. apple was sending back an html page. in october 2026 altserver on macos 27 stopped signing in again, first with -80045 and, two days later, with an html page that altserver tried to read as a plist. this is how i traced both, what i measured at apple's edge without credentials, and the fix i proposed. the long version, with diagrams, is in the field report.

tl;dr

the rule that explains both blocks

the anisette data and the X-MMe-Client-Info header must describe the same device. altserver was asking local anisette (android coreadi) and then declaring a mac. that mismatch is block one. block two is apple's edge refusing android outright.

probing the edge without credentials

to separate "the server rejects this identity" from "my login is wrong", i sent credential-less requests to GsService2 with an empty plist body and only the client info changed. they show how the edge routes a request, not whether a login would succeed.

client inforesponsereading
<Pixel 7> <Android;14;…>503 html, 6 of 6blocked at the edge
pixel 5 and pixel 8 variants503 html, 6 of 6same
<MacBookPro…> <macOS;27.2;…> akd404 / 429reaches the service (my ip was rate-limited by then)
<PC> <Windows;6.2(0,0);9200> itunes404reaches the service

the only recipe confirmed after the 503 was the one iloader 2.3.8 and isideload 0.4.6 shipped: windows anisette from an anisette v3 server.

a crash that wasn't the bug

porting the fix meant building altserver with xcode 27. the first build that reached apple crashed on its own: the faulting call was alt_ccsrp_gp_rfc5054_2048, a symbol altsign binds through the flat namespace, and it was undefined in every framework. the swiftpm product AltSign-Dynamic was empty under xcode 27.

$ nm -arch arm64 AltSign.framework/Versions/A/AltSign | grep rfc5054
                 U _alt_ccsrp_gp_rfc5054_2048

rebuilding that one dylib from libcorecrypto_static.a with -force_load removed the crash. it is a build issue, so it is deliberately not part of the pull request.

the fix

six commits, three in altstore and three in altsign. they build on the 2fa fix from altsign#59 and reuse the remote anisette fetcher from altstore#1806.

beforeafter
anisetteandroid coreadi, local (anisettekit)windows adi, anisette v3 server
user-agentfixed authkit string with xcode 26the server's user_agent
http errorsplist parse error 3840readable http status

your password and 2fa code go directly to apple. the anisette server only sees a device identity.

evidence

installing altstore from the downloaded build worked on an ipad pro and an iphone 15 pro max, and refreshing altstore from the app worked too: 26 requests during an install and 6 during a refresh, all http 200, back to 7 days remaining, one app id used. the 2fa code came from a trusted device, because sms currently fails on apple's side.

altstore on an iphone after the refresh, 7 days remaining

what this proves and what it doesn't

mistakes i made along the way

takeaways

links