Automatic signing with an App Store Connect API key registers bundle IDs and profiles but cannot create or assign App Groups, so the archive failed. A keychain-access-groups entry needs no portal setup. The demo flag and last summary move into the same group; tests cover the round trip and the migration of a pre-complication token. Co-Authored-By: Claude Opus 5.5 <[email protected]>
23 lines
1.1 KiB
Swift
23 lines
1.1 KiB
Swift
// What the app tells the complication besides the credentials: whether it is in demo mode, and the
|
|
// last summary it saw, which the complication shows when it cannot reach the gateway. Both live in
|
|
// the shared Keychain group next to the device token, the one store the two processes share.
|
|
|
|
import Foundation
|
|
|
|
enum SharedState {
|
|
private static let demoAccount = "demo"
|
|
private static let summaryAccount = "lastSummary"
|
|
|
|
/// True while the app is in demo mode, so the complication shows the demo counts too.
|
|
static var demo: Bool {
|
|
get { DeviceStore.sharedData(demoAccount) == Data([1]) }
|
|
set { DeviceStore.setSharedData(newValue ? Data([1]) : nil, account: demoAccount) }
|
|
}
|
|
|
|
/// The last summary the app or the complication saw, or nil after signing out.
|
|
static var lastSummary: Summary? {
|
|
get { DeviceStore.sharedData(summaryAccount).flatMap { try? JSON.decoder().decode(Summary.self, from: $0) } }
|
|
set { DeviceStore.setSharedData(newValue.flatMap { try? JSON.encoder().encode($0) }, account: summaryAccount) }
|
|
}
|
|
}
|