The Swift Package Index logo.Swift Package Index

Build Information

Failed to build KeyVine, reference main (f467a1), with Swift 6.3 for Wasm on 13 Apr 2026 19:20:58 UTC.

Build Command

bash -c docker run --pull=always --rm -v "checkouts-4606859-0":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/swiftpackageindex/spi-images:wasm-6.3-latest swift build --swift-sdk swift-6.3-RELEASE_wasm 2>&1

Build Log

========================================
RunAll
========================================
Builder version: 4.70.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/ptsochantaris/key-vine.git
Reference: main
Initialized empty Git repository in /host/spi-builder-workspace/.git/
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: 	git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: 	git branch -m <name>
From https://github.com/ptsochantaris/key-vine
 * branch            main       -> FETCH_HEAD
 * [new branch]      main       -> origin/main
HEAD is now at f467a1f Bumping Swift tools to 6.0 and marking KeyVine as Sendable
Cloned https://github.com/ptsochantaris/key-vine.git
Revision (git rev-parse @):
f467a1f3f096ea9abc75a7f2ea3425c56184bef4
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/ptsochantaris/key-vine.git at main
========================================
Build
========================================
Selected platform:         wasm
Swift version:             6.3
Building package at path:  $PWD
https://github.com/ptsochantaris/key-vine.git
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-4606859-0":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/swiftpackageindex/spi-images:wasm-6.3-latest swift build --swift-sdk swift-6.3-RELEASE_wasm 2>&1
wasm-6.3-latest: Pulling from swiftpackageindex/spi-images
Digest: sha256:d69f4e7582c319245442d62a08b2d7c7fd5a0c0c69f5d2ef11d1530cd8d3329b
Status: Image is up to date for registry.gitlab.com/swiftpackageindex/spi-images:wasm-6.3-latest
Building for debugging...
[0/2] Write sources
[1/2] Write swift-version-24593BA9C3E375BF.txt
[3/6] Compiling KeyVine KeyVineStringConvertible.swift
[4/6] Compiling KeyVine KeyVine.swift
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:112:53: error: cannot find type 'CFString' in scope
110 |     }
111 |
112 |     private nonisolated(unsafe) let templateQuery: [CFString: Any]
    |                                                     `- error: cannot find type 'CFString' in scope
113 |
114 |     /// Initialise a key vine using a pair of identifiers. They can in theory be anything, but for sandboxed and app store apps,
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:62:26: error: cannot find type 'OSStatus' in scope
 60 |     /// the property and subscript syntax cannot throw errors.
 61 |     public enum KeyVineError: LocalizedError {
 62 |         case readFailure(OSStatus)
    |                          `- error: cannot find type 'OSStatus' in scope
 63 |         case writeFailure(OSStatus)
 64 |
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:63:27: error: cannot find type 'OSStatus' in scope
 61 |     public enum KeyVineError: LocalizedError {
 62 |         case readFailure(OSStatus)
 63 |         case writeFailure(OSStatus)
    |                           `- error: cannot find type 'OSStatus' in scope
 64 |
 65 |         public var errorDescription: String? {
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:96:22: error: cannot find type 'CFString' in scope
 94 |         case afterFirstUnlock
 95 |
 96 |         var cfValue: CFString {
    |                      `- error: cannot find type 'CFString' in scope
 97 |             switch self {
 98 |             case .afterFirstUnlock:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:68:39: error: cannot find 'SecCopyErrorMessageString' in scope
 66 |             switch self {
 67 |             case let .readFailure(status):
 68 |                 if let errorMessage = SecCopyErrorMessageString(status, nil) {
    |                                       `- error: cannot find 'SecCopyErrorMessageString' in scope
 69 |                     "Keychain read failed with error \(status): \(errorMessage)"
 70 |                 } else {
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:74:39: error: cannot find 'SecCopyErrorMessageString' in scope
 72 |                 }
 73 |             case let .writeFailure(status):
 74 |                 if let errorMessage = SecCopyErrorMessageString(status, nil) {
    |                                       `- error: cannot find 'SecCopyErrorMessageString' in scope
 75 |                     "Keychain write failed with error \(status): \(errorMessage)"
 76 |                 } else {
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:67:23: error: type '_ErrorCodeProtocol' has no member 'readFailure'
 65 |         public var errorDescription: String? {
 66 |             switch self {
 67 |             case let .readFailure(status):
    |                       `- error: type '_ErrorCodeProtocol' has no member 'readFailure'
 68 |                 if let errorMessage = SecCopyErrorMessageString(status, nil) {
 69 |                     "Keychain read failed with error \(status): \(errorMessage)"
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:99:17: error: cannot find 'kSecAttrAccessibleAfterFirstUnlock' in scope
 97 |             switch self {
 98 |             case .afterFirstUnlock:
 99 |                 kSecAttrAccessibleAfterFirstUnlock
    |                 `- error: cannot find 'kSecAttrAccessibleAfterFirstUnlock' in scope
100 |             case .afterFirstUnlockThisDeviceOnly:
101 |                 kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:101:17: error: cannot find 'kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly' in scope
 99 |                 kSecAttrAccessibleAfterFirstUnlock
100 |             case .afterFirstUnlockThisDeviceOnly:
101 |                 kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
    |                 `- error: cannot find 'kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly' in scope
102 |             case .whenPasscodeSetThisDeviceOnly:
103 |                 kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:103:17: error: cannot find 'kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly' in scope
101 |                 kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
102 |             case .whenPasscodeSetThisDeviceOnly:
103 |                 kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
    |                 `- error: cannot find 'kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly' in scope
104 |             case .whenUnlocked:
105 |                 kSecAttrAccessibleWhenUnlocked
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:105:17: error: cannot find 'kSecAttrAccessibleWhenUnlocked' in scope
103 |                 kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
104 |             case .whenUnlocked:
105 |                 kSecAttrAccessibleWhenUnlocked
    |                 `- error: cannot find 'kSecAttrAccessibleWhenUnlocked' in scope
106 |             case .whenUnlockedThisDeviceOnly:
107 |                 kSecAttrAccessibleWhenUnlockedThisDeviceOnly
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:107:17: error: cannot find 'kSecAttrAccessibleWhenUnlockedThisDeviceOnly' in scope
105 |                 kSecAttrAccessibleWhenUnlocked
106 |             case .whenUnlockedThisDeviceOnly:
107 |                 kSecAttrAccessibleWhenUnlockedThisDeviceOnly
    |                 `- error: cannot find 'kSecAttrAccessibleWhenUnlockedThisDeviceOnly' in scope
108 |             }
109 |         }
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:122:26: error: cannot find 'kSecClass' in scope
120 |     /// ```
121 |     public init(appIdentifier: String, teamId: String, accessibility: Accessibility = .afterFirstUnlock) {
122 |         templateQuery = [kSecClass: kSecClassGenericPassword,
    |                          `- error: cannot find 'kSecClass' in scope
123 |                          kSecAttrService: appIdentifier,
124 |                          kSecUseDataProtectionKeychain: kCFBooleanTrue!,
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:122:37: error: cannot find 'kSecClassGenericPassword' in scope
120 |     /// ```
121 |     public init(appIdentifier: String, teamId: String, accessibility: Accessibility = .afterFirstUnlock) {
122 |         templateQuery = [kSecClass: kSecClassGenericPassword,
    |                                     `- error: cannot find 'kSecClassGenericPassword' in scope
123 |                          kSecAttrService: appIdentifier,
124 |                          kSecUseDataProtectionKeychain: kCFBooleanTrue!,
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:123:26: error: cannot find 'kSecAttrService' in scope
121 |     public init(appIdentifier: String, teamId: String, accessibility: Accessibility = .afterFirstUnlock) {
122 |         templateQuery = [kSecClass: kSecClassGenericPassword,
123 |                          kSecAttrService: appIdentifier,
    |                          `- error: cannot find 'kSecAttrService' in scope
124 |                          kSecUseDataProtectionKeychain: kCFBooleanTrue!,
125 |                          kSecAttrAccessible: accessibility.cfValue,
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:124:26: error: cannot find 'kSecUseDataProtectionKeychain' in scope
122 |         templateQuery = [kSecClass: kSecClassGenericPassword,
123 |                          kSecAttrService: appIdentifier,
124 |                          kSecUseDataProtectionKeychain: kCFBooleanTrue!,
    |                          `- error: cannot find 'kSecUseDataProtectionKeychain' in scope
125 |                          kSecAttrAccessible: accessibility.cfValue,
126 |                          kSecAttrAccessGroup: "\(teamId).\(appIdentifier)"]
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:124:57: error: cannot find 'kCFBooleanTrue' in scope
122 |         templateQuery = [kSecClass: kSecClassGenericPassword,
123 |                          kSecAttrService: appIdentifier,
124 |                          kSecUseDataProtectionKeychain: kCFBooleanTrue!,
    |                                                         `- error: cannot find 'kCFBooleanTrue' in scope
125 |                          kSecAttrAccessible: accessibility.cfValue,
126 |                          kSecAttrAccessGroup: "\(teamId).\(appIdentifier)"]
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:125:26: error: cannot find 'kSecAttrAccessible' in scope
123 |                          kSecAttrService: appIdentifier,
124 |                          kSecUseDataProtectionKeychain: kCFBooleanTrue!,
125 |                          kSecAttrAccessible: accessibility.cfValue,
    |                          `- error: cannot find 'kSecAttrAccessible' in scope
126 |                          kSecAttrAccessGroup: "\(teamId).\(appIdentifier)"]
127 |     }
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:126:26: error: cannot find 'kSecAttrAccessGroup' in scope
124 |                          kSecUseDataProtectionKeychain: kCFBooleanTrue!,
125 |                          kSecAttrAccessible: accessibility.cfValue,
126 |                          kSecAttrAccessGroup: "\(teamId).\(appIdentifier)"]
    |                          `- error: cannot find 'kSecAttrAccessGroup' in scope
127 |     }
128 |
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:140:15: error: cannot find 'kSecAttrAccount' in scope
138 |     public func read(from key: String) throws -> Data? {
139 |         var query = templateQuery
140 |         query[kSecAttrAccount] = key
    |               `- error: cannot find 'kSecAttrAccount' in scope
141 |         query[kSecMatchLimit] = kSecMatchLimitOne
142 |         query[kSecReturnData] = kCFBooleanTrue
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:141:15: error: cannot find 'kSecMatchLimit' in scope
139 |         var query = templateQuery
140 |         query[kSecAttrAccount] = key
141 |         query[kSecMatchLimit] = kSecMatchLimitOne
    |               `- error: cannot find 'kSecMatchLimit' in scope
142 |         query[kSecReturnData] = kCFBooleanTrue
143 |
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:141:33: error: cannot find 'kSecMatchLimitOne' in scope
139 |         var query = templateQuery
140 |         query[kSecAttrAccount] = key
141 |         query[kSecMatchLimit] = kSecMatchLimitOne
    |                                 `- error: cannot find 'kSecMatchLimitOne' in scope
142 |         query[kSecReturnData] = kCFBooleanTrue
143 |
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:142:15: error: cannot find 'kSecReturnData' in scope
140 |         query[kSecAttrAccount] = key
141 |         query[kSecMatchLimit] = kSecMatchLimitOne
142 |         query[kSecReturnData] = kCFBooleanTrue
    |               `- error: cannot find 'kSecReturnData' in scope
143 |
144 |         var itemCopy: AnyObject?
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:142:33: error: cannot find 'kCFBooleanTrue' in scope
140 |         query[kSecAttrAccount] = key
141 |         query[kSecMatchLimit] = kSecMatchLimitOne
142 |         query[kSecReturnData] = kCFBooleanTrue
    |                                 `- error: cannot find 'kCFBooleanTrue' in scope
143 |
144 |         var itemCopy: AnyObject?
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:145:22: error: cannot find 'SecItemCopyMatching' in scope
143 |
144 |         var itemCopy: AnyObject?
145 |         let status = SecItemCopyMatching(query as CFDictionary, &itemCopy)
    |                      `- error: cannot find 'SecItemCopyMatching' in scope
146 |         switch status {
147 |         case errSecSuccess:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:145:51: error: cannot find type 'CFDictionary' in scope
143 |
144 |         var itemCopy: AnyObject?
145 |         let status = SecItemCopyMatching(query as CFDictionary, &itemCopy)
    |                                                   `- error: cannot find type 'CFDictionary' in scope
146 |         switch status {
147 |         case errSecSuccess:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:147:14: error: cannot find 'errSecSuccess' in scope
145 |         let status = SecItemCopyMatching(query as CFDictionary, &itemCopy)
146 |         switch status {
147 |         case errSecSuccess:
    |              `- error: cannot find 'errSecSuccess' in scope
148 |             return itemCopy as? Data
149 |         case errSecItemNotFound:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:149:14: error: cannot find 'errSecItemNotFound' in scope
147 |         case errSecSuccess:
148 |             return itemCopy as? Data
149 |         case errSecItemNotFound:
    |              `- error: cannot find 'errSecItemNotFound' in scope
150 |             return nil
151 |         default:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:167:21: error: cannot find type 'OSStatus' in scope
165 |     public func write(data: Data?, to key: String) throws {
166 |         var query = templateQuery
167 |         var status: OSStatus
    |                     `- error: cannot find type 'OSStatus' in scope
168 |
169 |         query[kSecAttrAccount] = key
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:169:15: error: cannot find 'kSecAttrAccount' in scope
167 |         var status: OSStatus
168 |
169 |         query[kSecAttrAccount] = key
    |               `- error: cannot find 'kSecAttrAccount' in scope
170 |
171 |         if let data {
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:172:19: error: cannot find 'kSecValueData' in scope
170 |
171 |         if let data {
172 |             query[kSecValueData] = data
    |                   `- error: cannot find 'kSecValueData' in scope
173 |             status = SecItemAdd(query as CFDictionary, nil)
174 |
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:173:22: error: cannot find 'SecItemAdd' in scope
171 |         if let data {
172 |             query[kSecValueData] = data
173 |             status = SecItemAdd(query as CFDictionary, nil)
    |                      `- error: cannot find 'SecItemAdd' in scope
174 |
175 |             switch status {
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:173:42: error: cannot find type 'CFDictionary' in scope
171 |         if let data {
172 |             query[kSecValueData] = data
173 |             status = SecItemAdd(query as CFDictionary, nil)
    |                                          `- error: cannot find type 'CFDictionary' in scope
174 |
175 |             switch status {
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:173:56: error: 'nil' requires a contextual type
171 |         if let data {
172 |             query[kSecValueData] = data
173 |             status = SecItemAdd(query as CFDictionary, nil)
    |                                                        `- error: 'nil' requires a contextual type
174 |
175 |             switch status {
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:176:18: error: cannot find 'errSecDuplicateItem' in scope
174 |
175 |             switch status {
176 |             case errSecDuplicateItem:
    |                  `- error: cannot find 'errSecDuplicateItem' in scope
177 |                 query[kSecValueData] = nil
178 |                 status = SecItemUpdate(query as CFDictionary, [kSecValueData: data] as CFDictionary)
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:177:23: error: cannot find 'kSecValueData' in scope
175 |             switch status {
176 |             case errSecDuplicateItem:
177 |                 query[kSecValueData] = nil
    |                       `- error: cannot find 'kSecValueData' in scope
178 |                 status = SecItemUpdate(query as CFDictionary, [kSecValueData: data] as CFDictionary)
179 |
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:178:26: error: cannot find 'SecItemUpdate' in scope
176 |             case errSecDuplicateItem:
177 |                 query[kSecValueData] = nil
178 |                 status = SecItemUpdate(query as CFDictionary, [kSecValueData: data] as CFDictionary)
    |                          `- error: cannot find 'SecItemUpdate' in scope
179 |
180 |             default:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:178:64: error: cannot find 'kSecValueData' in scope
176 |             case errSecDuplicateItem:
177 |                 query[kSecValueData] = nil
178 |                 status = SecItemUpdate(query as CFDictionary, [kSecValueData: data] as CFDictionary)
    |                                                                `- error: cannot find 'kSecValueData' in scope
179 |
180 |             default:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:178:49: error: cannot find type 'CFDictionary' in scope
176 |             case errSecDuplicateItem:
177 |                 query[kSecValueData] = nil
178 |                 status = SecItemUpdate(query as CFDictionary, [kSecValueData: data] as CFDictionary)
    |                                                 `- error: cannot find type 'CFDictionary' in scope
179 |
180 |             default:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:178:88: error: cannot find type 'CFDictionary' in scope
176 |             case errSecDuplicateItem:
177 |                 query[kSecValueData] = nil
178 |                 status = SecItemUpdate(query as CFDictionary, [kSecValueData: data] as CFDictionary)
    |                                                                                        `- error: cannot find type 'CFDictionary' in scope
179 |
180 |             default:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:185:22: error: cannot find 'SecItemDelete' in scope
183 |
184 |         } else {
185 |             status = SecItemDelete(query as CFDictionary)
    |                      `- error: cannot find 'SecItemDelete' in scope
186 |             switch status {
187 |             case errSecItemNotFound, errSecSuccess:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:185:45: error: cannot find type 'CFDictionary' in scope
183 |
184 |         } else {
185 |             status = SecItemDelete(query as CFDictionary)
    |                                             `- error: cannot find type 'CFDictionary' in scope
186 |             switch status {
187 |             case errSecItemNotFound, errSecSuccess:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:187:18: error: cannot find 'errSecItemNotFound' in scope
185 |             status = SecItemDelete(query as CFDictionary)
186 |             switch status {
187 |             case errSecItemNotFound, errSecSuccess:
    |                  `- error: cannot find 'errSecItemNotFound' in scope
188 |                 return
189 |             default:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:187:38: error: cannot find 'errSecSuccess' in scope
185 |             status = SecItemDelete(query as CFDictionary)
186 |             switch status {
187 |             case errSecItemNotFound, errSecSuccess:
    |                                      `- error: cannot find 'errSecSuccess' in scope
188 |                 return
189 |             default:
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:194:22: error: cannot find 'errSecSuccess' in scope
192 |         }
193 |
194 |         if status != errSecSuccess {
    |                      `- error: cannot find 'errSecSuccess' in scope
195 |             throw KeyVineError.writeFailure(status)
196 |         }
error: emit-module command failed with exit code 1 (use -v to see invocation)
[5/6] Emitting module KeyVine
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:112:53: error: cannot find type 'CFString' in scope
110 |     }
111 |
112 |     private nonisolated(unsafe) let templateQuery: [CFString: Any]
    |                                                     `- error: cannot find type 'CFString' in scope
113 |
114 |     /// Initialise a key vine using a pair of identifiers. They can in theory be anything, but for sandboxed and app store apps,
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:62:26: error: cannot find type 'OSStatus' in scope
 60 |     /// the property and subscript syntax cannot throw errors.
 61 |     public enum KeyVineError: LocalizedError {
 62 |         case readFailure(OSStatus)
    |                          `- error: cannot find type 'OSStatus' in scope
 63 |         case writeFailure(OSStatus)
 64 |
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:63:27: error: cannot find type 'OSStatus' in scope
 61 |     public enum KeyVineError: LocalizedError {
 62 |         case readFailure(OSStatus)
 63 |         case writeFailure(OSStatus)
    |                           `- error: cannot find type 'OSStatus' in scope
 64 |
 65 |         public var errorDescription: String? {
/host/spi-builder-workspace/Sources/KeyVine/KeyVine.swift:96:22: error: cannot find type 'CFString' in scope
 94 |         case afterFirstUnlock
 95 |
 96 |         var cfValue: CFString {
    |                      `- error: cannot find type 'CFString' in scope
 97 |             switch self {
 98 |             case .afterFirstUnlock:
[6/6] Compiling KeyVine KeyVineDataConvertible.swift
BUILD FAILURE 6.3 wasm