Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
a52ba06
fix: SideInstaller GSA parity headers + 429 retry
Mr3242-Scripter Oct 18, 2026
97eef95
fix: restore full Authentication.swift with SideInstaller Windows GSA…
Mr3242-Scripter Oct 18, 2026
2380448
fix: restore full Authentication.swift with SideInstaller Windows GSA…
Mr3242-Scripter Oct 19, 2026
cdae649
test: small update
Mr3242-Scripter Oct 19, 2026
2e40f78
fix: restore full Authentication.swift with SideInstaller Windows GSA…
Mr3242-Scripter Oct 19, 2026
caf60b7
Update Authentication.swift
Mr3242-Scripter Oct 19, 2026
cc3dd8b
Update Constants.swift
Mr3242-Scripter Oct 20, 2026
23ae5c0
Update Authentication.swift
Mr3242-Scripter Oct 20, 2026
11a0774
Update AnisetteDataManager.swift
Mr3242-Scripter Oct 20, 2026
67b9b70
Update DeveloperPortalAPI.swift
Mr3242-Scripter Oct 20, 2026
fbe9d45
Update Authentication.swift
Mr3242-Scripter Oct 20, 2026
96d4f52
Update Authentication.swift
Mr3242-Scripter Oct 20, 2026
d1e1c44
Update Authentication.swift
Mr3242-Scripter Oct 20, 2026
fee235e
Update Authentication.swift
Mr3242-Scripter Oct 20, 2026
ac3df50
Update Authentication.swift
Mr3242-Scripter Oct 20, 2026
594ed40
fix: SideInstaller 1.6.1 2FA iCloud fallback + keep Mac identity
Mr3242-Scripter Oct 25, 2026
7bb9bdb
fix: restore Authentication.swift with SideInstaller 1.6.1 2FA + Mac …
Mr3242-Scripter Oct 25, 2026
d89a955
fix: SideInstaller 1.6.1 2FA iCloud fallback + keep Mac identity
Mr3242-Scripter Oct 25, 2026
31532e7
Update Authentication.swift
Mr3242-Scripter Oct 25, 2026
ead0f04
fix: SideInstaller 1.6.1 2FA iCloud fallback + keep Mac identity
Mr3242-Scripter Oct 25, 2026
bd3b5b3
Update Authentication.swift
Mr3242-Scripter Oct 25, 2026
9ee1296
Update Authentication.swift
Mr3242-Scripter Oct 25, 2026
cd3b62c
Update Authentication.swift
Mr3242-Scripter Oct 25, 2026
072f4ff
Update Authentication.swift
Mr3242-Scripter Oct 25, 2026
55e1956
Update Authentication.swift
Mr3242-Scripter Oct 25, 2026
cc21eb2
Update Authentication.swift
Mr3242-Scripter Oct 25, 2026
281ca06
Update Authentication.swift
Mr3242-Scripter Oct 25, 2026
bfb637d
Update Authentication.swift
Mr3242-Scripter Oct 25, 2026
de69e8d
Update Authentication.swift
Mr3242-Scripter Oct 26, 2026
f112e99
Update Authentication.swift
Mr3242-Scripter Oct 26, 2026
f55a2f8
Update Authentication.swift
Mr3242-Scripter Oct 26, 2026
47fca31
Update Authentication.swift
Mr3242-Scripter Oct 26, 2026
09b0b95
Update Authentication.swift
Mr3242-Scripter Oct 26, 2026
f25c674
Update Authentication.swift
Mr3242-Scripter Oct 26, 2026
188ee5b
Update Authentication.swift
Mr3242-Scripter Oct 26, 2026
265f44e
Update Authentication.swift
Mr3242-Scripter Oct 27, 2026
bb5ccb5
Update Authentication.swift
Mr3242-Scripter Oct 27, 2026
24f5914
Update Authentication.swift
Mr3242-Scripter Oct 27, 2026
f4c8706
Update Authentication.swift
Mr3242-Scripter Oct 27, 2026
c1c23e1
Update Authentication.swift
Mr3242-Scripter Oct 28, 2026
c7adbbf
Update Authentication.swift
Mr3242-Scripter Oct 28, 2026
1345e0e
Update Authentication.swift
Mr3242-Scripter Oct 28, 2026
7bbaec8
Update Authentication.swift
Mr3242-Scripter Oct 28, 2026
28474b6
Update Authentication.swift
Mr3242-Scripter Oct 28, 2026
c99f666
Update Authentication.swift
Mr3242-Scripter Oct 28, 2026
2524a31
Update Errors.swift
Mr3242-Scripter Oct 28, 2026
4769d17
Update Authentication.swift
Mr3242-Scripter Oct 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 16 additions & 7 deletions Sources/Anisette/AnisetteDataManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -433,8 +433,17 @@ public final class AnisetteDataManager: @unchecked Sendable {
}
}

let clientInfo = headers?.clientInfo ?? Constants.Anisette.defaultClientInfo
let client = try await getClient(for: resolvedMode, clientInfo: clientInfo)
let windowsClientInfo = "<PC> <Windows;6.2(0,0);9200> <com.apple.AuthKit/1 (com.apple.iTunes/12.12.4.1)>"
let akdUserAgent = "akd/1.0 CFNetwork/808.1.4"
var clientInfo = headers?.clientInfo ?? windowsClientInfo
if clientInfo.isEmpty || clientInfo.contains("MacBook") || clientInfo.contains("<Android;") {
clientInfo = windowsClientInfo
}
var userAgent = headers?.userAgent ?? akdUserAgent
if userAgent.isEmpty || userAgent.contains("Macintosh") || userAgent.contains("Xcode") {
userAgent = akdUserAgent
}
let client = try await getClient(for: resolvedMode, clientInfo: clientInfo, userAgent: userAgent)

do {
let (rawHeaders, newBlob) = try await client.getAnisetteData(
Expand Down Expand Up @@ -470,14 +479,14 @@ public final class AnisetteDataManager: @unchecked Sendable {
}
}

private func getClient(for mode: AnisetteMode, clientInfo: String) async throws -> AnisetteClient {
private func getClient(for mode: AnisetteMode, clientInfo: String, userAgent: String = "akd/1.0 CFNetwork/808.1.4") async throws -> AnisetteClient {
switch mode {
case .remote(let server):
try FileManager.default.createDirectory(at: provisioningDir, withIntermediateDirectories: true)
return try AnisetteClient(
provisioningDir: provisioningDir,
clientInfo: clientInfo,
userAgent: Constants.Anisette.defaultUserAgent,
userAgent: userAgent,
lookupURL: Constants.Anisette.URLs.grandSlamLookup,
requiredLibraries: Constants.Anisette.Libraries.requiredNames,
provider: RemoteAnisetteDataProvider(serverURL: server)
Expand All @@ -489,7 +498,7 @@ public final class AnisetteDataManager: @unchecked Sendable {
return try AnisetteClient(
provisioningDir: targetProvDir,
clientInfo: clientInfo,
userAgent: Constants.Anisette.defaultUserAgent,
userAgent: userAgent,
lookupURL: Constants.Anisette.URLs.grandSlamLookup,
requiredLibraries: Constants.Anisette.Libraries.requiredNames,
libraryDirectoryResolver: { libDir }
Expand Down Expand Up @@ -648,7 +657,7 @@ public final class AnisetteDataManager: @unchecked Sendable {
self.localProvider = try AnisetteClient(
provisioningDir: prov,
clientInfo: clientInfo,
userAgent: Constants.Anisette.defaultUserAgent,
userAgent: "akd/1.0 CFNetwork/808.1.4",
lookupURL: Constants.Anisette.URLs.grandSlamLookup,
requiredLibraries: Constants.Anisette.Libraries.requiredNames,
libraryDirectoryResolver: { libDir }
Expand Down Expand Up @@ -699,7 +708,7 @@ public final class AnisetteDataManager: @unchecked Sendable {
let provider = try AnisetteClient(
provisioningDir: prov,
clientInfo: clientInfo,
userAgent: Constants.Anisette.defaultUserAgent,
userAgent: "akd/1.0 CFNetwork/808.1.4",
lookupURL: Constants.Anisette.URLs.grandSlamLookup,
requiredLibraries: Constants.Anisette.Libraries.requiredNames,
libraryDirectoryResolver: { libDir }
Expand Down
4 changes: 2 additions & 2 deletions Sources/Constants.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ public enum Constants {
public static let service = "iCloud"
public static let headerVersion = "1.0.1"
public static let authApp = "com.apple.gs.xcode.auth"
public static let userAgent = "AuthKit/1 (Macintosh; OS X 26.6) (com.apple.dt.Xcode/26.0)"
public static let userAgent = "akd/1.0 CFNetwork/808.1.4" // SideInstaller temporary Windows GSA fix
}

// https://idmsa.apple.com/appleauth/auth/devices
public enum AppleAuth {
public static let appIDKey = "ba2ec180e6ca6e6c6a542255453b24d6e6e5b2be0cc48bc1b0d8ad64cfe0228f"
public static let userAgent = "AuthKit/1 (Macintosh; OS X 26.6)"
public static let userAgent = "akd/1.0 CFNetwork/808.1.4" // SideInstaller temporary Windows GSA fix
}

// https://developerservices2.apple.com/services/
Expand Down
Loading