The Swift Package Index logo.Swift Package Index

Track the adoption of Swift 6 strict concurrency checks for data race safety. How many packages are Ready for Swift 6?

Build Information

Successful build of EFStorage, reference 0.4.1 (05b45b), with Swift 6.0 for macOS (SPM) on 3 Nov 2024 01:54:47 UTC.

Swift 6 data race errors: 4

Build Command

env DEVELOPER_DIR=/Applications/Xcode-16.1.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete

Build Log

========================================
RunAll
========================================
Builder version: 4.56.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/EFPrefix/EFStorage.git
Reference: 0.4.1
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/EFPrefix/EFStorage
 * tag               0.4.1      -> FETCH_HEAD
HEAD is now at 05b45b2 0.4.1
Cloned https://github.com/EFPrefix/EFStorage.git
Revision (git rev-parse @):
05b45b2f7acef73ca8021fdb9e1ab13e7af7f690
SUCCESS checkout https://github.com/EFPrefix/EFStorage.git at 0.4.1
Fetching https://github.com/EFPrefix/YYCache.git
Fetching https://github.com/kishikawakatsumi/KeychainAccess.git
[5/472] Fetching yycache
[115/4861] Fetching yycache, keychainaccess
Fetched https://github.com/EFPrefix/YYCache.git from cache (1.41s)
[4038/4389] Fetching keychainaccess
Fetched https://github.com/kishikawakatsumi/KeychainAccess.git from cache (1.49s)
Computing version for https://github.com/EFPrefix/YYCache.git
Computed https://github.com/EFPrefix/YYCache.git at 1.0.5 (0.69s)
Computing version for https://github.com/kishikawakatsumi/KeychainAccess.git
Computed https://github.com/kishikawakatsumi/KeychainAccess.git at 3.2.0 (2.71s)
Creating working copy for https://github.com/EFPrefix/YYCache.git
Working copy of https://github.com/EFPrefix/YYCache.git resolved at 1.0.5
Creating working copy for https://github.com/kishikawakatsumi/KeychainAccess.git
Working copy of https://github.com/kishikawakatsumi/KeychainAccess.git resolved at 3.2.0
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
  "identity": ".resolve-product-dependencies",
  "name": "resolve-dependencies",
  "url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "version": "unspecified",
  "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "dependencies": [
    {
      "identity": "efstorage",
      "name": "EFStorage",
      "url": "https://github.com/EFPrefix/EFStorage.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/EFStorage",
      "dependencies": [
        {
          "identity": "keychainaccess",
          "name": "KeychainAccess",
          "url": "https://github.com/kishikawakatsumi/KeychainAccess.git",
          "version": "3.2.1",
          "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/KeychainAccess",
          "dependencies": [
          ]
        },
        {
          "identity": "yycache",
          "name": "YYCache",
          "url": "https://github.com/EFPrefix/YYCache.git",
          "version": "1.0.5",
          "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/YYCache",
          "dependencies": [
          ]
        }
      ]
    }
  ]
}
Fetching https://github.com/EFPrefix/EFStorage.git
[1/957] Fetching efstorage
Fetched https://github.com/EFPrefix/EFStorage.git from cache (0.93s)
Fetching https://github.com/EFPrefix/YYCache.git from cache
Fetching https://github.com/kishikawakatsumi/KeychainAccess.git from cache
Fetched https://github.com/EFPrefix/YYCache.git from cache (0.58s)
Fetched https://github.com/kishikawakatsumi/KeychainAccess.git from cache (0.58s)
Computing version for https://github.com/EFPrefix/YYCache.git
Computed https://github.com/EFPrefix/YYCache.git at 1.0.5 (0.03s)
Computing version for https://github.com/kishikawakatsumi/KeychainAccess.git
Computed https://github.com/kishikawakatsumi/KeychainAccess.git at 3.2.1 (0.66s)
Creating working copy for https://github.com/kishikawakatsumi/KeychainAccess.git
Working copy of https://github.com/kishikawakatsumi/KeychainAccess.git resolved at 3.2.1
Creating working copy for https://github.com/EFPrefix/YYCache.git
Working copy of https://github.com/EFPrefix/YYCache.git resolved at 1.0.5
Creating working copy for https://github.com/EFPrefix/EFStorage.git
Working copy of https://github.com/EFPrefix/EFStorage.git resolved at 0.4.1 (05b45b2)
warning: '.resolve-product-dependencies': dependency 'efstorage' is not used by any target
Found 2 product dependencies
  - KeychainAccess
  - YYCache
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.0
Building package at path:  $PWD
https://github.com/EFPrefix/EFStorage.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.1.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete
Building for debugging...
[0/10] Write sources
[5/10] Write swift-version--7754E27361AE5C74.txt
[6/20] Compiling YYCache YYCache.m
[7/20] Compiling YYCache YYDiskCache.m
[8/20] Compiling YYCache YYMemoryCache.m
[9/20] Compiling YYCache YYKVStorage.m
[11/20] Compiling EFStorageCore EFContentWrapper.swift
[12/20] Compiling EFStorageCore EFStorage.swift
[13/20] Compiling EFStorageCore EFUnderlyingStorage.swift
[14/20] Compiling EFStorageCore EFStorageInternal.swift
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageCore/EFStorageInternal.swift:21:24: warning: static property '_efStorages' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
19 |     internal typealias Record = [String: NSMapTable<NSString, AnyObject>]
20 |
21 |     private static var _efStorages = Record()
   |                        |- warning: static property '_efStorages' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                        |- note: convert '_efStorages' to a 'let' constant to make 'Sendable' shared state immutable
   |                        |- note: annotate '_efStorages' with '@MainActor' if property should only be accessed from the main actor
   |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
22 |     private static let lock = NSLock()
23 |
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageCore/EFStorageInternal.swift:44:23: warning: static property 'threshold' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
42 |     /// Minimum number of entries for different types of singleton refrences
43 |     /// in cache before cleanup happens. Default is (arbitrarily chosen as) 10.
44 |     public static var threshold: UInt = 10
   |                       |- warning: static property 'threshold' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'threshold' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: annotate 'threshold' with '@MainActor' if property should only be accessed from the main actor
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
45 |
46 |     /// Remove all map tables that no longer holds any refrence.
[15/20] Compiling EFStorageCore EFSingleInstanceStorageReference.swift
[16/20] Compiling EFStorageCore EFSingleInstanceStorageReferenceWrapper.swift
[17/20] Compiling EFStorageCore EFOptionalContentWrapper.swift
[18/20] Emitting module EFStorageCore
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageCore/EFStorageInternal.swift:21:24: warning: static property '_efStorages' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
19 |     internal typealias Record = [String: NSMapTable<NSString, AnyObject>]
20 |
21 |     private static var _efStorages = Record()
   |                        |- warning: static property '_efStorages' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                        |- note: convert '_efStorages' to a 'let' constant to make 'Sendable' shared state immutable
   |                        |- note: annotate '_efStorages' with '@MainActor' if property should only be accessed from the main actor
   |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
22 |     private static let lock = NSLock()
23 |
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageCore/EFStorageInternal.swift:44:23: warning: static property 'threshold' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
42 |     /// Minimum number of entries for different types of singleton refrences
43 |     /// in cache before cleanup happens. Default is (arbitrarily chosen as) 10.
44 |     public static var threshold: UInt = 10
   |                       |- warning: static property 'threshold' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'threshold' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: annotate 'threshold' with '@MainActor' if property should only be accessed from the main actor
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
45 |
46 |     /// Remove all map tables that no longer holds any refrence.
[19/30] Emitting module KeychainAccess
[20/30] Compiling KeychainAccess Keychain.swift
[21/36] Compiling EFStorageKeychainAccess KeychainAccess+RawRepresentable.swift
[22/36] Compiling EFStorageYYCache YYCache+NSCoding.swift
[23/36] Compiling EFStorageYYCache YYCache+Codable.swift
[24/36] Emitting module EFStorageUserDefaults
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageUserDefaults/EFStorage+UserDefaults.swift:13:1: warning: extension declares a conformance of imported type 'UserDefaults' to imported protocol 'EFUnderlyingStorage'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
 11 | #endif
 12 |
 13 | extension UserDefaults: EFUnderlyingStorage {
    | |- warning: extension declares a conformance of imported type 'UserDefaults' to imported protocol 'EFUnderlyingStorage'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
 14 |     public static var shared: UserDefaults = UserDefaults.standard
 15 |     public dynamic class func makeDefault() -> Self {
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageUserDefaults/EFStorage+UserDefaults.swift:14:23: warning: static property 'shared' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 12 |
 13 | extension UserDefaults: EFUnderlyingStorage {
 14 |     public static var shared: UserDefaults = UserDefaults.standard
    |                       |- warning: static property 'shared' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'shared' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: annotate 'shared' with '@MainActor' if property should only be accessed from the main actor
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 15 |     public dynamic class func makeDefault() -> Self {
 16 |         return (shared as? Self) ?? Self()
[25/36] Compiling EFStorageYYCache EFStorage+YYCache.swift
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageYYCache/EFStorage+YYCache.swift:15:1: warning: extension declares a conformance of imported type 'YYCache' to imported protocols 'EFFailableUnderlyingStorage', 'EFUnderlyingStorage'; this will not behave correctly if the owners of 'YYCache' introduce this conformance in the future
 13 | #endif
 14 |
 15 | extension YYCache: EFFailableUnderlyingStorage {
    | |- warning: extension declares a conformance of imported type 'YYCache' to imported protocols 'EFFailableUnderlyingStorage', 'EFUnderlyingStorage'; this will not behave correctly if the owners of 'YYCache' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
 16 |     private static let name = Bundle.main.bundleIdentifier ?? "EFStorage"
 17 |     private static let shared: YYCache? = YYCache(name: name)
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageYYCache/EFStorage+YYCache.swift:17:24: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'YYCache?' may have shared mutable state; this is an error in the Swift 6 language mode
 15 | extension YYCache: EFFailableUnderlyingStorage {
 16 |     private static let name = Bundle.main.bundleIdentifier ?? "EFStorage"
 17 |     private static let shared: YYCache? = YYCache(name: name)
    |                        `- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'YYCache?' may have shared mutable state; this is an error in the Swift 6 language mode
 18 |     public dynamic class func makeDefault() -> Self? {
 19 |         return (shared as? Self) ?? Self(name: name)
YYCache.YYCache:1:12: note: class 'YYCache' does not conform to the 'Sendable' protocol
 1 | open class YYCache : NSObject {
   |            `- note: class 'YYCache' does not conform to the 'Sendable' protocol
 2 |     open var name: String { get }
 3 |     open var memoryCache: YYMemoryCache { get }
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageYYCache/EFStorage+YYCache.swift:10:12: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'YYCache'
  8 | #if canImport(YYCache)
  9 | import Foundation
 10 | @_exported import YYCache
    |            `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'YYCache'
 11 | #if canImport(EFStorageCore)
 12 | @_exported import EFStorageCore
    :
 15 | extension YYCache: EFFailableUnderlyingStorage {
 16 |     private static let name = Bundle.main.bundleIdentifier ?? "EFStorage"
 17 |     private static let shared: YYCache? = YYCache(name: name)
    |                        |- note: annotate 'shared' with '@MainActor' if property should only be accessed from the main actor
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 18 |     public dynamic class func makeDefault() -> Self? {
 19 |         return (shared as? Self) ?? Self(name: name)
[26/36] Emitting module EFStorageYYCache
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageYYCache/EFStorage+YYCache.swift:15:1: warning: extension declares a conformance of imported type 'YYCache' to imported protocols 'EFFailableUnderlyingStorage', 'EFUnderlyingStorage'; this will not behave correctly if the owners of 'YYCache' introduce this conformance in the future
 13 | #endif
 14 |
 15 | extension YYCache: EFFailableUnderlyingStorage {
    | |- warning: extension declares a conformance of imported type 'YYCache' to imported protocols 'EFFailableUnderlyingStorage', 'EFUnderlyingStorage'; this will not behave correctly if the owners of 'YYCache' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
 16 |     private static let name = Bundle.main.bundleIdentifier ?? "EFStorage"
 17 |     private static let shared: YYCache? = YYCache(name: name)
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageYYCache/EFStorage+YYCache.swift:17:24: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'YYCache?' may have shared mutable state; this is an error in the Swift 6 language mode
 15 | extension YYCache: EFFailableUnderlyingStorage {
 16 |     private static let name = Bundle.main.bundleIdentifier ?? "EFStorage"
 17 |     private static let shared: YYCache? = YYCache(name: name)
    |                        `- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'YYCache?' may have shared mutable state; this is an error in the Swift 6 language mode
 18 |     public dynamic class func makeDefault() -> Self? {
 19 |         return (shared as? Self) ?? Self(name: name)
YYCache.YYCache:1:12: note: class 'YYCache' does not conform to the 'Sendable' protocol
 1 | open class YYCache : NSObject {
   |            `- note: class 'YYCache' does not conform to the 'Sendable' protocol
 2 |     open var name: String { get }
 3 |     open var memoryCache: YYMemoryCache { get }
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageYYCache/EFStorage+YYCache.swift:10:12: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'YYCache'
  8 | #if canImport(YYCache)
  9 | import Foundation
 10 | @_exported import YYCache
    |            `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'YYCache'
 11 | #if canImport(EFStorageCore)
 12 | @_exported import EFStorageCore
    :
 15 | extension YYCache: EFFailableUnderlyingStorage {
 16 |     private static let name = Bundle.main.bundleIdentifier ?? "EFStorage"
 17 |     private static let shared: YYCache? = YYCache(name: name)
    |                        |- note: annotate 'shared' with '@MainActor' if property should only be accessed from the main actor
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 18 |     public dynamic class func makeDefault() -> Self? {
 19 |         return (shared as? Self) ?? Self(name: name)
[27/36] Compiling EFStorageUserDefaults EFStorage+UserDefaults.swift
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageUserDefaults/EFStorage+UserDefaults.swift:13:1: warning: extension declares a conformance of imported type 'UserDefaults' to imported protocol 'EFUnderlyingStorage'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
 11 | #endif
 12 |
 13 | extension UserDefaults: EFUnderlyingStorage {
    | |- warning: extension declares a conformance of imported type 'UserDefaults' to imported protocol 'EFUnderlyingStorage'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
 14 |     public static var shared: UserDefaults = UserDefaults.standard
 15 |     public dynamic class func makeDefault() -> Self {
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageUserDefaults/EFStorage+UserDefaults.swift:14:23: warning: static property 'shared' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 12 |
 13 | extension UserDefaults: EFUnderlyingStorage {
 14 |     public static var shared: UserDefaults = UserDefaults.standard
    |                       |- warning: static property 'shared' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'shared' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: annotate 'shared' with '@MainActor' if property should only be accessed from the main actor
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 15 |     public dynamic class func makeDefault() -> Self {
 16 |         return (shared as? Self) ?? Self()
[28/36] Compiling EFStorageKeychainAccess KeychainAccess+NSCoding.swift
[29/36] Compiling EFStorageKeychainAccess KeychainAccess+Codable.swift
[30/36] Compiling EFStorageKeychainAccess KeychainAccess+Primitives.swift
[31/36] Compiling EFStorageKeychainAccess EFStorage+KeychainAccess.swift
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageKeychainAccess/EFStorage+KeychainAccess.swift:14:1: warning: extension declares a conformance of imported type 'Keychain' to imported protocols 'EFUnderlyingStorage', 'Equatable'; this will not behave correctly if the owners of 'KeychainAccess' introduce this conformance in the future
 12 | #endif
 13 |
 14 | extension Keychain: EFUnderlyingStorage {
    | |- warning: extension declares a conformance of imported type 'Keychain' to imported protocols 'EFUnderlyingStorage', 'Equatable'; this will not behave correctly if the owners of 'KeychainAccess' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
 15 |     public dynamic class func makeDefault() -> Self {
 16 |         return Self()
[32/36] Emitting module EFStorageKeychainAccess
/Users/admin/builder/spi-builder-workspace/Sources/EFStorageKeychainAccess/EFStorage+KeychainAccess.swift:14:1: warning: extension declares a conformance of imported type 'Keychain' to imported protocols 'EFUnderlyingStorage', 'Equatable'; this will not behave correctly if the owners of 'KeychainAccess' introduce this conformance in the future
 12 | #endif
 13 |
 14 | extension Keychain: EFUnderlyingStorage {
    | |- warning: extension declares a conformance of imported type 'Keychain' to imported protocols 'EFUnderlyingStorage', 'Equatable'; this will not behave correctly if the owners of 'KeychainAccess' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
 15 |     public dynamic class func makeDefault() -> Self {
 16 |         return Self()
[33/36] Compiling EFStorageUserDefaults UserDefaults+RawRepresentable.swift
[34/36] Compiling EFStorageUserDefaults UserDefaults+NSCoding.swift
[35/36] Compiling EFStorageUserDefaults UserDefaults+Codable.swift
[36/36] Compiling EFStorageUserDefaults UserDefaults+Primitives.swift
Build complete! (13.41s)
Build complete.
{
  "dependencies" : [
    {
      "identity" : "keychainaccess",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "3.2.0",
            "upper_bound" : "4.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/kishikawakatsumi/KeychainAccess.git"
    },
    {
      "identity" : "yycache",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.0.5",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/EFPrefix/YYCache.git"
    }
  ],
  "manifest_display_name" : "EFStorage",
  "name" : "EFStorage",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
  ],
  "products" : [
    {
      "name" : "EFStorage",
      "targets" : [
        "EFStorageCore",
        "EFStorageKeychainAccess",
        "EFStorageUserDefaults",
        "EFStorageYYCache"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "EFStorageCore",
      "targets" : [
        "EFStorageCore"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "EFStorageKeychainAccess",
      "targets" : [
        "EFStorageKeychainAccess"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "EFStorageUserDefaults",
      "targets" : [
        "EFStorageUserDefaults"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "EFStorageYYCache",
      "targets" : [
        "EFStorageYYCache"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "EFStorageYYCache",
      "module_type" : "SwiftTarget",
      "name" : "EFStorageYYCache",
      "path" : "Sources/EFStorageYYCache",
      "product_dependencies" : [
        "YYCache"
      ],
      "product_memberships" : [
        "EFStorage",
        "EFStorageYYCache"
      ],
      "sources" : [
        "EFStorage+YYCache.swift",
        "YYCache+Codable.swift",
        "YYCache+NSCoding.swift"
      ],
      "target_dependencies" : [
        "EFStorageCore"
      ],
      "type" : "library"
    },
    {
      "c99name" : "EFStorageUserDefaults",
      "module_type" : "SwiftTarget",
      "name" : "EFStorageUserDefaults",
      "path" : "Sources/EFStorageUserDefaults",
      "product_memberships" : [
        "EFStorage",
        "EFStorageUserDefaults"
      ],
      "sources" : [
        "EFStorage+UserDefaults.swift",
        "UserDefaults+Codable.swift",
        "UserDefaults+NSCoding.swift",
        "UserDefaults+Primitives.swift",
        "UserDefaults+RawRepresentable.swift"
      ],
      "target_dependencies" : [
        "EFStorageCore"
      ],
      "type" : "library"
    },
    {
      "c99name" : "EFStorageTests",
      "module_type" : "SwiftTarget",
      "name" : "EFStorageTests",
      "path" : "Tests/EFStorageTests",
      "sources" : [
        "EFStorageTests.swift",
        "XCTestManifests.swift"
      ],
      "target_dependencies" : [
        "EFStorageCore",
        "EFStorageKeychainAccess",
        "EFStorageUserDefaults"
      ],
      "type" : "test"
    },
    {
      "c99name" : "EFStorageKeychainAccess",
      "module_type" : "SwiftTarget",
      "name" : "EFStorageKeychainAccess",
      "path" : "Sources/EFStorageKeychainAccess",
      "product_dependencies" : [
        "KeychainAccess"
      ],
      "product_memberships" : [
        "EFStorage",
        "EFStorageKeychainAccess"
      ],
      "sources" : [
        "EFStorage+KeychainAccess.swift",
        "KeychainAccess+Codable.swift",
        "KeychainAccess+NSCoding.swift",
        "KeychainAccess+Primitives.swift",
        "KeychainAccess+RawRepresentable.swift"
      ],
      "target_dependencies" : [
        "EFStorageCore"
      ],
      "type" : "library"
    },
    {
      "c99name" : "EFStorageCore",
      "module_type" : "SwiftTarget",
      "name" : "EFStorageCore",
      "path" : "Sources/EFStorageCore",
      "product_memberships" : [
        "EFStorage",
        "EFStorageCore",
        "EFStorageKeychainAccess",
        "EFStorageUserDefaults",
        "EFStorageYYCache"
      ],
      "sources" : [
        "EFContentWrapper.swift",
        "EFOptionalContentWrapper.swift",
        "EFSingleInstanceStorageReference.swift",
        "EFSingleInstanceStorageReferenceWrapper.swift",
        "EFStorage.swift",
        "EFStorageInternal.swift",
        "EFUnderlyingStorage.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.1"
}
Done.