Build Information
Successful build of GhostStrings, reference v1.4.5 (6f1dcf), with Swift 6.1 for macOS (SPM) on 9 Oct 2026 12:59:06 UTC.
Swift 6 data race errors: 2
Build Command
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCapturesBuild Log
========================================
RunAll
========================================
Builder version: 5.1.1
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/shahwaiz90/ghoststrings-ios.git
Reference: v1.4.5
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/shahwaiz90/ghoststrings-ios
* tag v1.4.5 -> FETCH_HEAD
HEAD is now at 6f1dcff feat(ios): add platform and track query params to OTA requests and bump to 1.4.5
Cloned https://github.com/shahwaiz90/ghoststrings-ios.git
Revision (git rev-parse @):
6f1dcff89f677ebae5676913773aa038091792ab
SUCCESS checkout https://github.com/shahwaiz90/ghoststrings-ios.git at v1.4.5
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.1
Building package at path: $PWD
https://github.com/shahwaiz90/ghoststrings-ios.git
https://github.com/shahwaiz90/ghoststrings-ios.git
{
"dependencies" : [
],
"manifest_display_name" : "GhostStrings",
"name" : "GhostStrings",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "14.0"
},
{
"name" : "macos",
"version" : "11.0"
}
],
"products" : [
{
"name" : "GhostStrings",
"targets" : [
"GhostStrings"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "GhostStringsTests",
"module_type" : "SwiftTarget",
"name" : "GhostStringsTests",
"path" : "Tests/GhostStringsTests",
"sources" : [
"GhostStringsTests.swift"
],
"target_dependencies" : [
"GhostStrings"
],
"type" : "test"
},
{
"c99name" : "GhostStrings",
"module_type" : "SwiftTarget",
"name" : "GhostStrings",
"path" : "Sources/GhostStrings",
"product_memberships" : [
"GhostStrings"
],
"sources" : [
"Bundle+Swizzle.swift",
"GhostLanguage.swift",
"GhostStrings.swift",
"GhostStringsApi.swift",
"GhostStringsConfig.swift",
"GhostStringsRepository.swift",
"UI/GhostStringsUI.swift",
"UI/GhostText.swift"
],
"type" : "library"
}
],
"tools_version" : "5.9"
}
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures
Building for debugging...
[0/2] Write sources
[1/2] Write swift-version-2F0A5646E1D333AE.txt
[3/11] Compiling GhostStrings GhostStringsRepository.swift
[4/11] Compiling GhostStrings GhostStringsConfig.swift
[5/11] Compiling GhostStrings GhostLanguage.swift
[6/11] Compiling GhostStrings GhostStringsApi.swift
[7/11] Compiling GhostStrings Bundle+Swizzle.swift
/Users/admin/builder/spi-builder-workspace/Sources/GhostStrings/Bundle+Swizzle.swift:4:16: warning: static property 'isSwizzled' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
2 |
3 | extension Bundle {
4 | static var isSwizzled = false
| |- warning: static property 'isSwizzled' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'isSwizzled' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'isSwizzled' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
5 |
6 | static func swizzleLocalization() {
[8/11] Emitting module GhostStrings
/Users/admin/builder/spi-builder-workspace/Sources/GhostStrings/Bundle+Swizzle.swift:4:16: warning: static property 'isSwizzled' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
2 |
3 | extension Bundle {
4 | static var isSwizzled = false
| |- warning: static property 'isSwizzled' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'isSwizzled' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'isSwizzled' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
5 |
6 | static func swizzleLocalization() {
/Users/admin/builder/spi-builder-workspace/Sources/GhostStrings/GhostStrings.swift:13:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'GhostStrings' may have shared mutable state; this is an error in the Swift 6 language mode
9 | /// The main entry point for the GhostStrings iOS SDK.
10 | /// This class handles initialization, cloud synchronization, and string management.
11 | public class GhostStrings: ObservableObject {
| `- note: class 'GhostStrings' does not conform to the 'Sendable' protocol
12 | /// The shared singleton instance.
13 | public static let shared = GhostStrings()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'GhostStrings' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
14 |
15 | /// The current set of strings fetched from the cloud.
[9/11] Compiling GhostStrings GhostStringsUI.swift
[10/11] Compiling GhostStrings GhostText.swift
[11/11] Compiling GhostStrings GhostStrings.swift
/Users/admin/builder/spi-builder-workspace/Sources/GhostStrings/GhostStrings.swift:13:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'GhostStrings' may have shared mutable state; this is an error in the Swift 6 language mode
9 | /// The main entry point for the GhostStrings iOS SDK.
10 | /// This class handles initialization, cloud synchronization, and string management.
11 | public class GhostStrings: ObservableObject {
| `- note: class 'GhostStrings' does not conform to the 'Sendable' protocol
12 | /// The shared singleton instance.
13 | public static let shared = GhostStrings()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'GhostStrings' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
14 |
15 | /// The current set of strings fetched from the cloud.
/Users/admin/builder/spi-builder-workspace/Sources/GhostStrings/GhostStrings.swift:70:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
68 |
69 | Task { @MainActor in
70 | self.strings = newStrings
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
71 | NotificationCenter.default.post(name: .GhostStringsDidUpdate, object: nil)
72 | }
/Users/admin/builder/spi-builder-workspace/Sources/GhostStrings/GhostStrings.swift:59:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
57 |
58 | // Sync once on startup (will return 304 if content is unchanged)
59 | Task { await sync() }
| | `- note: closure captures 'self' which is accessible to code in the current task
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
60 |
61 | trackEvent("ghost_app_identified")
/Users/admin/builder/spi-builder-workspace/Sources/GhostStrings/GhostStrings.swift:112:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
110 | // Force notify SwiftUI observers on the Main thread
111 | Task { @MainActor in
112 | self.objectWillChange.send()
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
113 | onComplete?(true)
114 | }
/Users/admin/builder/spi-builder-workspace/Sources/GhostStrings/GhostStrings.swift:113:13: warning: sending 'onComplete' risks causing data races; this is an error in the Swift 6 language mode
111 | Task { @MainActor in
112 | self.objectWillChange.send()
113 | onComplete?(true)
| |- warning: sending 'onComplete' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'onComplete' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
114 | }
115 | }
/Users/admin/builder/spi-builder-workspace/Sources/GhostStrings/GhostStrings.swift:146:18: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
144 | } else {
145 | // Background update (stale-while-revalidate)
146 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
147 | do {
148 | let result = try await api.fetchLanguages(ifModifiedSince: repository.getLanguagesLastModified())
| `- note: closure captures 'self' which is accessible to code in the current task
149 | if result.isModified, let fetchedLangs = result.languages {
150 | repository.saveLanguages(fetchedLangs, lastModified: result.lastModified)
/Users/admin/builder/spi-builder-workspace/Sources/GhostStrings/GhostStrings.swift:163:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
161 | /// Callback-friendly version of getSupportedLanguages for Objective-C / Swift non-async callers.
162 | public func getSupportedLanguages(force: Bool = false, onComplete: @escaping ([GhostLanguage]) -> Void) {
163 | Task {
| `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
164 | let langs = await getSupportedLanguages(force: force)
| `- note: closure captures 'self' which is accessible to code in the current task
165 | onComplete(langs)
166 | }
Build complete! (8.97s)
Build complete.
{
"dependencies" : [
],
"manifest_display_name" : "GhostStrings",
"name" : "GhostStrings",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "14.0"
},
{
"name" : "macos",
"version" : "11.0"
}
],
"products" : [
{
"name" : "GhostStrings",
"targets" : [
"GhostStrings"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "GhostStringsTests",
"module_type" : "SwiftTarget",
"name" : "GhostStringsTests",
"path" : "Tests/GhostStringsTests",
"sources" : [
"GhostStringsTests.swift"
],
"target_dependencies" : [
"GhostStrings"
],
"type" : "test"
},
{
"c99name" : "GhostStrings",
"module_type" : "SwiftTarget",
"name" : "GhostStrings",
"path" : "Sources/GhostStrings",
"product_memberships" : [
"GhostStrings"
],
"sources" : [
"Bundle+Swizzle.swift",
"GhostLanguage.swift",
"GhostStrings.swift",
"GhostStringsApi.swift",
"GhostStringsConfig.swift",
"GhostStringsRepository.swift",
"UI/GhostStringsUI.swift",
"UI/GhostText.swift"
],
"type" : "library"
}
],
"tools_version" : "5.9"
}
Done.