Build Information
Failed to build KeyVine, reference main (f467a1), with Swift 6.3 for Linux on 22 Apr 2026 12:39:51 UTC.
Build Command
bash -c docker run --pull=always --rm -v "checkouts-4606859-3":/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:basic-6.3-latest swift build --triple x86_64-unknown-linux-gnu 2>&1Build 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: linux
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-3":/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:basic-6.3-latest swift build --triple x86_64-unknown-linux-gnu 2>&1
basic-6.3-latest: Pulling from swiftpackageindex/spi-images
Digest: sha256:5a7d791d2ead8a924b1292cb31bf3288eabcfe8880e0b005b00b45b71a5bc36a
Status: Image is up to date for registry.gitlab.com/swiftpackageindex/spi-images:basic-6.3-latest
Building for debugging...
[0/2] Write sources
[1/2] Write swift-version-24593BA9C3E375BF.txt
[3/6] Compiling KeyVine KeyVineStringConvertible.swift
error: emit-module command failed with exit code 1 (use -v to see invocation)
[4/6] Compiling KeyVine KeyVineDataConvertible.swift
[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 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 | }
BUILD FAILURE 6.3 linux