From fe3ede74ff9caeb23312b4bed4664a33722ac318 Mon Sep 17 00:00:00 2001 From: Rita Zerrizuela Date: Thu, 16 Jan 2025 19:27:31 +0000 Subject: [PATCH] Guard changes with `canImport` for older Xcode versions --- SimpleKeychain/Accessibility.swift | 8 +++++++- SimpleKeychain/SimpleKeychain.swift | 21 +++++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/SimpleKeychain/Accessibility.swift b/SimpleKeychain/Accessibility.swift index 36cde3f..ea54dd4 100644 --- a/SimpleKeychain/Accessibility.swift +++ b/SimpleKeychain/Accessibility.swift @@ -1,7 +1,7 @@ import Security /// Represents the accessibility types of Keychain items. It's a mirror of `kSecAttrAccessible` values. -public enum Accessibility: RawRepresentable, Sendable { +public enum Accessibility: RawRepresentable { /// The data in the Keychain item can be accessed only while the device is unlocked by the user. /// See [kSecAttrAccessibleWhenUnlocked](https://developer.apple.com/documentation/security/ksecattraccessiblewhenunlocked). @@ -50,3 +50,9 @@ public enum Accessibility: RawRepresentable, Sendable { } } } + +// MARK: - Sendable conformance + +#if canImport(_Concurrency) +extension Accessibility: Sendable {} +#endif diff --git a/SimpleKeychain/SimpleKeychain.swift b/SimpleKeychain/SimpleKeychain.swift index 8ff3d07..2e01b20 100644 --- a/SimpleKeychain/SimpleKeychain.swift +++ b/SimpleKeychain/SimpleKeychain.swift @@ -1,7 +1,12 @@ import Foundation import Security #if canImport(LocalAuthentication) +#if canImport(_Concurrency) @preconcurrency import LocalAuthentication +#else +// swiftlint:disable:next duplicate_imports +import LocalAuthentication +#endif #endif typealias RetrieveFunction = (_ query: CFDictionary, _ result: UnsafeMutablePointer?) -> OSStatus @@ -10,16 +15,22 @@ typealias RemoveFunction = (_ query: CFDictionary) -> OSStatus /// A simple Keychain wrapper for iOS, macOS, tvOS, and watchOS. /// Supports sharing credentials with an **access group** or through **iCloud**, and integrating /// **Touch ID / Face ID**. -public struct SimpleKeychain: Sendable { +public struct SimpleKeychain { let service: String let accessGroup: String? let accessibility: Accessibility let accessControlFlags: SecAccessControlCreateFlags? let isSynchronizable: Bool - nonisolated(unsafe) let attributes: [String: Any] + #if canImport(_Concurrency) + nonisolated(unsafe) let attributes: [String: Any] nonisolated(unsafe) var retrieve: RetrieveFunction = SecItemCopyMatching nonisolated(unsafe) var remove: RemoveFunction = SecItemDelete + #else + let attributes: [String: Any] + var retrieve: RetrieveFunction = SecItemCopyMatching + var remove: RemoveFunction = SecItemDelete + #endif #if canImport(LocalAuthentication) && !os(tvOS) let context: LAContext? @@ -321,3 +332,9 @@ extension SimpleKeychain { return query } } + +// MARK: - Sendable conformance + +#if canImport(_Concurrency) +extension SimpleKeychain: Sendable {} +#endif