🍦 SwiftServe Get

Menu / storage.keychain

Can Swift packages do keychain storage?

also known as: secure storage · credentials · secrets

Built into the OS — no dependency

Apple frameworkiOSmacOSwatchOStvOSvisionOSLinuxCatalyst
Security built in as of Xcode 26.6
Details

Keychain Services item CRUD (SecItem*).

serves it · confidence 0.90 · as of Xcode 26.6

serves it · confidence 0.90 · as of Xcode 26.6

serves it · confidence 0.90 · as of Xcode 26.6

serves it · confidence 0.90 · as of Xcode 26.6

serves it · confidence 0.90 · as of Xcode 26.6

not served here · confidence 0.90 · as of Xcode 26.6

serves it · confidence 0.90 · as of Xcode 26.6

PackageiOSmacOSwatchOStvOSvisionOSLinuxCatalyst
boutique as of 3.0.2
Details

serves it · confidence 0.70 · as of 3.0.2

  • SecurelyStoredValue
    Sources/Boutique/SecurelyStoredValue.swift:51
    View the line on GitHub →
    @SecurelyStoredValue property wrapper persists a single Item in the system Keychain
  • SecurelyStoredValue.set
    Sources/Boutique/SecurelyStoredValue.swift:115
    View the line on GitHub →
    func set(_ value: Item?) throws — writes the value to the Keychain
  • SecurelyStoredValue.remove
    Sources/Boutique/SecurelyStoredValue.swift:154
    View the line on GitHub →
    func remove() throws — removes the value from the Keychain

serves it · confidence 0.70 · as of 3.0.2

  • SecurelyStoredValue
    Sources/Boutique/SecurelyStoredValue.swift:51
    View the line on GitHub →
    @SecurelyStoredValue property wrapper persists a single Item in the system Keychain
  • SecurelyStoredValue.set
    Sources/Boutique/SecurelyStoredValue.swift:115
    View the line on GitHub →
    func set(_ value: Item?) throws — writes the value to the Keychain
  • SecurelyStoredValue.remove
    Sources/Boutique/SecurelyStoredValue.swift:154
    View the line on GitHub →
    func remove() throws — removes the value from the Keychain

serves it · confidence 0.70 · as of 3.0.2

  • SecurelyStoredValue
    Sources/Boutique/SecurelyStoredValue.swift:51
    View the line on GitHub →
    @SecurelyStoredValue property wrapper persists a single Item in the system Keychain No explicit watchOS floor in Package.swift (manifest lists only iOS/macOS); symbol anchors are unconditional and the digest resolves them present on watchOS.
  • SecurelyStoredValue.set
    Sources/Boutique/SecurelyStoredValue.swift:115
    View the line on GitHub →
    func set(_ value: Item?) throws — writes the value to the Keychain
  • SecurelyStoredValue.remove
    Sources/Boutique/SecurelyStoredValue.swift:154
    View the line on GitHub →
    func remove() throws — removes the value from the Keychain

serves it · confidence 0.70 · as of 3.0.2

  • SecurelyStoredValue
    Sources/Boutique/SecurelyStoredValue.swift:51
    View the line on GitHub →
    @SecurelyStoredValue property wrapper persists a single Item in the system Keychain No explicit tvOS floor in Package.swift (manifest lists only iOS/macOS); symbol anchors are unconditional and the digest resolves them present on tvOS.
  • SecurelyStoredValue.set
    Sources/Boutique/SecurelyStoredValue.swift:115
    View the line on GitHub →
    func set(_ value: Item?) throws — writes the value to the Keychain
  • SecurelyStoredValue.remove
    Sources/Boutique/SecurelyStoredValue.swift:154
    View the line on GitHub →
    func remove() throws — removes the value from the Keychain

serves it · confidence 0.70 · as of 3.0.2

  • SecurelyStoredValue
    Sources/Boutique/SecurelyStoredValue.swift:51
    View the line on GitHub →
    @SecurelyStoredValue property wrapper persists a single Item in the system Keychain No explicit visionOS floor in Package.swift (manifest lists only iOS/macOS); symbol anchors are unconditional and the digest resolves them present on visionOS.
  • SecurelyStoredValue.set
    Sources/Boutique/SecurelyStoredValue.swift:115
    View the line on GitHub →
    func set(_ value: Item?) throws — writes the value to the Keychain
  • SecurelyStoredValue.remove
    Sources/Boutique/SecurelyStoredValue.swift:154
    View the line on GitHub →
    func remove() throws — removes the value from the Keychain
?

not verified yet · confidence 0.15 · as of 3.0.2

  • SecurelyStoredValue
    Sources/Boutique/SecurelyStoredValue.swift:51
    View the line on GitHub →
    Surface digest resolves this decl present on linux (no os() conditions anywhere in the public surface), but the module unconditionally imports SwiftUI, Security, and Observation; Package.swift and README declare only iOS 17+/macOS 14+. Linux buildability unverified — honest answer is unknown.

serves it · confidence 0.70 · as of 3.0.2

  • SecurelyStoredValue
    Sources/Boutique/SecurelyStoredValue.swift:51
    View the line on GitHub →
    @SecurelyStoredValue property wrapper persists a single Item in the system Keychain No explicit macCatalyst floor in Package.swift (manifest lists only iOS/macOS); symbol anchors are unconditional and the digest resolves them present on macCatalyst.
  • SecurelyStoredValue.set
    Sources/Boutique/SecurelyStoredValue.swift:115
    View the line on GitHub →
    func set(_ value: Item?) throws — writes the value to the Keychain
  • SecurelyStoredValue.remove
    Sources/Boutique/SecurelyStoredValue.swift:154
    View the line on GitHub →
    func remove() throws — removes the value from the Keychain
keychainaccess as of v4.2.2
Details

serves it · confidence 0.90 · as of v4.2.2

  • Keychain
    Lib/KeychainAccess/Keychain.swift:409
    View the line on GitHub →
    Core Keychain wrapper class; unconditional, no platform gaps in surface digest.
  • Keychain.set
    Lib/KeychainAccess/Keychain.swift:664
    View the line on GitHub →
    func set(_ value: String, key:) throws — unconditional write path.
  • Keychain.get
    Lib/KeychainAccess/Keychain.swift:595
    View the line on GitHub →
    func get(_ key:) throws -> String? — unconditional read path.

serves it · confidence 0.90 · as of v4.2.2

serves it · confidence 0.90 · as of v4.2.2

  • Keychain
    Lib/KeychainAccess/Keychain.swift:409
    View the line on GitHub →
    Core class present on watchOS (no watchOS gap). Only auth-UI conveniences (e.g. Keychain.authenticationPolicy, Keychain.authenticationPrompt) are watchOS-absent; core CRUD is not.
  • Keychain.set
    Lib/KeychainAccess/Keychain.swift:664
    View the line on GitHub →
    Unconditional write path, no watchOS gap.
  • Keychain.get
    Lib/KeychainAccess/Keychain.swift:595
    View the line on GitHub →
    Unconditional read path, no watchOS gap.

serves it · confidence 0.90 · as of v4.2.2

serves it · confidence 0.75 · as of v4.2.2

?

not verified yet · confidence 0.20 · as of v4.2.2

  • Package.swift:15
    View the line on GitHub →
    Manifest lists only Apple platform floors (macOS/iOS/tvOS/watchOS); that is not absence evidence. The digest has no os() guard excluding linux from core CRUD symbols, but the target unconditionally imports the Security framework, which the surface digest does not model — build feasibility on Linux is unverified, so status stays unknown.

serves it · confidence 0.85 · as of v4.2.2

  • Keychain
    Lib/KeychainAccess/Keychain.swift:409
    View the line on GitHub →
    Core class present on macCatalyst. Only deprecated Accessibility.always / Accessibility.alwaysThisDeviceOnly cases and iOS-only shared-web-credential conveniences are macCatalyst-absent.
  • Keychain.set
    Lib/KeychainAccess/Keychain.swift:664
    View the line on GitHub →
    Unconditional write path, no macCatalyst gap.
  • Keychain.get
    Lib/KeychainAccess/Keychain.swift:595
    View the line on GitHub →
    Unconditional read path, no macCatalyst gap.
valet as of 5.1.0
Details

serves it · confidence 0.90 · as of 5.1.0

  • Valet
    Sources/Valet/Valet.swift:21
    View the line on GitHub →
    Core class, doc: 'Reads and writes keychain elements.' Unconditional, no platform gaps.
  • Valet.setObject
    Sources/Valet/Valet.swift:248
    View the line on GitHub →
    Keychain write API, present on all platforms per surface digest.
  • Valet.object
    Sources/Valet/Valet.swift:270
    View the line on GitHub →
    Keychain read API, present on all platforms per surface digest.

serves it · confidence 0.90 · as of 5.1.0

  • Valet
    Sources/Valet/Valet.swift:21
    View the line on GitHub →
    Core class, unconditional, no platform gaps.
  • Valet.setObject
    Sources/Valet/Valet.swift:248
    View the line on GitHub →
    Keychain write API, present on all platforms per surface digest.
  • Valet.migrateObjectsFromPreCatalina
    #if os(macOS)
    Sources/Valet/Valet.swift:525
    View the line on GitHub →
    macOS-only keychain migration API corroborates first-class macOS keychain support.

serves it · confidence 0.90 · as of 5.1.0

serves it · confidence 0.90 · as of 5.1.0

serves it · confidence 0.80 · as of 5.1.0

  • Valet
    Sources/Valet/Valet.swift:21
    View the line on GitHub →
    Core class resolves PRESENT on visionOS (no gap). The extractor models visionOS explicitly (conditional decls elsewhere list it), so absence of a gap here is meaningful.
  • Valet.setObject
    Sources/Valet/Valet.swift:248
    View the line on GitHub →
    Keychain write API, present on all platforms per surface digest.
  • Package.swift:8
    View the line on GitHub →
    No visionOS floor declared in Package.swift; confidence lowered accordingly.
?

not verified yet · confidence 0.20 · as of 5.1.0

  • Package.swift:8
    View the line on GitHub →
    Linux is not declared in the manifest (not absence evidence per rules). Core decls carry no os() guards so they resolve textually present on linux, but the Keychain depends on Apple's Security framework and Swift-parse extraction cannot establish Linux compilability. No guard/availability evidence of absence exists, so status stays unknown.

serves it · confidence 0.85 · as of 5.1.0

✓ serves it · ◐ with conditions · ✕ not served (proven) · ? not verified yet — hover any verdict for the receipt, click to pin it