Build Information
Successful build of IndieFeedback, reference 1.2.0 (5d2363), with Swift 6.1 for macOS (SPM) on 18 Jul 2026 01:41:03 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: undefined version: run 'make version' to update
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/rshankras/IndieFeedback.git
Reference: 1.2.0
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/rshankras/IndieFeedback
* tag 1.2.0 -> FETCH_HEAD
HEAD is now at 5d2363e Make giving feedback feel like a conversation, not a form
Cloned https://github.com/rshankras/IndieFeedback.git
Revision (git rev-parse @):
5d2363e79c6a29095d466115de08d046ab5b2344
SUCCESS checkout https://github.com/rshankras/IndieFeedback.git at 1.2.0
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.1
Building package at path: $PWD
https://github.com/rshankras/IndieFeedback.git
https://github.com/rshankras/IndieFeedback.git
{
"dependencies" : [
],
"manifest_display_name" : "IndieFeedback",
"name" : "IndieFeedback",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "17.0"
},
{
"name" : "macos",
"version" : "14.0"
}
],
"products" : [
{
"name" : "IndieFeedback",
"targets" : [
"IndieFeedback"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "IndieFeedback",
"module_type" : "SwiftTarget",
"name" : "IndieFeedback",
"path" : "Sources/IndieFeedback",
"product_memberships" : [
"IndieFeedback"
],
"sources" : [
"AddFeedbackView.swift",
"FeedbackButton.swift",
"FeedbackConfiguration.swift",
"FeedbackDetailView.swift",
"FeedbackEntryPoints.swift",
"FeedbackListView.swift",
"FeedbackModels.swift",
"FeedbackPrompt.swift",
"FeedbackShipped.swift",
"FeedbackTheme.swift",
"FeedbackViewModel.swift",
"IndieFeedbackView.swift",
"KeychainHelper.swift",
"ShakeToFeedback.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/16] Compiling IndieFeedback KeychainHelper.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/KeychainHelper.swift:13:16: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'KeychainHelper' may have shared mutable state; this is an error in the Swift 6 language mode
10 | import Security
11 |
12 | class KeychainHelper {
| `- note: class 'KeychainHelper' does not conform to the 'Sendable' protocol
13 | static let shared = KeychainHelper()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'KeychainHelper' 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 | private init() {}
[4/16] Compiling IndieFeedback IndieFeedbackView.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:154:61: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
152 | }
153 | ToolbarItem(placement: .automatic) {
154 | Button(action: { Task { await viewModel.refreshFeedback() } }) {
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'refreshFeedback()' risks causing data races between nonisolated and main actor-isolated uses
155 | Image(systemName: "arrow.clockwise")
156 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:211:37: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
209 | .listStyle(.plain)
210 | .refreshable {
211 | await viewModel.refreshFeedback()
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'refreshFeedback()' risks causing data races between nonisolated and main actor-isolated uses
212 | }
213 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:233:36: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
231 | private func loadFeedback() {
232 | if viewModel.feedbackItems.isEmpty {
233 | Task { await viewModel.fetchFeedback() }
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedback(status:page:perPage:silentError:bustCache:)' risks causing data races between nonisolated and main actor-isolated uses
234 | }
235 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:249:40: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
247 | // Vote button
248 | Button(action: {
249 | Task { await viewModel.toggleVote(for: item) }
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
250 | }) {
251 | VStack(spacing: 2) {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:368:49: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
366 | Button(action: {
367 | Task {
368 | await viewModel.toggleVote(for: currentItem)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
369 | detailedItem = await viewModel.fetchFeedbackDetail(issueNumber: item.id)
370 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:369:64: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
367 | Task {
368 | await viewModel.toggleVote(for: currentItem)
369 | detailedItem = await viewModel.fetchFeedbackDetail(issueNumber: item.id)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
370 | }
371 | }) {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:432:53: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
430 | Button("Post Comment") {
431 | Task {
432 | _ = await viewModel.addComment(to: currentItem, comment: commentText)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'addComment(to:comment:)' risks causing data races between nonisolated and main actor-isolated uses
433 | commentText = ""
434 | detailedItem = await viewModel.fetchFeedbackDetail(issueNumber: item.id)
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:434:64: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
432 | _ = await viewModel.addComment(to: currentItem, comment: commentText)
433 | commentText = ""
434 | detailedItem = await viewModel.fetchFeedbackDetail(issueNumber: item.id)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
435 | }
436 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:444:51: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
442 | }
443 | .onAppear {
444 | Task { detailedItem = await viewModel.fetchFeedbackDetail(issueNumber: item.id) }
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
445 | }
446 | .onChange(of: item) { _, newItem in
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:447:51: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
445 | }
446 | .onChange(of: item) { _, newItem in
447 | Task { detailedItem = await viewModel.fetchFeedbackDetail(issueNumber: newItem.id) }
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
448 | }
449 | }
[5/16] Compiling IndieFeedback FeedbackViewModel.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:110:31: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
108 |
109 | print("📥 [FeedbackVM] Fetching feedback (status: \(status?.rawValue ?? "all"), page: \(page), bustCache: \(bustCache))...")
110 | await MainActor.run { isLoading = true }
| |- 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
111 |
112 | // Create a new task for this fetch
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:113:26: 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
111 |
112 | // Create a new task for this fetch
113 | fetchTask = 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
114 | do {
115 | var urlString = "\(workerURL)/feedback/list?deviceID=\(deviceID)"
| `- note: closure captures 'self' which is accessible to code in the current task
116 | if let status = status {
117 | urlString += "&status=\(status.rawValue)"
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:166:21: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
164 |
165 | await MainActor.run {
166 | self.feedbackItems = feedbackResponse.items
| |- 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
167 | self.isLoading = false
168 | self.errorMessage = nil
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:174:21: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
172 | print("⚠️ [FeedbackVM] Fetch task was cancelled")
173 | await MainActor.run {
174 | self.isLoading = false
| |- 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
175 | }
176 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:178:21: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
176 | } catch {
177 | await MainActor.run {
178 | self.isLoading = false
| |- 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
179 |
180 | // Don't show error message for cancelled requests or if silentError is true
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:315:21: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
313 | let errorResponse = try JSONDecoder.feedbackDecoder.decode(ErrorResponse.self, from: data)
314 | await MainActor.run {
315 | self.errorMessage = "Rate limit exceeded. Try again in \(errorResponse.retryAfter ?? 60) seconds."
| |- 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
316 | }
317 | return nil
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:328:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
326 | // Update local state optimistically
327 | await MainActor.run {
328 | if let index = feedbackItems.firstIndex(where: { $0.id == feedbackItem.id }) {
| |- 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
329 | feedbackItems[index].votes = voteResponse.voteCount
330 | feedbackItems[index].hasVoted = voteResponse.voted
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:376:31: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
374 |
375 | func fetchRoadmap() async {
376 | await MainActor.run { isLoading = true }
| |- 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
377 |
378 | do {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:392:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
390 |
391 | await MainActor.run {
392 | self.roadmapMilestones = roadmapResponse.milestones
| |- 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
393 | self.isLoading = false
394 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:397:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
395 | } catch {
396 | await MainActor.run {
397 | self.isLoading = false
| |- 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
398 | self.errorMessage = error.localizedDescription
399 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:421:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
419 |
420 | await MainActor.run {
421 | self.changelogReleases = changelogResponse.releases
| |- 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
422 | }
423 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:425:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
423 | } catch {
424 | await MainActor.run {
425 | self.errorMessage = error.localizedDescription
| |- 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
426 | }
427 | print("Error fetching changelog: \(error)")
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:446: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
444 | func filterByStatus(_ status: FeedbackStatus?) {
445 | selectedStatus = status
446 | 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
447 | await fetchFeedback(status: status)
| `- note: closure captures 'self' which is accessible to code in the current task
448 | }
449 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:479:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
477 | print("Error fetching feedback detail: \(error)")
478 | await MainActor.run {
479 | self.errorMessage = error.localizedDescription
| |- 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
480 | }
481 | return nil
[6/17] Compiling IndieFeedback FeedbackShipped.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackShipped.swift:74:21: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
72 | await MainActor.run {
73 | withAnimation {
74 | self.shippedItems = newlyShipped
| |- 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
75 | }
76 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackShipped.swift:196:27: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
194 | }
195 | .task {
196 | await tracker.checkIfDue(using: viewModel)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'checkIfDue(using:)' risks causing data races between nonisolated and main actor-isolated uses
197 | }
198 | .sheet(isPresented: $showingBoard) {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackShipped.swift:196:27: warning: sending 'self.tracker' risks causing data races; this is an error in the Swift 6 language mode
194 | }
195 | .task {
196 | await tracker.checkIfDue(using: viewModel)
| |- warning: sending 'self.tracker' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.tracker' to nonisolated instance method 'checkIfDue(using:)' risks causing data races between nonisolated and main actor-isolated uses
197 | }
198 | .sheet(isPresented: $showingBoard) {
[7/17] Compiling IndieFeedback FeedbackTheme.swift
[8/17] Compiling IndieFeedback FeedbackModels.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackPrompt.swift:122:17: warning: capture of 'self' with non-sendable type 'FeedbackPromptManager?' in a '@Sendable' closure
86 |
87 | /// Manages the state and logic for showing feedback prompts.
88 | class FeedbackPromptManager: ObservableObject {
| `- note: class 'FeedbackPromptManager' does not conform to the 'Sendable' protocol
89 | @Published var shouldShowPrompt = false
90 |
:
120 | queue: .main
121 | ) { [weak self] _ in
122 | self?.evaluateTrigger()
| `- warning: capture of 'self' with non-sendable type 'FeedbackPromptManager?' in a '@Sendable' closure
123 | }
124 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackPrompt.swift:185:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
183 | // Small delay for better UX
184 | DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
185 | self.shouldShowPrompt = true
| |- 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
186 | }
187 | }
[9/17] Compiling IndieFeedback FeedbackPrompt.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackPrompt.swift:122:17: warning: capture of 'self' with non-sendable type 'FeedbackPromptManager?' in a '@Sendable' closure
86 |
87 | /// Manages the state and logic for showing feedback prompts.
88 | class FeedbackPromptManager: ObservableObject {
| `- note: class 'FeedbackPromptManager' does not conform to the 'Sendable' protocol
89 | @Published var shouldShowPrompt = false
90 |
:
120 | queue: .main
121 | ) { [weak self] _ in
122 | self?.evaluateTrigger()
| `- warning: capture of 'self' with non-sendable type 'FeedbackPromptManager?' in a '@Sendable' closure
123 | }
124 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackPrompt.swift:185:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
183 | // Small delay for better UX
184 | DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
185 | self.shouldShowPrompt = true
| |- 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
186 | }
187 | }
[10/17] Compiling IndieFeedback FeedbackEntryPoints.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:91:45: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
89 | ErrorView(message: errorMessage) {
90 | Task {
91 | await viewModel.fetchFeedback(status: selectedStatus)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedback(status:page:perPage:silentError:bustCache:)' risks causing data races between nonisolated and main actor-isolated uses
92 | }
93 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:127:37: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
125 | if viewModel.feedbackItems.isEmpty {
126 | Task {
127 | await viewModel.fetchFeedback()
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedback(status:page:perPage:silentError:bustCache:)' risks causing data races between nonisolated and main actor-isolated uses
128 | }
129 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:228:33: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
226 | }
227 | .refreshable {
228 | await viewModel.refreshFeedback()
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'refreshFeedback()' risks causing data races between nonisolated and main actor-isolated uses
229 | }
230 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:245:37: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
243 | Button(action: {
244 | Task {
245 | await viewModel.toggleVote(for: item)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
246 | }
247 | }) {
[11/17] Compiling IndieFeedback FeedbackListView.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:91:45: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
89 | ErrorView(message: errorMessage) {
90 | Task {
91 | await viewModel.fetchFeedback(status: selectedStatus)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedback(status:page:perPage:silentError:bustCache:)' risks causing data races between nonisolated and main actor-isolated uses
92 | }
93 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:127:37: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
125 | if viewModel.feedbackItems.isEmpty {
126 | Task {
127 | await viewModel.fetchFeedback()
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedback(status:page:perPage:silentError:bustCache:)' risks causing data races between nonisolated and main actor-isolated uses
128 | }
129 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:228:33: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
226 | }
227 | .refreshable {
228 | await viewModel.refreshFeedback()
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'refreshFeedback()' risks causing data races between nonisolated and main actor-isolated uses
229 | }
230 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:245:37: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
243 | Button(action: {
244 | Task {
245 | await viewModel.toggleVote(for: item)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
246 | }
247 | }) {
[12/17] Compiling IndieFeedback AddFeedbackView.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:163:39: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
161 | }
162 |
163 | let results = await viewModel.searchFeedback(query: query)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'searchFeedback(query:)' risks causing data races between nonisolated and main actor-isolated uses
164 | if !Task.isCancelled {
165 | similarItems = Array(results.prefix(3))
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:176:42: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
174 |
175 | Task {
176 | let result = await viewModel.submitFeedback(
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'submitFeedback(type:title:description:)' risks causing data races between nonisolated and main actor-isolated uses
177 | type: inferredType,
178 | title: title,
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:200:33: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
198 | if case .success = result {
199 | try? await Task.sleep(nanoseconds: 1_000_000_000)
200 | await viewModel.refreshFeedback()
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'refreshFeedback()' risks causing data races between nonisolated and main actor-isolated uses
201 | }
202 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:293:53: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
291 | Button {
292 | Task {
293 | if let result = await viewModel.toggleVote(for: item) {
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
294 | hasVoted = result.voted
295 | votes = result.voteCount
[13/17] Compiling IndieFeedback FeedbackButton.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:163:39: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
161 | }
162 |
163 | let results = await viewModel.searchFeedback(query: query)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'searchFeedback(query:)' risks causing data races between nonisolated and main actor-isolated uses
164 | if !Task.isCancelled {
165 | similarItems = Array(results.prefix(3))
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:176:42: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
174 |
175 | Task {
176 | let result = await viewModel.submitFeedback(
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'submitFeedback(type:title:description:)' risks causing data races between nonisolated and main actor-isolated uses
177 | type: inferredType,
178 | title: title,
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:200:33: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
198 | if case .success = result {
199 | try? await Task.sleep(nanoseconds: 1_000_000_000)
200 | await viewModel.refreshFeedback()
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'refreshFeedback()' risks causing data races between nonisolated and main actor-isolated uses
201 | }
202 | }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:293:53: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
291 | Button {
292 | Task {
293 | if let result = await viewModel.toggleVote(for: item) {
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
294 | hasVoted = result.voted
295 | votes = result.voteCount
[14/17] Emitting module IndieFeedback
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackConfiguration.swift:23:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'FeedbackConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
20 | /// )
21 | /// ```
22 | public class FeedbackConfiguration {
| `- note: class 'FeedbackConfiguration' does not conform to the 'Sendable' protocol
23 | public static let shared = FeedbackConfiguration()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'FeedbackConfiguration' 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
24 |
25 | // MARK: - Configuration Properties
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/KeychainHelper.swift:13:16: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'KeychainHelper' may have shared mutable state; this is an error in the Swift 6 language mode
10 | import Security
11 |
12 | class KeychainHelper {
| `- note: class 'KeychainHelper' does not conform to the 'Sendable' protocol
13 | static let shared = KeychainHelper()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'KeychainHelper' 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 | private init() {}
[15/17] Compiling IndieFeedback FeedbackConfiguration.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackConfiguration.swift:23:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'FeedbackConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
20 | /// )
21 | /// ```
22 | public class FeedbackConfiguration {
| `- note: class 'FeedbackConfiguration' does not conform to the 'Sendable' protocol
23 | public static let shared = FeedbackConfiguration()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'FeedbackConfiguration' 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
24 |
25 | // MARK: - Configuration Properties
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:230:25: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
228 |
229 | private func toggleVoteAndRefresh() async {
230 | await viewModel.toggleVote(for: currentItem)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
231 |
232 | // Refresh details to get updated vote count
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:233:39: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
231 |
232 | // Refresh details to get updated vote count
233 | let updated = await viewModel.fetchFeedbackDetail(issueNumber: feedbackItem.id)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
234 | await MainActor.run {
235 | self.detailedItem = updated
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:221:44: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
219 | private func loadDetails() {
220 | Task {
221 | let detailed = await viewModel.fetchFeedbackDetail(issueNumber: feedbackItem.id)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
222 | await MainActor.run {
223 | self.detailedItem = detailed
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:247:42: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
245 |
246 | Task {
247 | let result = await viewModel.addComment(to: currentItem, comment: commentText)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'addComment(to:comment:)' risks causing data races between nonisolated and main actor-isolated uses
248 |
249 | await MainActor.run {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:260:55: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
258 | // Refresh to show new comment
259 | Task {
260 | let updated = await viewModel.fetchFeedbackDetail(issueNumber: feedbackItem.id)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
261 | await MainActor.run {
262 | self.detailedItem = updated
[16/17] Compiling IndieFeedback FeedbackDetailView.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackConfiguration.swift:23:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'FeedbackConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
20 | /// )
21 | /// ```
22 | public class FeedbackConfiguration {
| `- note: class 'FeedbackConfiguration' does not conform to the 'Sendable' protocol
23 | public static let shared = FeedbackConfiguration()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'FeedbackConfiguration' 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
24 |
25 | // MARK: - Configuration Properties
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:230:25: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
228 |
229 | private func toggleVoteAndRefresh() async {
230 | await viewModel.toggleVote(for: currentItem)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
231 |
232 | // Refresh details to get updated vote count
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:233:39: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
231 |
232 | // Refresh details to get updated vote count
233 | let updated = await viewModel.fetchFeedbackDetail(issueNumber: feedbackItem.id)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
234 | await MainActor.run {
235 | self.detailedItem = updated
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:221:44: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
219 | private func loadDetails() {
220 | Task {
221 | let detailed = await viewModel.fetchFeedbackDetail(issueNumber: feedbackItem.id)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
222 | await MainActor.run {
223 | self.detailedItem = detailed
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:247:42: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
245 |
246 | Task {
247 | let result = await viewModel.addComment(to: currentItem, comment: commentText)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'addComment(to:comment:)' risks causing data races between nonisolated and main actor-isolated uses
248 |
249 | await MainActor.run {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:260:55: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
258 | // Refresh to show new comment
259 | Task {
260 | let updated = await viewModel.fetchFeedbackDetail(issueNumber: feedbackItem.id)
| |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
261 | await MainActor.run {
262 | self.detailedItem = updated
[17/17] Compiling IndieFeedback ShakeToFeedback.swift
Build complete! (9.35s)
Build complete.
{
"dependencies" : [
],
"manifest_display_name" : "IndieFeedback",
"name" : "IndieFeedback",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "17.0"
},
{
"name" : "macos",
"version" : "14.0"
}
],
"products" : [
{
"name" : "IndieFeedback",
"targets" : [
"IndieFeedback"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "IndieFeedback",
"module_type" : "SwiftTarget",
"name" : "IndieFeedback",
"path" : "Sources/IndieFeedback",
"product_memberships" : [
"IndieFeedback"
],
"sources" : [
"AddFeedbackView.swift",
"FeedbackButton.swift",
"FeedbackConfiguration.swift",
"FeedbackDetailView.swift",
"FeedbackEntryPoints.swift",
"FeedbackListView.swift",
"FeedbackModels.swift",
"FeedbackPrompt.swift",
"FeedbackShipped.swift",
"FeedbackTheme.swift",
"FeedbackViewModel.swift",
"IndieFeedbackView.swift",
"KeychainHelper.swift",
"ShakeToFeedback.swift"
],
"type" : "library"
}
],
"tools_version" : "5.9"
}
Done.