Compare commits

...

1 Commits

Author SHA1 Message Date
Thomas Way
9f82037d44 fix(mobile): isolate auth to app instance
Credentials are currently shared for the whole app group, which causes
debug, test flight and release versions to conflict with each other.
This results in really weird behaviour like one instance of the app
acknowledging syncs which the other instances aren't aware of.
2026-03-28 01:12:06 +00:00
2 changed files with 6 additions and 11 deletions

View File

@@ -88,8 +88,8 @@ class NetworkApiImpl: NetworkApi {
}
}
if headers != UserDefaults.group.dictionary(forKey: HEADERS_KEY) as? [String: String] {
UserDefaults.group.set(headers, forKey: HEADERS_KEY)
if headers != UserDefaults.standard.dictionary(forKey: HEADERS_KEY) as? [String: String] {
UserDefaults.standard.set(headers, forKey: HEADERS_KEY)
URLSessionManager.shared.recreateSession()
}
}

View File

@@ -4,7 +4,6 @@ import native_video_player
let CLIENT_CERT_LABEL = "app.alextran.immich.client_identity"
let HEADERS_KEY = "immich.request_headers"
let SERVER_URLS_KEY = "immich.server_urls"
let APP_GROUP = "group.app.immich.share"
let COOKIE_EXPIRY_DAYS: TimeInterval = 400
enum AuthCookie: CaseIterable {
@@ -28,10 +27,6 @@ enum AuthCookie: CaseIterable {
static let names: Set<String> = Set(allCases.map(\.name))
}
extension UserDefaults {
static let group = UserDefaults(suiteName: APP_GROUP)!
}
/// Manages a shared URLSession with SSL configuration support.
/// Old sessions are kept alive by Dart's FFI retain until all isolates release them.
class URLSessionManager: NSObject {
@@ -55,7 +50,7 @@ class URLSessionManager: NSObject {
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "unknown"
return "Immich_iOS_\(version)"
}()
static let cookieStorage = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: APP_GROUP)
static let cookieStorage = HTTPCookieStorage.shared
private static var serverUrls: [String] = []
private static var isSyncing = false
@@ -67,7 +62,7 @@ class URLSessionManager: NSObject {
delegate = URLSessionManagerDelegate()
session = Self.buildSession(delegate: delegate)
super.init()
Self.serverUrls = UserDefaults.group.stringArray(forKey: SERVER_URLS_KEY) ?? []
Self.serverUrls = UserDefaults.standard.stringArray(forKey: SERVER_URLS_KEY) ?? []
NotificationCenter.default.addObserver(
Self.self,
selector: #selector(Self.cookiesDidChange),
@@ -83,7 +78,7 @@ class URLSessionManager: NSObject {
static func setServerUrls(_ urls: [String]) {
guard urls != serverUrls else { return }
serverUrls = urls
UserDefaults.group.set(urls, forKey: SERVER_URLS_KEY)
UserDefaults.standard.set(urls, forKey: SERVER_URLS_KEY)
syncAuthCookies()
}
@@ -151,7 +146,7 @@ class URLSessionManager: NSObject {
config.httpMaximumConnectionsPerHost = 64
config.timeoutIntervalForRequest = 60
var headers = UserDefaults.group.dictionary(forKey: HEADERS_KEY) as? [String: String] ?? [:]
var headers = UserDefaults.standard.dictionary(forKey: HEADERS_KEY) as? [String: String] ?? [:]
headers["User-Agent"] = headers["User-Agent"] ?? userAgent
config.httpAdditionalHeaders = headers