Build Information
Successful build of StoreHelper, reference 2.6.10 (9b1188
), with Swift 6.1 for macOS (SPM) on 6 May 2025 21:05:30 UTC.
Swift 6 data race errors: 12
Build Command
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64
Build Log
11 | @available(iOS 15.0, macOS 12.0, *)
12 | public struct OptionsViewModel {
13 | @ObservedObject public var storeHelper: StoreHelper
| `- note: property declared here
14 |
15 | public init(storeHelper: StoreHelper){
:
19 | #if DEBUG
20 | /// Resets (deletes) all consumable product purchases from the keychain. Debug-only example.
21 | public func resetConsumables() {
| `- note: add '@MainActor' to make instance method 'resetConsumables()' part of global actor 'MainActor'
22 | guard storeHelper.hasConsumableProducts,
23 | let products = storeHelper.consumableProducts,
24 | let removedProducts = KeychainHelper.resetKeychainConsumables(for: products.map { $0.id }) else { return }
25 |
26 | for product in removedProducts { storeHelper.updatePurchasedIdentifiers(product, purchased: false) }
| `- warning: main actor-isolated property 'storeHelper' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
27 | }
28 | #endif
[123/147] Compiling StoreHelper OptionsViewModel.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Util/PropertyFile.swift:13:23: warning: static property 'bundle' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
11 | public struct PropertyFile {
12 |
13 | public static var bundle: Bundle = .main
| |- warning: static property 'bundle' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'bundle' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'bundle' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
14 |
15 | /// Read a plist property file and return a dictionary of values
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/OptionsViewModel.swift:13:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
11 | @available(iOS 15.0, macOS 12.0, *)
12 | public struct OptionsViewModel {
13 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
14 |
15 | public init(storeHelper: StoreHelper){
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/OptionsViewModel.swift:16:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
11 | @available(iOS 15.0, macOS 12.0, *)
12 | public struct OptionsViewModel {
13 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
14 |
15 | public init(storeHelper: StoreHelper){
16 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
17 | }
18 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/OptionsViewModel.swift:22:15: warning: main actor-isolated property 'storeHelper' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
11 | @available(iOS 15.0, macOS 12.0, *)
12 | public struct OptionsViewModel {
13 | @ObservedObject public var storeHelper: StoreHelper
| `- note: property declared here
14 |
15 | public init(storeHelper: StoreHelper){
:
19 | #if DEBUG
20 | /// Resets (deletes) all consumable product purchases from the keychain. Debug-only example.
21 | public func resetConsumables() {
| `- note: add '@MainActor' to make instance method 'resetConsumables()' part of global actor 'MainActor'
22 | guard storeHelper.hasConsumableProducts,
| `- warning: main actor-isolated property 'storeHelper' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
23 | let products = storeHelper.consumableProducts,
24 | let removedProducts = KeychainHelper.resetKeychainConsumables(for: products.map { $0.id }) else { return }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/OptionsViewModel.swift:23:30: warning: main actor-isolated property 'storeHelper' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
11 | @available(iOS 15.0, macOS 12.0, *)
12 | public struct OptionsViewModel {
13 | @ObservedObject public var storeHelper: StoreHelper
| `- note: property declared here
14 |
15 | public init(storeHelper: StoreHelper){
:
19 | #if DEBUG
20 | /// Resets (deletes) all consumable product purchases from the keychain. Debug-only example.
21 | public func resetConsumables() {
| `- note: add '@MainActor' to make instance method 'resetConsumables()' part of global actor 'MainActor'
22 | guard storeHelper.hasConsumableProducts,
23 | let products = storeHelper.consumableProducts,
| `- warning: main actor-isolated property 'storeHelper' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
24 | let removedProducts = KeychainHelper.resetKeychainConsumables(for: products.map { $0.id }) else { return }
25 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/OptionsViewModel.swift:24:52: error: call to main actor-isolated static method 'resetKeychainConsumables(for:)' in a synchronous nonisolated context
19 | #if DEBUG
20 | /// Resets (deletes) all consumable product purchases from the keychain. Debug-only example.
21 | public func resetConsumables() {
| `- note: add '@MainActor' to make instance method 'resetConsumables()' part of global actor 'MainActor'
22 | guard storeHelper.hasConsumableProducts,
23 | let products = storeHelper.consumableProducts,
24 | let removedProducts = KeychainHelper.resetKeychainConsumables(for: products.map { $0.id }) else { return }
| `- error: call to main actor-isolated static method 'resetKeychainConsumables(for:)' in a synchronous nonisolated context
25 |
26 | for product in removedProducts { storeHelper.updatePurchasedIdentifiers(product, purchased: false) }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/KeychainHelper.swift:177:35: note: calls to static method 'resetKeychainConsumables(for:)' from outside of its actor context are implicitly asynchronous
175 | /// - Parameter consumableProductIds: An array of consumable `ProductId`.
176 | /// - Returns: Returns an array of `ProductId` that has been deleted from the keychain.
177 | @MainActor public static func resetKeychainConsumables(for consumableProductIds: [ProductId]) -> [ProductId]? {
| `- note: calls to static method 'resetKeychainConsumables(for:)' from outside of its actor context are implicitly asynchronous
178 |
179 | guard let cids = KeychainHelper.all(productIds: Set(consumableProductIds)) else { return nil }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/OptionsViewModel.swift:26:54: error: call to main actor-isolated instance method 'updatePurchasedIdentifiers(_:purchased:)' in a synchronous nonisolated context
19 | #if DEBUG
20 | /// Resets (deletes) all consumable product purchases from the keychain. Debug-only example.
21 | public func resetConsumables() {
| `- note: add '@MainActor' to make instance method 'resetConsumables()' part of global actor 'MainActor'
22 | guard storeHelper.hasConsumableProducts,
23 | let products = storeHelper.consumableProducts,
24 | let removedProducts = KeychainHelper.resetKeychainConsumables(for: products.map { $0.id }) else { return }
25 |
26 | for product in removedProducts { storeHelper.updatePurchasedIdentifiers(product, purchased: false) }
| `- error: call to main actor-isolated instance method 'updatePurchasedIdentifiers(_:purchased:)' in a synchronous nonisolated context
27 | }
28 | #endif
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:759:30: note: calls to instance method 'updatePurchasedIdentifiers(_:purchased:)' from outside of its actor context are implicitly asynchronous
757 | /// - productId: The `ProductId` to insert/remove.
758 | /// - insert: If true the `ProductId` is purchased.
759 | @MainActor internal func updatePurchasedIdentifiers(_ productId: ProductId, purchased: Bool) {
| `- note: calls to instance method 'updatePurchasedIdentifiers(_:purchased:)' from outside of its actor context are implicitly asynchronous
760 | guard let product = product(from: productId) else { return }
761 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/OptionsViewModel.swift:26:42: warning: main actor-isolated property 'storeHelper' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
11 | @available(iOS 15.0, macOS 12.0, *)
12 | public struct OptionsViewModel {
13 | @ObservedObject public var storeHelper: StoreHelper
| `- note: property declared here
14 |
15 | public init(storeHelper: StoreHelper){
:
19 | #if DEBUG
20 | /// Resets (deletes) all consumable product purchases from the keychain. Debug-only example.
21 | public func resetConsumables() {
| `- note: add '@MainActor' to make instance method 'resetConsumables()' part of global actor 'MainActor'
22 | guard storeHelper.hasConsumableProducts,
23 | let products = storeHelper.consumableProducts,
24 | let removedProducts = KeychainHelper.resetKeychainConsumables(for: products.map { $0.id }) else { return }
25 |
26 | for product in removedProducts { storeHelper.updatePurchasedIdentifiers(product, purchased: false) }
| `- warning: main actor-isolated property 'storeHelper' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
27 | }
28 | #endif
[124/147] Compiling StoreHelper PriceViewModel.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
15 | @Binding public var purchaseState: PurchaseState
16 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:18:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
15 | @Binding public var purchaseState: PurchaseState
16 |
17 | public init(storeHelper: StoreHelper, purchaseState: Binding<PurchaseState>) {
18 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
19 | self._purchaseState = purchaseState
20 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
59 | public var productId: ProductId
60 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:74:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
75 | public var subscriptionInfo: SubInfo
76 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:78:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
75 | public var subscriptionInfo: SubInfo
76 |
77 | public init(storeHelper: StoreHelper, subscriptionInfo: SubInfo) {
78 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
79 | self.subscriptionInfo = subscriptionInfo
80 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
15 | @Binding public var purchaseState: PurchaseState
16 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:56:53: warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
54 | if !ppSubInfo.promotionalOffers.isEmpty {
55 | // Promotional offers take precedence over introductory offers. There are promo offers available, but is this user eligible?
56 | if await storeHelper.subscriptionHelper.isLapsedSubscriber(to: product) {
| |- warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated value of non-Sendable type 'SubscriptionHelper' to nonisolated callee risks causing races in between main actor-isolated and nonisolated uses
57 | ppSubInfo.promotionalOffersEligible = true
58 | } else if await storeHelper.subscriptionHelper.hasLowerValueCurrentSubscription(than: product) {
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:58:60: warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
56 | if await storeHelper.subscriptionHelper.isLapsedSubscriber(to: product) {
57 | ppSubInfo.promotionalOffersEligible = true
58 | } else if await storeHelper.subscriptionHelper.hasLowerValueCurrentSubscription(than: product) {
| |- warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated value of non-Sendable type 'SubscriptionHelper' to nonisolated callee risks causing races in between main actor-isolated and nonisolated uses
59 | ppSubInfo.promotionalOffersEligible = true
60 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
59 | public var productId: ProductId
60 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:74:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
75 | public var subscriptionInfo: SubInfo
76 |
[125/147] Compiling StoreHelper PurchaseInfoViewModel.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
15 | @Binding public var purchaseState: PurchaseState
16 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:18:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
15 | @Binding public var purchaseState: PurchaseState
16 |
17 | public init(storeHelper: StoreHelper, purchaseState: Binding<PurchaseState>) {
18 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
19 | self._purchaseState = purchaseState
20 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
59 | public var productId: ProductId
60 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:74:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
75 | public var subscriptionInfo: SubInfo
76 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:78:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
75 | public var subscriptionInfo: SubInfo
76 |
77 | public init(storeHelper: StoreHelper, subscriptionInfo: SubInfo) {
78 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
79 | self.subscriptionInfo = subscriptionInfo
80 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
15 | @Binding public var purchaseState: PurchaseState
16 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:56:53: warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
54 | if !ppSubInfo.promotionalOffers.isEmpty {
55 | // Promotional offers take precedence over introductory offers. There are promo offers available, but is this user eligible?
56 | if await storeHelper.subscriptionHelper.isLapsedSubscriber(to: product) {
| |- warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated value of non-Sendable type 'SubscriptionHelper' to nonisolated callee risks causing races in between main actor-isolated and nonisolated uses
57 | ppSubInfo.promotionalOffersEligible = true
58 | } else if await storeHelper.subscriptionHelper.hasLowerValueCurrentSubscription(than: product) {
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:58:60: warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
56 | if await storeHelper.subscriptionHelper.isLapsedSubscriber(to: product) {
57 | ppSubInfo.promotionalOffersEligible = true
58 | } else if await storeHelper.subscriptionHelper.hasLowerValueCurrentSubscription(than: product) {
| |- warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated value of non-Sendable type 'SubscriptionHelper' to nonisolated callee risks causing races in between main actor-isolated and nonisolated uses
59 | ppSubInfo.promotionalOffersEligible = true
60 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
59 | public var productId: ProductId
60 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:74:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
75 | public var subscriptionInfo: SubInfo
76 |
[126/147] Compiling StoreHelper SubscriptionInfoViewModel.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
15 | @Binding public var purchaseState: PurchaseState
16 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:18:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
15 | @Binding public var purchaseState: PurchaseState
16 |
17 | public init(storeHelper: StoreHelper, purchaseState: Binding<PurchaseState>) {
18 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
19 | self._purchaseState = purchaseState
20 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
59 | public var productId: ProductId
60 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:74:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
75 | public var subscriptionInfo: SubInfo
76 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:78:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
75 | public var subscriptionInfo: SubInfo
76 |
77 | public init(storeHelper: StoreHelper, subscriptionInfo: SubInfo) {
78 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
79 | self.subscriptionInfo = subscriptionInfo
80 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
15 | @Binding public var purchaseState: PurchaseState
16 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:56:53: warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
54 | if !ppSubInfo.promotionalOffers.isEmpty {
55 | // Promotional offers take precedence over introductory offers. There are promo offers available, but is this user eligible?
56 | if await storeHelper.subscriptionHelper.isLapsedSubscriber(to: product) {
| |- warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated value of non-Sendable type 'SubscriptionHelper' to nonisolated callee risks causing races in between main actor-isolated and nonisolated uses
57 | ppSubInfo.promotionalOffersEligible = true
58 | } else if await storeHelper.subscriptionHelper.hasLowerValueCurrentSubscription(than: product) {
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:58:60: warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
56 | if await storeHelper.subscriptionHelper.isLapsedSubscriber(to: product) {
57 | ppSubInfo.promotionalOffersEligible = true
58 | } else if await storeHelper.subscriptionHelper.hasLowerValueCurrentSubscription(than: product) {
| |- warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated value of non-Sendable type 'SubscriptionHelper' to nonisolated callee risks causing races in between main actor-isolated and nonisolated uses
59 | ppSubInfo.promotionalOffersEligible = true
60 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
59 | public var productId: ProductId
60 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:74:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
75 | public var subscriptionInfo: SubInfo
76 |
[127/147] Compiling StoreHelper BadgeView.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
15 | @Binding public var purchaseState: PurchaseState
16 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:18:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
15 | @Binding public var purchaseState: PurchaseState
16 |
17 | public init(storeHelper: StoreHelper, purchaseState: Binding<PurchaseState>) {
18 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
19 | self._purchaseState = purchaseState
20 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
59 | public var productId: ProductId
60 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:74:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
75 | public var subscriptionInfo: SubInfo
76 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:78:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
75 | public var subscriptionInfo: SubInfo
76 |
77 | public init(storeHelper: StoreHelper, subscriptionInfo: SubInfo) {
78 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
79 | self.subscriptionInfo = subscriptionInfo
80 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
15 | @Binding public var purchaseState: PurchaseState
16 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:56:53: warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
54 | if !ppSubInfo.promotionalOffers.isEmpty {
55 | // Promotional offers take precedence over introductory offers. There are promo offers available, but is this user eligible?
56 | if await storeHelper.subscriptionHelper.isLapsedSubscriber(to: product) {
| |- warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated value of non-Sendable type 'SubscriptionHelper' to nonisolated callee risks causing races in between main actor-isolated and nonisolated uses
57 | ppSubInfo.promotionalOffersEligible = true
58 | } else if await storeHelper.subscriptionHelper.hasLowerValueCurrentSubscription(than: product) {
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:58:60: warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
56 | if await storeHelper.subscriptionHelper.isLapsedSubscriber(to: product) {
57 | ppSubInfo.promotionalOffersEligible = true
58 | } else if await storeHelper.subscriptionHelper.hasLowerValueCurrentSubscription(than: product) {
| |- warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated value of non-Sendable type 'SubscriptionHelper' to nonisolated callee risks causing races in between main actor-isolated and nonisolated uses
59 | ppSubInfo.promotionalOffersEligible = true
60 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
59 | public var productId: ProductId
60 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:74:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
75 | public var subscriptionInfo: SubInfo
76 |
[128/147] Compiling StoreHelper ConsumableBadgeView.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
15 | @Binding public var purchaseState: PurchaseState
16 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:18:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
15 | @Binding public var purchaseState: PurchaseState
16 |
17 | public init(storeHelper: StoreHelper, purchaseState: Binding<PurchaseState>) {
18 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
19 | self._purchaseState = purchaseState
20 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
59 | public var productId: ProductId
60 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:74:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
75 | public var subscriptionInfo: SubInfo
76 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:78:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
75 | public var subscriptionInfo: SubInfo
76 |
77 | public init(storeHelper: StoreHelper, subscriptionInfo: SubInfo) {
78 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
79 | self.subscriptionInfo = subscriptionInfo
80 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
15 | @Binding public var purchaseState: PurchaseState
16 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:56:53: warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
54 | if !ppSubInfo.promotionalOffers.isEmpty {
55 | // Promotional offers take precedence over introductory offers. There are promo offers available, but is this user eligible?
56 | if await storeHelper.subscriptionHelper.isLapsedSubscriber(to: product) {
| |- warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated value of non-Sendable type 'SubscriptionHelper' to nonisolated callee risks causing races in between main actor-isolated and nonisolated uses
57 | ppSubInfo.promotionalOffersEligible = true
58 | } else if await storeHelper.subscriptionHelper.hasLowerValueCurrentSubscription(than: product) {
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:58:60: warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
56 | if await storeHelper.subscriptionHelper.isLapsedSubscriber(to: product) {
57 | ppSubInfo.promotionalOffersEligible = true
58 | } else if await storeHelper.subscriptionHelper.hasLowerValueCurrentSubscription(than: product) {
| |- warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated value of non-Sendable type 'SubscriptionHelper' to nonisolated callee risks causing races in between main actor-isolated and nonisolated uses
59 | ppSubInfo.promotionalOffersEligible = true
60 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
59 | public var productId: ProductId
60 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:74:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
75 | public var subscriptionInfo: SubInfo
76 |
[129/147] Compiling StoreHelper ConsumableView.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
15 | @Binding public var purchaseState: PurchaseState
16 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:18:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
15 | @Binding public var purchaseState: PurchaseState
16 |
17 | public init(storeHelper: StoreHelper, purchaseState: Binding<PurchaseState>) {
18 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
19 | self._purchaseState = purchaseState
20 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
59 | public var productId: ProductId
60 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:74:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
75 | public var subscriptionInfo: SubInfo
76 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:78:14: warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| `- note: mutation of this property is only permitted within the actor
75 | public var subscriptionInfo: SubInfo
76 |
77 | public init(storeHelper: StoreHelper, subscriptionInfo: SubInfo) {
78 | self.storeHelper = storeHelper
| `- warning: main actor-isolated property 'storeHelper' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode
79 | self.subscriptionInfo = subscriptionInfo
80 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
15 | @Binding public var purchaseState: PurchaseState
16 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:56:53: warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
54 | if !ppSubInfo.promotionalOffers.isEmpty {
55 | // Promotional offers take precedence over introductory offers. There are promo offers available, but is this user eligible?
56 | if await storeHelper.subscriptionHelper.isLapsedSubscriber(to: product) {
| |- warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated value of non-Sendable type 'SubscriptionHelper' to nonisolated callee risks causing races in between main actor-isolated and nonisolated uses
57 | ppSubInfo.promotionalOffersEligible = true
58 | } else if await storeHelper.subscriptionHelper.hasLowerValueCurrentSubscription(than: product) {
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:58:60: warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
56 | if await storeHelper.subscriptionHelper.isLapsedSubscriber(to: product) {
57 | ppSubInfo.promotionalOffersEligible = true
58 | } else if await storeHelper.subscriptionHelper.hasLowerValueCurrentSubscription(than: product) {
| |- warning: sending value of non-Sendable type 'SubscriptionHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated value of non-Sendable type 'SubscriptionHelper' to nonisolated callee risks causing races in between main actor-isolated and nonisolated uses
59 | ppSubInfo.promotionalOffersEligible = true
60 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
59 | public var productId: ProductId
60 |
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/SubscriptionInfoViewModel.swift:74:6: warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
72 | @available(iOS 15.0, macOS 12.0, *)
73 | public struct SubscriptionInfoViewModel {
74 | @ObservedObject public var storeHelper: StoreHelper
| |- warning: sending '$input_value' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated '$input_value' to main actor-isolated callee risks causing data races between main actor-isolated and task-isolated uses
75 | public var subscriptionInfo: SubInfo
76 |
[130/147] Compiling StoreHelper ContactUsView.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
15 | @Binding public var purchaseState: PurchaseState
16 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
[131/147] Compiling StoreHelper PriceButtonText.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
15 | @Binding public var purchaseState: PurchaseState
16 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
[132/147] Compiling StoreHelper PriceButtonTextSubscription.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
15 | @Binding public var purchaseState: PurchaseState
16 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
[133/147] Compiling StoreHelper PriceView.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
15 | @Binding public var purchaseState: PurchaseState
16 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
[134/147] Compiling StoreHelper ProductInfoView.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
15 | @Binding public var purchaseState: PurchaseState
16 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
[135/147] Compiling StoreHelper ProductListView.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PriceViewModel.swift:14:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct PriceViewModel {
14 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
15 | @Binding public var purchaseState: PurchaseState
16 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
[136/147] Compiling StoreHelper StoreHelper.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:853:46: warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
35 | /// Information on the result of unwrapping a transaction `VerificationResult`.
36 | @available(iOS 15.0, macOS 12.0, *)
37 | public struct UnwrappedVerificationResult<T> {
| `- note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
38 | /// The verified or unverified transaction.
39 | public let transaction: T
:
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| `- warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreLog.swift:58:23: warning: static property 'transactionLog' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
56 | }
57 |
58 | public static var transactionLog: Set<TransactionLog> = []
| |- warning: static property 'transactionLog' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'transactionLog' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'transactionLog' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
59 |
60 | /// Logs a StoreNotification as a transaction. Multiple transactions for the same event, product id and transaction id will only be logged once.
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreNotification.swift:42:10: warning: associated value 'purchaseException' of 'Sendable'-conforming enum 'StoreException' has non-sendable type 'UnderlyingError'; this is an error in the Swift 6 language mode
23 | }
24 |
25 | public enum UnderlyingError: Equatable {
| `- note: consider making enum 'UnderlyingError' conform to the 'Sendable' protocol
26 | case purchase(Product.PurchaseError)
27 | case storeKit(StoreKitError)
:
40 | /// StoreHelper exceptions
41 | public enum StoreException: Error, Equatable {
42 | case purchaseException(UnderlyingError?)
| `- warning: associated value 'purchaseException' of 'Sendable'-conforming enum 'StoreException' has non-sendable type 'UnderlyingError'; this is an error in the Swift 6 language mode
43 | case purchaseInProgressException
44 | case transactionVerificationFailed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:312:37: warning: non-sendable result type 'SubInfo?' cannot be sent from main actor-isolated context in call to instance method 'subscriptionInfo(for:)'; this is an error in the Swift 6 language mode
310 | subscriptionInfoSet = OrderedSet<SubInfo>()
311 | for group in groups {
312 | if let hslp = await subscriptionInfo(for: group) { subscriptionInfoSet.append(hslp) }
| `- warning: non-sendable result type 'SubInfo?' cannot be sent from main actor-isolated context in call to instance method 'subscriptionInfo(for:)'; this is an error in the Swift 6 language mode
313 | }
314 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubInfo.swift:13:15: note: consider making struct 'SubInfo' conform to the 'Sendable' protocol
11 | /// This struct has been renamed as `SubInfo` from `SubscriptionInfo` to avoid a name collision with a type alias introduced is iOS 18.4.
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct SubInfo: Hashable {
| `- note: consider making struct 'SubInfo' conform to the 'Sendable' protocol
14 | public init(product: Product? = nil,
15 | subscriptionGroup: String? = nil,
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:425:47: warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
423 |
424 | for await transaction in StoreKit.Transaction.all {
425 | let unwrapped = await storeHelper.checkVerificationResult(result: transaction)
| `- warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
426 | if let subscriptionTransactionInfo = await SubscriptionTransactionInfo(unwrappedTransaction: unwrapped, storeHelper: storeHelper) {
427 | transactions.append(subscriptionTransactionInfo)
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:37:15: note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
35 | /// Information on the result of unwrapping a transaction `VerificationResult`.
36 | @available(iOS 15.0, macOS 12.0, *)
37 | public struct UnwrappedVerificationResult<T> {
| `- note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
38 | /// The verified or unverified transaction.
39 | public let transaction: T
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:849:30: warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
847 | @MainActor private func handleTransactions() -> Task<Void, Error> {
848 |
849 | return Task.detached { [self] in
| `- warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
850 |
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| `- note: closure captures 'self' which is accessible to main actor-isolated code
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:853:46: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'self' to main actor-isolated instance method 'checkVerificationResult(result:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:873:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
871 | // See transaction.revocationReason for more details if required
872 | StoreLog.transaction(.transactionRevoked, productId: transaction.productID, transactionId: String(transaction.id))
873 | await self.updatePurchasedProducts(for: transaction.productID, purchased: false)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
874 | if let handler = transactionNotification { handler(.transactionRevoked, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
875 | return
876 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:881:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
879 | // The user's subscription has expired
880 | StoreLog.transaction(.transactionExpired, productId: transaction.productID, transactionId: String(transaction.id))
881 | await self.updatePurchasedProducts(for: transaction.productID, purchased: false)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
882 | if let handler = transactionNotification { handler(.transactionExpired, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
883 | return
884 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:889:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
887 | // Transaction superceeded by an active, higher-value subscription
888 | StoreLog.transaction(.transactionUpgraded, productId: transaction.productID, transactionId: String(transaction.id))
889 | await self.updatePurchasedProducts(for: transaction.productID, purchased: true)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
890 | if let handler = transactionNotification { handler(.transactionUpgraded, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
891 | return
892 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:896:28: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
894 | // Update the list of products the user has access to
895 | StoreLog.transaction(.transactionSuccess, productId: transaction.productID, transactionId: String(transaction.id))
896 | await self.updatePurchasedProducts(transaction: transaction, purchased: true)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(transaction:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
897 | if let handler = transactionNotification { handler(.transactionSuccess, transaction.productID, String(transaction.id)) }
898 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:312:37: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
310 | subscriptionInfoSet = OrderedSet<SubInfo>()
311 | for group in groups {
312 | if let hslp = await subscriptionInfo(for: group) { subscriptionInfoSet.append(hslp) }
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated 'self' to main actor-isolated instance method 'subscriptionInfo(for:)' risks causing data races between main actor-isolated and task-isolated uses
313 | }
314 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:376:55: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
374 |
375 | // Sanity check. Make sure the user's not subscribed to the provided subscription
376 | guard let subscribed = try? await storeHelper.isSubscribed(product: product), !subscribed else { return false }
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'isSubscribed(product:)' risks causing data races between main actor-isolated and local nonisolated uses
377 |
378 | // Get all the product ids in the subscription group
379 | guard let products = subscriptions(in: group) else { return false }
| `- note: access can happen concurrently
380 |
381 | // Get the index of the provided product and make sure there service levels of lower value (higher in the collection)
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:387:59: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
385 | for i in (indexOfProvidedProduct+1)...(products.count-1) {
386 | if let lowerValueProduct = storeHelper.product(from: products[i]),
387 | let isSubscribed = try? await storeHelper.isSubscribed(product: lowerValueProduct),
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'isSubscribed(product:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
388 | isSubscribed { return true }
389 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:425:47: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
423 |
424 | for await transaction in StoreKit.Transaction.all {
425 | let unwrapped = await storeHelper.checkVerificationResult(result: transaction)
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'checkVerificationResult(result:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
426 | if let subscriptionTransactionInfo = await SubscriptionTransactionInfo(unwrappedTransaction: unwrapped, storeHelper: storeHelper) {
427 | transactions.append(subscriptionTransactionInfo)
[137/147] Compiling StoreHelper StoreLog.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:853:46: warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
35 | /// Information on the result of unwrapping a transaction `VerificationResult`.
36 | @available(iOS 15.0, macOS 12.0, *)
37 | public struct UnwrappedVerificationResult<T> {
| `- note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
38 | /// The verified or unverified transaction.
39 | public let transaction: T
:
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| `- warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreLog.swift:58:23: warning: static property 'transactionLog' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
56 | }
57 |
58 | public static var transactionLog: Set<TransactionLog> = []
| |- warning: static property 'transactionLog' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'transactionLog' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'transactionLog' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
59 |
60 | /// Logs a StoreNotification as a transaction. Multiple transactions for the same event, product id and transaction id will only be logged once.
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreNotification.swift:42:10: warning: associated value 'purchaseException' of 'Sendable'-conforming enum 'StoreException' has non-sendable type 'UnderlyingError'; this is an error in the Swift 6 language mode
23 | }
24 |
25 | public enum UnderlyingError: Equatable {
| `- note: consider making enum 'UnderlyingError' conform to the 'Sendable' protocol
26 | case purchase(Product.PurchaseError)
27 | case storeKit(StoreKitError)
:
40 | /// StoreHelper exceptions
41 | public enum StoreException: Error, Equatable {
42 | case purchaseException(UnderlyingError?)
| `- warning: associated value 'purchaseException' of 'Sendable'-conforming enum 'StoreException' has non-sendable type 'UnderlyingError'; this is an error in the Swift 6 language mode
43 | case purchaseInProgressException
44 | case transactionVerificationFailed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:312:37: warning: non-sendable result type 'SubInfo?' cannot be sent from main actor-isolated context in call to instance method 'subscriptionInfo(for:)'; this is an error in the Swift 6 language mode
310 | subscriptionInfoSet = OrderedSet<SubInfo>()
311 | for group in groups {
312 | if let hslp = await subscriptionInfo(for: group) { subscriptionInfoSet.append(hslp) }
| `- warning: non-sendable result type 'SubInfo?' cannot be sent from main actor-isolated context in call to instance method 'subscriptionInfo(for:)'; this is an error in the Swift 6 language mode
313 | }
314 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubInfo.swift:13:15: note: consider making struct 'SubInfo' conform to the 'Sendable' protocol
11 | /// This struct has been renamed as `SubInfo` from `SubscriptionInfo` to avoid a name collision with a type alias introduced is iOS 18.4.
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct SubInfo: Hashable {
| `- note: consider making struct 'SubInfo' conform to the 'Sendable' protocol
14 | public init(product: Product? = nil,
15 | subscriptionGroup: String? = nil,
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:425:47: warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
423 |
424 | for await transaction in StoreKit.Transaction.all {
425 | let unwrapped = await storeHelper.checkVerificationResult(result: transaction)
| `- warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
426 | if let subscriptionTransactionInfo = await SubscriptionTransactionInfo(unwrappedTransaction: unwrapped, storeHelper: storeHelper) {
427 | transactions.append(subscriptionTransactionInfo)
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:37:15: note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
35 | /// Information on the result of unwrapping a transaction `VerificationResult`.
36 | @available(iOS 15.0, macOS 12.0, *)
37 | public struct UnwrappedVerificationResult<T> {
| `- note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
38 | /// The verified or unverified transaction.
39 | public let transaction: T
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:849:30: warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
847 | @MainActor private func handleTransactions() -> Task<Void, Error> {
848 |
849 | return Task.detached { [self] in
| `- warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
850 |
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| `- note: closure captures 'self' which is accessible to main actor-isolated code
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:853:46: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'self' to main actor-isolated instance method 'checkVerificationResult(result:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:873:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
871 | // See transaction.revocationReason for more details if required
872 | StoreLog.transaction(.transactionRevoked, productId: transaction.productID, transactionId: String(transaction.id))
873 | await self.updatePurchasedProducts(for: transaction.productID, purchased: false)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
874 | if let handler = transactionNotification { handler(.transactionRevoked, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
875 | return
876 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:881:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
879 | // The user's subscription has expired
880 | StoreLog.transaction(.transactionExpired, productId: transaction.productID, transactionId: String(transaction.id))
881 | await self.updatePurchasedProducts(for: transaction.productID, purchased: false)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
882 | if let handler = transactionNotification { handler(.transactionExpired, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
883 | return
884 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:889:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
887 | // Transaction superceeded by an active, higher-value subscription
888 | StoreLog.transaction(.transactionUpgraded, productId: transaction.productID, transactionId: String(transaction.id))
889 | await self.updatePurchasedProducts(for: transaction.productID, purchased: true)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
890 | if let handler = transactionNotification { handler(.transactionUpgraded, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
891 | return
892 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:896:28: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
894 | // Update the list of products the user has access to
895 | StoreLog.transaction(.transactionSuccess, productId: transaction.productID, transactionId: String(transaction.id))
896 | await self.updatePurchasedProducts(transaction: transaction, purchased: true)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(transaction:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
897 | if let handler = transactionNotification { handler(.transactionSuccess, transaction.productID, String(transaction.id)) }
898 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:312:37: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
310 | subscriptionInfoSet = OrderedSet<SubInfo>()
311 | for group in groups {
312 | if let hslp = await subscriptionInfo(for: group) { subscriptionInfoSet.append(hslp) }
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated 'self' to main actor-isolated instance method 'subscriptionInfo(for:)' risks causing data races between main actor-isolated and task-isolated uses
313 | }
314 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:376:55: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
374 |
375 | // Sanity check. Make sure the user's not subscribed to the provided subscription
376 | guard let subscribed = try? await storeHelper.isSubscribed(product: product), !subscribed else { return false }
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'isSubscribed(product:)' risks causing data races between main actor-isolated and local nonisolated uses
377 |
378 | // Get all the product ids in the subscription group
379 | guard let products = subscriptions(in: group) else { return false }
| `- note: access can happen concurrently
380 |
381 | // Get the index of the provided product and make sure there service levels of lower value (higher in the collection)
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:387:59: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
385 | for i in (indexOfProvidedProduct+1)...(products.count-1) {
386 | if let lowerValueProduct = storeHelper.product(from: products[i]),
387 | let isSubscribed = try? await storeHelper.isSubscribed(product: lowerValueProduct),
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'isSubscribed(product:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
388 | isSubscribed { return true }
389 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:425:47: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
423 |
424 | for await transaction in StoreKit.Transaction.all {
425 | let unwrapped = await storeHelper.checkVerificationResult(result: transaction)
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'checkVerificationResult(result:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
426 | if let subscriptionTransactionInfo = await SubscriptionTransactionInfo(unwrappedTransaction: unwrapped, storeHelper: storeHelper) {
427 | transactions.append(subscriptionTransactionInfo)
[138/147] Compiling StoreHelper StoreNotification.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:853:46: warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
35 | /// Information on the result of unwrapping a transaction `VerificationResult`.
36 | @available(iOS 15.0, macOS 12.0, *)
37 | public struct UnwrappedVerificationResult<T> {
| `- note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
38 | /// The verified or unverified transaction.
39 | public let transaction: T
:
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| `- warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreLog.swift:58:23: warning: static property 'transactionLog' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
56 | }
57 |
58 | public static var transactionLog: Set<TransactionLog> = []
| |- warning: static property 'transactionLog' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'transactionLog' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'transactionLog' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
59 |
60 | /// Logs a StoreNotification as a transaction. Multiple transactions for the same event, product id and transaction id will only be logged once.
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreNotification.swift:42:10: warning: associated value 'purchaseException' of 'Sendable'-conforming enum 'StoreException' has non-sendable type 'UnderlyingError'; this is an error in the Swift 6 language mode
23 | }
24 |
25 | public enum UnderlyingError: Equatable {
| `- note: consider making enum 'UnderlyingError' conform to the 'Sendable' protocol
26 | case purchase(Product.PurchaseError)
27 | case storeKit(StoreKitError)
:
40 | /// StoreHelper exceptions
41 | public enum StoreException: Error, Equatable {
42 | case purchaseException(UnderlyingError?)
| `- warning: associated value 'purchaseException' of 'Sendable'-conforming enum 'StoreException' has non-sendable type 'UnderlyingError'; this is an error in the Swift 6 language mode
43 | case purchaseInProgressException
44 | case transactionVerificationFailed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:312:37: warning: non-sendable result type 'SubInfo?' cannot be sent from main actor-isolated context in call to instance method 'subscriptionInfo(for:)'; this is an error in the Swift 6 language mode
310 | subscriptionInfoSet = OrderedSet<SubInfo>()
311 | for group in groups {
312 | if let hslp = await subscriptionInfo(for: group) { subscriptionInfoSet.append(hslp) }
| `- warning: non-sendable result type 'SubInfo?' cannot be sent from main actor-isolated context in call to instance method 'subscriptionInfo(for:)'; this is an error in the Swift 6 language mode
313 | }
314 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubInfo.swift:13:15: note: consider making struct 'SubInfo' conform to the 'Sendable' protocol
11 | /// This struct has been renamed as `SubInfo` from `SubscriptionInfo` to avoid a name collision with a type alias introduced is iOS 18.4.
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct SubInfo: Hashable {
| `- note: consider making struct 'SubInfo' conform to the 'Sendable' protocol
14 | public init(product: Product? = nil,
15 | subscriptionGroup: String? = nil,
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:425:47: warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
423 |
424 | for await transaction in StoreKit.Transaction.all {
425 | let unwrapped = await storeHelper.checkVerificationResult(result: transaction)
| `- warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
426 | if let subscriptionTransactionInfo = await SubscriptionTransactionInfo(unwrappedTransaction: unwrapped, storeHelper: storeHelper) {
427 | transactions.append(subscriptionTransactionInfo)
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:37:15: note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
35 | /// Information on the result of unwrapping a transaction `VerificationResult`.
36 | @available(iOS 15.0, macOS 12.0, *)
37 | public struct UnwrappedVerificationResult<T> {
| `- note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
38 | /// The verified or unverified transaction.
39 | public let transaction: T
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:849:30: warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
847 | @MainActor private func handleTransactions() -> Task<Void, Error> {
848 |
849 | return Task.detached { [self] in
| `- warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
850 |
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| `- note: closure captures 'self' which is accessible to main actor-isolated code
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:853:46: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'self' to main actor-isolated instance method 'checkVerificationResult(result:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:873:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
871 | // See transaction.revocationReason for more details if required
872 | StoreLog.transaction(.transactionRevoked, productId: transaction.productID, transactionId: String(transaction.id))
873 | await self.updatePurchasedProducts(for: transaction.productID, purchased: false)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
874 | if let handler = transactionNotification { handler(.transactionRevoked, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
875 | return
876 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:881:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
879 | // The user's subscription has expired
880 | StoreLog.transaction(.transactionExpired, productId: transaction.productID, transactionId: String(transaction.id))
881 | await self.updatePurchasedProducts(for: transaction.productID, purchased: false)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
882 | if let handler = transactionNotification { handler(.transactionExpired, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
883 | return
884 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:889:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
887 | // Transaction superceeded by an active, higher-value subscription
888 | StoreLog.transaction(.transactionUpgraded, productId: transaction.productID, transactionId: String(transaction.id))
889 | await self.updatePurchasedProducts(for: transaction.productID, purchased: true)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
890 | if let handler = transactionNotification { handler(.transactionUpgraded, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
891 | return
892 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:896:28: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
894 | // Update the list of products the user has access to
895 | StoreLog.transaction(.transactionSuccess, productId: transaction.productID, transactionId: String(transaction.id))
896 | await self.updatePurchasedProducts(transaction: transaction, purchased: true)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(transaction:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
897 | if let handler = transactionNotification { handler(.transactionSuccess, transaction.productID, String(transaction.id)) }
898 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:312:37: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
310 | subscriptionInfoSet = OrderedSet<SubInfo>()
311 | for group in groups {
312 | if let hslp = await subscriptionInfo(for: group) { subscriptionInfoSet.append(hslp) }
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated 'self' to main actor-isolated instance method 'subscriptionInfo(for:)' risks causing data races between main actor-isolated and task-isolated uses
313 | }
314 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:376:55: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
374 |
375 | // Sanity check. Make sure the user's not subscribed to the provided subscription
376 | guard let subscribed = try? await storeHelper.isSubscribed(product: product), !subscribed else { return false }
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'isSubscribed(product:)' risks causing data races between main actor-isolated and local nonisolated uses
377 |
378 | // Get all the product ids in the subscription group
379 | guard let products = subscriptions(in: group) else { return false }
| `- note: access can happen concurrently
380 |
381 | // Get the index of the provided product and make sure there service levels of lower value (higher in the collection)
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:387:59: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
385 | for i in (indexOfProvidedProduct+1)...(products.count-1) {
386 | if let lowerValueProduct = storeHelper.product(from: products[i]),
387 | let isSubscribed = try? await storeHelper.isSubscribed(product: lowerValueProduct),
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'isSubscribed(product:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
388 | isSubscribed { return true }
389 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:425:47: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
423 |
424 | for await transaction in StoreKit.Transaction.all {
425 | let unwrapped = await storeHelper.checkVerificationResult(result: transaction)
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'checkVerificationResult(result:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
426 | if let subscriptionTransactionInfo = await SubscriptionTransactionInfo(unwrappedTransaction: unwrapped, storeHelper: storeHelper) {
427 | transactions.append(subscriptionTransactionInfo)
[139/147] Compiling StoreHelper SubInfo.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:853:46: warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
35 | /// Information on the result of unwrapping a transaction `VerificationResult`.
36 | @available(iOS 15.0, macOS 12.0, *)
37 | public struct UnwrappedVerificationResult<T> {
| `- note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
38 | /// The verified or unverified transaction.
39 | public let transaction: T
:
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| `- warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreLog.swift:58:23: warning: static property 'transactionLog' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
56 | }
57 |
58 | public static var transactionLog: Set<TransactionLog> = []
| |- warning: static property 'transactionLog' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'transactionLog' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'transactionLog' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
59 |
60 | /// Logs a StoreNotification as a transaction. Multiple transactions for the same event, product id and transaction id will only be logged once.
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreNotification.swift:42:10: warning: associated value 'purchaseException' of 'Sendable'-conforming enum 'StoreException' has non-sendable type 'UnderlyingError'; this is an error in the Swift 6 language mode
23 | }
24 |
25 | public enum UnderlyingError: Equatable {
| `- note: consider making enum 'UnderlyingError' conform to the 'Sendable' protocol
26 | case purchase(Product.PurchaseError)
27 | case storeKit(StoreKitError)
:
40 | /// StoreHelper exceptions
41 | public enum StoreException: Error, Equatable {
42 | case purchaseException(UnderlyingError?)
| `- warning: associated value 'purchaseException' of 'Sendable'-conforming enum 'StoreException' has non-sendable type 'UnderlyingError'; this is an error in the Swift 6 language mode
43 | case purchaseInProgressException
44 | case transactionVerificationFailed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:312:37: warning: non-sendable result type 'SubInfo?' cannot be sent from main actor-isolated context in call to instance method 'subscriptionInfo(for:)'; this is an error in the Swift 6 language mode
310 | subscriptionInfoSet = OrderedSet<SubInfo>()
311 | for group in groups {
312 | if let hslp = await subscriptionInfo(for: group) { subscriptionInfoSet.append(hslp) }
| `- warning: non-sendable result type 'SubInfo?' cannot be sent from main actor-isolated context in call to instance method 'subscriptionInfo(for:)'; this is an error in the Swift 6 language mode
313 | }
314 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubInfo.swift:13:15: note: consider making struct 'SubInfo' conform to the 'Sendable' protocol
11 | /// This struct has been renamed as `SubInfo` from `SubscriptionInfo` to avoid a name collision with a type alias introduced is iOS 18.4.
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct SubInfo: Hashable {
| `- note: consider making struct 'SubInfo' conform to the 'Sendable' protocol
14 | public init(product: Product? = nil,
15 | subscriptionGroup: String? = nil,
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:425:47: warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
423 |
424 | for await transaction in StoreKit.Transaction.all {
425 | let unwrapped = await storeHelper.checkVerificationResult(result: transaction)
| `- warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
426 | if let subscriptionTransactionInfo = await SubscriptionTransactionInfo(unwrappedTransaction: unwrapped, storeHelper: storeHelper) {
427 | transactions.append(subscriptionTransactionInfo)
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:37:15: note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
35 | /// Information on the result of unwrapping a transaction `VerificationResult`.
36 | @available(iOS 15.0, macOS 12.0, *)
37 | public struct UnwrappedVerificationResult<T> {
| `- note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
38 | /// The verified or unverified transaction.
39 | public let transaction: T
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:849:30: warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
847 | @MainActor private func handleTransactions() -> Task<Void, Error> {
848 |
849 | return Task.detached { [self] in
| `- warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
850 |
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| `- note: closure captures 'self' which is accessible to main actor-isolated code
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:853:46: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'self' to main actor-isolated instance method 'checkVerificationResult(result:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:873:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
871 | // See transaction.revocationReason for more details if required
872 | StoreLog.transaction(.transactionRevoked, productId: transaction.productID, transactionId: String(transaction.id))
873 | await self.updatePurchasedProducts(for: transaction.productID, purchased: false)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
874 | if let handler = transactionNotification { handler(.transactionRevoked, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
875 | return
876 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:881:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
879 | // The user's subscription has expired
880 | StoreLog.transaction(.transactionExpired, productId: transaction.productID, transactionId: String(transaction.id))
881 | await self.updatePurchasedProducts(for: transaction.productID, purchased: false)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
882 | if let handler = transactionNotification { handler(.transactionExpired, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
883 | return
884 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:889:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
887 | // Transaction superceeded by an active, higher-value subscription
888 | StoreLog.transaction(.transactionUpgraded, productId: transaction.productID, transactionId: String(transaction.id))
889 | await self.updatePurchasedProducts(for: transaction.productID, purchased: true)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
890 | if let handler = transactionNotification { handler(.transactionUpgraded, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
891 | return
892 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:896:28: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
894 | // Update the list of products the user has access to
895 | StoreLog.transaction(.transactionSuccess, productId: transaction.productID, transactionId: String(transaction.id))
896 | await self.updatePurchasedProducts(transaction: transaction, purchased: true)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(transaction:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
897 | if let handler = transactionNotification { handler(.transactionSuccess, transaction.productID, String(transaction.id)) }
898 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:312:37: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
310 | subscriptionInfoSet = OrderedSet<SubInfo>()
311 | for group in groups {
312 | if let hslp = await subscriptionInfo(for: group) { subscriptionInfoSet.append(hslp) }
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated 'self' to main actor-isolated instance method 'subscriptionInfo(for:)' risks causing data races between main actor-isolated and task-isolated uses
313 | }
314 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:376:55: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
374 |
375 | // Sanity check. Make sure the user's not subscribed to the provided subscription
376 | guard let subscribed = try? await storeHelper.isSubscribed(product: product), !subscribed else { return false }
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'isSubscribed(product:)' risks causing data races between main actor-isolated and local nonisolated uses
377 |
378 | // Get all the product ids in the subscription group
379 | guard let products = subscriptions(in: group) else { return false }
| `- note: access can happen concurrently
380 |
381 | // Get the index of the provided product and make sure there service levels of lower value (higher in the collection)
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:387:59: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
385 | for i in (indexOfProvidedProduct+1)...(products.count-1) {
386 | if let lowerValueProduct = storeHelper.product(from: products[i]),
387 | let isSubscribed = try? await storeHelper.isSubscribed(product: lowerValueProduct),
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'isSubscribed(product:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
388 | isSubscribed { return true }
389 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:425:47: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
423 |
424 | for await transaction in StoreKit.Transaction.all {
425 | let unwrapped = await storeHelper.checkVerificationResult(result: transaction)
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'checkVerificationResult(result:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
426 | if let subscriptionTransactionInfo = await SubscriptionTransactionInfo(unwrappedTransaction: unwrapped, storeHelper: storeHelper) {
427 | transactions.append(subscriptionTransactionInfo)
[140/147] Compiling StoreHelper SubscriptionHelper.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:853:46: warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
35 | /// Information on the result of unwrapping a transaction `VerificationResult`.
36 | @available(iOS 15.0, macOS 12.0, *)
37 | public struct UnwrappedVerificationResult<T> {
| `- note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
38 | /// The verified or unverified transaction.
39 | public let transaction: T
:
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| `- warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreLog.swift:58:23: warning: static property 'transactionLog' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
56 | }
57 |
58 | public static var transactionLog: Set<TransactionLog> = []
| |- warning: static property 'transactionLog' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'transactionLog' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'transactionLog' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
59 |
60 | /// Logs a StoreNotification as a transaction. Multiple transactions for the same event, product id and transaction id will only be logged once.
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreNotification.swift:42:10: warning: associated value 'purchaseException' of 'Sendable'-conforming enum 'StoreException' has non-sendable type 'UnderlyingError'; this is an error in the Swift 6 language mode
23 | }
24 |
25 | public enum UnderlyingError: Equatable {
| `- note: consider making enum 'UnderlyingError' conform to the 'Sendable' protocol
26 | case purchase(Product.PurchaseError)
27 | case storeKit(StoreKitError)
:
40 | /// StoreHelper exceptions
41 | public enum StoreException: Error, Equatable {
42 | case purchaseException(UnderlyingError?)
| `- warning: associated value 'purchaseException' of 'Sendable'-conforming enum 'StoreException' has non-sendable type 'UnderlyingError'; this is an error in the Swift 6 language mode
43 | case purchaseInProgressException
44 | case transactionVerificationFailed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:312:37: warning: non-sendable result type 'SubInfo?' cannot be sent from main actor-isolated context in call to instance method 'subscriptionInfo(for:)'; this is an error in the Swift 6 language mode
310 | subscriptionInfoSet = OrderedSet<SubInfo>()
311 | for group in groups {
312 | if let hslp = await subscriptionInfo(for: group) { subscriptionInfoSet.append(hslp) }
| `- warning: non-sendable result type 'SubInfo?' cannot be sent from main actor-isolated context in call to instance method 'subscriptionInfo(for:)'; this is an error in the Swift 6 language mode
313 | }
314 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubInfo.swift:13:15: note: consider making struct 'SubInfo' conform to the 'Sendable' protocol
11 | /// This struct has been renamed as `SubInfo` from `SubscriptionInfo` to avoid a name collision with a type alias introduced is iOS 18.4.
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct SubInfo: Hashable {
| `- note: consider making struct 'SubInfo' conform to the 'Sendable' protocol
14 | public init(product: Product? = nil,
15 | subscriptionGroup: String? = nil,
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:425:47: warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
423 |
424 | for await transaction in StoreKit.Transaction.all {
425 | let unwrapped = await storeHelper.checkVerificationResult(result: transaction)
| `- warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
426 | if let subscriptionTransactionInfo = await SubscriptionTransactionInfo(unwrappedTransaction: unwrapped, storeHelper: storeHelper) {
427 | transactions.append(subscriptionTransactionInfo)
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:37:15: note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
35 | /// Information on the result of unwrapping a transaction `VerificationResult`.
36 | @available(iOS 15.0, macOS 12.0, *)
37 | public struct UnwrappedVerificationResult<T> {
| `- note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
38 | /// The verified or unverified transaction.
39 | public let transaction: T
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:849:30: warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
847 | @MainActor private func handleTransactions() -> Task<Void, Error> {
848 |
849 | return Task.detached { [self] in
| `- warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
850 |
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| `- note: closure captures 'self' which is accessible to main actor-isolated code
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:853:46: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'self' to main actor-isolated instance method 'checkVerificationResult(result:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:873:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
871 | // See transaction.revocationReason for more details if required
872 | StoreLog.transaction(.transactionRevoked, productId: transaction.productID, transactionId: String(transaction.id))
873 | await self.updatePurchasedProducts(for: transaction.productID, purchased: false)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
874 | if let handler = transactionNotification { handler(.transactionRevoked, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
875 | return
876 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:881:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
879 | // The user's subscription has expired
880 | StoreLog.transaction(.transactionExpired, productId: transaction.productID, transactionId: String(transaction.id))
881 | await self.updatePurchasedProducts(for: transaction.productID, purchased: false)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
882 | if let handler = transactionNotification { handler(.transactionExpired, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
883 | return
884 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:889:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
887 | // Transaction superceeded by an active, higher-value subscription
888 | StoreLog.transaction(.transactionUpgraded, productId: transaction.productID, transactionId: String(transaction.id))
889 | await self.updatePurchasedProducts(for: transaction.productID, purchased: true)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
890 | if let handler = transactionNotification { handler(.transactionUpgraded, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
891 | return
892 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:896:28: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
894 | // Update the list of products the user has access to
895 | StoreLog.transaction(.transactionSuccess, productId: transaction.productID, transactionId: String(transaction.id))
896 | await self.updatePurchasedProducts(transaction: transaction, purchased: true)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(transaction:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
897 | if let handler = transactionNotification { handler(.transactionSuccess, transaction.productID, String(transaction.id)) }
898 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:312:37: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
310 | subscriptionInfoSet = OrderedSet<SubInfo>()
311 | for group in groups {
312 | if let hslp = await subscriptionInfo(for: group) { subscriptionInfoSet.append(hslp) }
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated 'self' to main actor-isolated instance method 'subscriptionInfo(for:)' risks causing data races between main actor-isolated and task-isolated uses
313 | }
314 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:376:55: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
374 |
375 | // Sanity check. Make sure the user's not subscribed to the provided subscription
376 | guard let subscribed = try? await storeHelper.isSubscribed(product: product), !subscribed else { return false }
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'isSubscribed(product:)' risks causing data races between main actor-isolated and local nonisolated uses
377 |
378 | // Get all the product ids in the subscription group
379 | guard let products = subscriptions(in: group) else { return false }
| `- note: access can happen concurrently
380 |
381 | // Get the index of the provided product and make sure there service levels of lower value (higher in the collection)
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:387:59: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
385 | for i in (indexOfProvidedProduct+1)...(products.count-1) {
386 | if let lowerValueProduct = storeHelper.product(from: products[i]),
387 | let isSubscribed = try? await storeHelper.isSubscribed(product: lowerValueProduct),
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'isSubscribed(product:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
388 | isSubscribed { return true }
389 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:425:47: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
423 |
424 | for await transaction in StoreKit.Transaction.all {
425 | let unwrapped = await storeHelper.checkVerificationResult(result: transaction)
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'checkVerificationResult(result:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
426 | if let subscriptionTransactionInfo = await SubscriptionTransactionInfo(unwrappedTransaction: unwrapped, storeHelper: storeHelper) {
427 | transactions.append(subscriptionTransactionInfo)
[141/147] Compiling StoreHelper SubscriptionOfferInfo.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:853:46: warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
35 | /// Information on the result of unwrapping a transaction `VerificationResult`.
36 | @available(iOS 15.0, macOS 12.0, *)
37 | public struct UnwrappedVerificationResult<T> {
| `- note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
38 | /// The verified or unverified transaction.
39 | public let transaction: T
:
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| `- warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreLog.swift:58:23: warning: static property 'transactionLog' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
56 | }
57 |
58 | public static var transactionLog: Set<TransactionLog> = []
| |- warning: static property 'transactionLog' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'transactionLog' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'transactionLog' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
59 |
60 | /// Logs a StoreNotification as a transaction. Multiple transactions for the same event, product id and transaction id will only be logged once.
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreNotification.swift:42:10: warning: associated value 'purchaseException' of 'Sendable'-conforming enum 'StoreException' has non-sendable type 'UnderlyingError'; this is an error in the Swift 6 language mode
23 | }
24 |
25 | public enum UnderlyingError: Equatable {
| `- note: consider making enum 'UnderlyingError' conform to the 'Sendable' protocol
26 | case purchase(Product.PurchaseError)
27 | case storeKit(StoreKitError)
:
40 | /// StoreHelper exceptions
41 | public enum StoreException: Error, Equatable {
42 | case purchaseException(UnderlyingError?)
| `- warning: associated value 'purchaseException' of 'Sendable'-conforming enum 'StoreException' has non-sendable type 'UnderlyingError'; this is an error in the Swift 6 language mode
43 | case purchaseInProgressException
44 | case transactionVerificationFailed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:312:37: warning: non-sendable result type 'SubInfo?' cannot be sent from main actor-isolated context in call to instance method 'subscriptionInfo(for:)'; this is an error in the Swift 6 language mode
310 | subscriptionInfoSet = OrderedSet<SubInfo>()
311 | for group in groups {
312 | if let hslp = await subscriptionInfo(for: group) { subscriptionInfoSet.append(hslp) }
| `- warning: non-sendable result type 'SubInfo?' cannot be sent from main actor-isolated context in call to instance method 'subscriptionInfo(for:)'; this is an error in the Swift 6 language mode
313 | }
314 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubInfo.swift:13:15: note: consider making struct 'SubInfo' conform to the 'Sendable' protocol
11 | /// This struct has been renamed as `SubInfo` from `SubscriptionInfo` to avoid a name collision with a type alias introduced is iOS 18.4.
12 | @available(iOS 15.0, macOS 12.0, *)
13 | public struct SubInfo: Hashable {
| `- note: consider making struct 'SubInfo' conform to the 'Sendable' protocol
14 | public init(product: Product? = nil,
15 | subscriptionGroup: String? = nil,
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:425:47: warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
423 |
424 | for await transaction in StoreKit.Transaction.all {
425 | let unwrapped = await storeHelper.checkVerificationResult(result: transaction)
| `- warning: non-sendable result type 'UnwrappedVerificationResult<Transaction>' cannot be sent from main actor-isolated context in call to instance method 'checkVerificationResult(result:)'; this is an error in the Swift 6 language mode
426 | if let subscriptionTransactionInfo = await SubscriptionTransactionInfo(unwrappedTransaction: unwrapped, storeHelper: storeHelper) {
427 | transactions.append(subscriptionTransactionInfo)
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:37:15: note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
35 | /// Information on the result of unwrapping a transaction `VerificationResult`.
36 | @available(iOS 15.0, macOS 12.0, *)
37 | public struct UnwrappedVerificationResult<T> {
| `- note: consider making generic struct 'UnwrappedVerificationResult' conform to the 'Sendable' protocol
38 | /// The verified or unverified transaction.
39 | public let transaction: T
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:849:30: warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
847 | @MainActor private func handleTransactions() -> Task<Void, Error> {
848 |
849 | return Task.detached { [self] in
| `- warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
850 |
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| `- note: closure captures 'self' which is accessible to main actor-isolated code
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:853:46: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
851 | for await verificationResult in Transaction.updates {
852 | // See if StoreKit validated the transaction
853 | let checkResult = await self.checkVerificationResult(result: verificationResult)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'self' to main actor-isolated instance method 'checkVerificationResult(result:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
854 | guard checkResult.verified else {
855 | // StoreKit's attempts to validate the transaction failed
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:873:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
871 | // See transaction.revocationReason for more details if required
872 | StoreLog.transaction(.transactionRevoked, productId: transaction.productID, transactionId: String(transaction.id))
873 | await self.updatePurchasedProducts(for: transaction.productID, purchased: false)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
874 | if let handler = transactionNotification { handler(.transactionRevoked, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
875 | return
876 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:881:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
879 | // The user's subscription has expired
880 | StoreLog.transaction(.transactionExpired, productId: transaction.productID, transactionId: String(transaction.id))
881 | await self.updatePurchasedProducts(for: transaction.productID, purchased: false)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
882 | if let handler = transactionNotification { handler(.transactionExpired, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
883 | return
884 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:889:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
887 | // Transaction superceeded by an active, higher-value subscription
888 | StoreLog.transaction(.transactionUpgraded, productId: transaction.productID, transactionId: String(transaction.id))
889 | await self.updatePurchasedProducts(for: transaction.productID, purchased: true)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(for:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
890 | if let handler = transactionNotification { handler(.transactionUpgraded, transaction.productID, String(transaction.id)) }
| `- note: access can happen concurrently
891 | return
892 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/StoreHelper.swift:896:28: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
894 | // Update the list of products the user has access to
895 | StoreLog.transaction(.transactionSuccess, productId: transaction.productID, transactionId: String(transaction.id))
896 | await self.updatePurchasedProducts(transaction: transaction, purchased: true)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'self' to main actor-isolated instance method 'updatePurchasedProducts(transaction:purchased:updateFallbackList:updateTransactionCheck:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
897 | if let handler = transactionNotification { handler(.transactionSuccess, transaction.productID, String(transaction.id)) }
898 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:312:37: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
310 | subscriptionInfoSet = OrderedSet<SubInfo>()
311 | for group in groups {
312 | if let hslp = await subscriptionInfo(for: group) { subscriptionInfoSet.append(hslp) }
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending task-isolated 'self' to main actor-isolated instance method 'subscriptionInfo(for:)' risks causing data races between main actor-isolated and task-isolated uses
313 | }
314 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:376:55: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
374 |
375 | // Sanity check. Make sure the user's not subscribed to the provided subscription
376 | guard let subscribed = try? await storeHelper.isSubscribed(product: product), !subscribed else { return false }
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| `- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'isSubscribed(product:)' risks causing data races between main actor-isolated and local nonisolated uses
377 |
378 | // Get all the product ids in the subscription group
379 | guard let products = subscriptions(in: group) else { return false }
| `- note: access can happen concurrently
380 |
381 | // Get the index of the provided product and make sure there service levels of lower value (higher in the collection)
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:387:59: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
385 | for i in (indexOfProvidedProduct+1)...(products.count-1) {
386 | if let lowerValueProduct = storeHelper.product(from: products[i]),
387 | let isSubscribed = try? await storeHelper.isSubscribed(product: lowerValueProduct),
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'isSubscribed(product:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
388 | isSubscribed { return true }
389 | }
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Core/SubscriptionHelper.swift:425:47: warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
423 |
424 | for await transaction in StoreKit.Transaction.all {
425 | let unwrapped = await storeHelper.checkVerificationResult(result: transaction)
| |- warning: sending 'storeHelper' risks causing data races; this is an error in the Swift 6 language mode
| |- note: sending main actor-isolated 'storeHelper' to main actor-isolated instance method 'checkVerificationResult(result:)' risks causing data races between main actor-isolated and local nonisolated uses
| `- note: access can happen concurrently
426 | if let subscriptionTransactionInfo = await SubscriptionTransactionInfo(unwrappedTransaction: unwrapped, storeHelper: storeHelper) {
427 | transactions.append(subscriptionTransactionInfo)
[142/147] Compiling StoreHelper ProductListViewRow.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
59 | public var productId: ProductId
60 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
[143/147] Compiling StoreHelper ProductView.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
59 | public var productId: ProductId
60 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
[144/147] Compiling StoreHelper PurchaseButton.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
59 | public var productId: ProductId
60 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
[145/147] Compiling StoreHelper PurchaseInfoSheet.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
59 | public var productId: ProductId
60 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
[146/147] Compiling StoreHelper PurchaseInfoView.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
59 | public var productId: ProductId
60 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
[147/147] Compiling StoreHelper RefreshProductsView.swift
/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/ViewModels/PurchaseInfoViewModel.swift:58:6: warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
56 | public struct PurchaseInfoViewModel {
57 |
58 | @ObservedObject public var storeHelper: StoreHelper
| `- warning: call to main actor-isolated initializer 'init(wrappedValue:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
59 | public var productId: ProductId
60 |
SwiftUICore.ObservedObject.init:2:35: note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
1 | generic struct ObservedObject {
2 | @MainActor @preconcurrency public init(wrappedValue: ObjectType)}
| `- note: calls to initializer 'init(wrappedValue:)' from outside of its actor context are implicitly asynchronous
3 |
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64
[0/1] Planning build
[1/1] Compiling plugin Swift-DocC Preview
[2/2] Compiling plugin Swift-DocC
Building for debugging...
[2/3] Write swift-version-2F0A5646E1D333AE.txt
[4/21] Compiling InternalCollectionsUtilities RandomAccessCollection+Offsets.swift
[5/21] Compiling InternalCollectionsUtilities Specialize.swift
[6/21] Compiling InternalCollectionsUtilities _SortedCollection.swift
[7/21] Compiling InternalCollectionsUtilities _UniqueCollection.swift
[8/21] Compiling InternalCollectionsUtilities UnsafeBufferPointer+Extras.swift
[9/22] Compiling InternalCollectionsUtilities Debugging.swift
[10/22] Compiling InternalCollectionsUtilities Descriptions.swift
[11/22] Compiling InternalCollectionsUtilities UInt+reversed.swift
[12/22] Compiling InternalCollectionsUtilities _UnsafeBitSet+Index.swift
[13/22] Compiling InternalCollectionsUtilities UnsafeMutableBufferPointer+Extras.swift
[14/22] Emitting module InternalCollectionsUtilities
[15/22] Compiling InternalCollectionsUtilities UnsafeRawPointer extensions.swift
[16/22] Compiling InternalCollectionsUtilities FixedWidthInteger+roundUpToPowerOfTwo.swift
[17/22] Compiling InternalCollectionsUtilities UnsafeMutableBufferPointer+SE-0370.swift
[18/22] Compiling InternalCollectionsUtilities UnsafeMutablePointer+SE-0370.swift
[19/22] Compiling InternalCollectionsUtilities Integer rank.swift
[20/22] Compiling InternalCollectionsUtilities UInt+first and last set bit.swift
[21/22] Compiling InternalCollectionsUtilities _UnsafeBitSet+_Word.swift
[22/22] Compiling InternalCollectionsUtilities _UnsafeBitSet.swift
[23/78] Compiling OrderedCollections OrderedSet+Codable.swift
[24/78] Compiling OrderedCollections OrderedSet+CustomReflectable.swift
[25/78] Compiling OrderedCollections OrderedSet+Descriptions.swift
[26/78] Compiling OrderedCollections OrderedSet+Diffing.swift
[27/78] Compiling OrderedCollections OrderedSet+Equatable.swift
[28/78] Compiling OrderedCollections OrderedSet+ExpressibleByArrayLiteral.swift
[29/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra isStrictSubset.swift
[30/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra isStrictSuperset.swift
[31/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra isSubset.swift
[32/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra isSuperset.swift
[33/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra subtract.swift
[34/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra subtracting.swift
[35/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra symmetricDifference.swift
[36/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra union.swift
[37/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra+Basics.swift
[38/84] Compiling OrderedCollections OrderedSet+RandomAccessCollection.swift
[39/84] Compiling OrderedCollections OrderedSet+ReserveCapacity.swift
[40/84] Compiling OrderedCollections OrderedSet+Sendable.swift
[41/84] Compiling OrderedCollections OrderedDictionary+Elements.swift
[42/84] Compiling OrderedCollections OrderedDictionary+Equatable.swift
[43/84] Compiling OrderedCollections OrderedDictionary+ExpressibleByDictionaryLiteral.swift
[44/84] Compiling OrderedCollections OrderedDictionary+Hashable.swift
[45/84] Compiling OrderedCollections OrderedDictionary+Initializers.swift
[46/84] Compiling OrderedCollections OrderedDictionary+Invariants.swift
[47/84] Compiling OrderedCollections _Hashtable+Header.swift
[48/84] Compiling OrderedCollections OrderedDictionary+Codable.swift
[49/84] Compiling OrderedCollections OrderedDictionary+CustomReflectable.swift
[50/84] Compiling OrderedCollections OrderedDictionary+Deprecations.swift
[51/84] Compiling OrderedCollections OrderedDictionary+Descriptions.swift
[52/84] Compiling OrderedCollections OrderedDictionary+Elements.SubSequence.swift
[53/84] Compiling OrderedCollections OrderedSet+Hashable.swift
[54/84] Compiling OrderedCollections OrderedSet+Initializers.swift
[55/84] Compiling OrderedCollections OrderedSet+Insertions.swift
[56/84] Compiling OrderedCollections OrderedSet+Invariants.swift
[57/84] Compiling OrderedCollections OrderedSet+Partial MutableCollection.swift
[58/84] Compiling OrderedCollections OrderedSet+Partial RangeReplaceableCollection.swift
[59/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra formIntersection.swift
[60/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra formSymmetricDifference.swift
[61/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra formUnion.swift
[62/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra intersection.swift
[63/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra isDisjoint.swift
[64/84] Compiling OrderedCollections OrderedSet+Partial SetAlgebra isEqualSet.swift
[65/84] Compiling OrderedCollections OrderedDictionary+Partial MutableCollection.swift
[66/84] Compiling OrderedCollections OrderedDictionary+Partial RangeReplaceableCollection.swift
[67/84] Compiling OrderedCollections OrderedDictionary+Sendable.swift
[68/84] Compiling OrderedCollections OrderedDictionary+Sequence.swift
[69/84] Compiling OrderedCollections OrderedDictionary+Values.swift
[70/84] Compiling OrderedCollections OrderedDictionary.swift
[71/84] Compiling OrderedCollections OrderedSet+SubSequence.swift
[72/84] Compiling OrderedCollections OrderedSet+Testing.swift
[73/84] Compiling OrderedCollections OrderedSet+UnorderedView.swift
[74/84] Compiling OrderedCollections OrderedSet+UnstableInternals.swift
[75/84] Compiling OrderedCollections OrderedSet.swift
[76/84] Compiling OrderedCollections _UnsafeBitset.swift
[77/84] Compiling OrderedCollections _HashTable+Bucket.swift
[78/84] Compiling OrderedCollections _HashTable+BucketIterator.swift
[79/84] Compiling OrderedCollections _HashTable+Constants.swift
[80/84] Compiling OrderedCollections _HashTable+CustomStringConvertible.swift
[81/84] Compiling OrderedCollections _HashTable+Testing.swift
[82/84] Compiling OrderedCollections _HashTable+UnsafeHandle.swift
[83/84] Compiling OrderedCollections _HashTable.swift
[84/84] Emitting module OrderedCollections
[85/137] Emitting module StoreHelper
[86/142] Compiling StoreHelper AppGroupSupport.swift
[87/142] Compiling StoreHelper AppStoreHelper.swift
[88/142] Compiling StoreHelper KeychainHelper.swift
[89/142] Compiling StoreHelper PrePurchaseSubscriptionInfo.swift
[90/142] Compiling StoreHelper PurchaseInfo.swift
[91/142] Compiling StoreHelper StoreConstants.swift
[92/142] Compiling StoreHelper SubscriptionTransactionInfo.swift
[93/142] Compiling StoreHelper Buttons.swift
[94/142] Compiling StoreHelper Fonts.swift
[95/142] Compiling StoreHelper Images.swift
[96/142] Compiling StoreHelper TapGesture.swift
[97/142] Compiling StoreHelper Image-ios.swift
[98/142] Compiling StoreHelper Image-macos.swift
[99/142] Compiling StoreHelper Configuration.swift
[100/142] Compiling StoreHelper PropertyFile.swift
[101/142] Compiling StoreHelper StoreConfiguration.swift
[102/142] Compiling StoreHelper Utils.swift
[103/142] Compiling StoreHelper OptionsViewModel.swift
[104/142] Compiling StoreHelper ContactUsView.swift
[105/142] Compiling StoreHelper PriceButtonText.swift
[106/142] Compiling StoreHelper PriceButtonTextSubscription.swift
[107/142] Compiling StoreHelper PriceView.swift
[108/142] Compiling StoreHelper ProductInfoView.swift
[109/142] Compiling StoreHelper ProductListView.swift
[110/142] Compiling StoreHelper RedeemOfferCodeView-ios.swift
[111/142] Compiling StoreHelper SheetBarView-ios.swift
[112/142] Compiling StoreHelper Products-macos.swift
[113/142] Compiling StoreHelper SheetBarView-macos.swift
[114/142] Compiling StoreHelper resource_bundle_accessor.swift
[115/142] Compiling StoreHelper ProductListViewRow.swift
[116/142] Compiling StoreHelper ProductView.swift
[117/142] Compiling StoreHelper PurchaseButton.swift
[118/142] Compiling StoreHelper PurchaseInfoSheet.swift
[119/142] Compiling StoreHelper PurchaseInfoView.swift
[120/142] Compiling StoreHelper RefreshProductsView.swift
[121/142] Compiling StoreHelper RestorePurchasesView.swift
[122/142] Compiling StoreHelper StoreErrorView.swift
[123/142] Compiling StoreHelper SubscriptionInfoSheet.swift
[124/142] Compiling StoreHelper SubscriptionInfoView.swift
[125/142] Compiling StoreHelper SubscriptionListViewRow.swift
[126/142] Compiling StoreHelper PriceViewModel.swift
[127/142] Compiling StoreHelper PurchaseInfoViewModel.swift
[128/142] Compiling StoreHelper SubscriptionInfoViewModel.swift
[129/142] Compiling StoreHelper BadgeView.swift
[130/142] Compiling StoreHelper ConsumableBadgeView.swift
[131/142] Compiling StoreHelper ConsumableView.swift
[132/142] Compiling StoreHelper SubscriptionView.swift
[133/142] Compiling StoreHelper TermsOfServiceView.swift
[134/142] Compiling StoreHelper VersionInfo.swift
[135/142] Compiling StoreHelper Products-ios.swift
[136/142] Compiling StoreHelper PurchaseManagement-ios.swift
[137/142] Compiling StoreHelper StoreHelper.swift
[138/142] Compiling StoreHelper StoreLog.swift
[139/142] Compiling StoreHelper StoreNotification.swift
[140/142] Compiling StoreHelper SubInfo.swift
[141/142] Compiling StoreHelper SubscriptionHelper.swift
[142/142] Compiling StoreHelper SubscriptionOfferInfo.swift
Build complete! (5.39s)
Build complete.
{
"dependencies" : [
{
"identity" : "swift-collections",
"requirement" : {
"range" : [
{
"lower_bound" : "1.0.0",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-collections"
},
{
"identity" : "swift-docc-plugin",
"requirement" : {
"range" : [
{
"lower_bound" : "1.3.0",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-docc-plugin.git"
}
],
"manifest_display_name" : "StoreHelper",
"name" : "StoreHelper",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "15.0"
},
{
"name" : "macos",
"version" : "12.0"
},
{
"name" : "visionos",
"version" : "1.0"
},
{
"name" : "tvos",
"version" : "15.0"
}
],
"products" : [
{
"name" : "StoreHelper",
"targets" : [
"StoreHelper"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "StoreHelper",
"module_type" : "SwiftTarget",
"name" : "StoreHelper",
"path" : "Sources/StoreHelper",
"product_dependencies" : [
"OrderedCollections"
],
"product_memberships" : [
"StoreHelper"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Resources/PrivacyInfo.xcprivacy",
"rule" : {
"process" : {
}
}
},
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/StoreHelper/Resources/storehelper-logo.png",
"rule" : {
"process" : {
}
}
}
],
"sources" : [
"Core/AppGroupSupport.swift",
"Core/AppStoreHelper.swift",
"Core/KeychainHelper.swift",
"Core/PrePurchaseSubscriptionInfo.swift",
"Core/PurchaseInfo.swift",
"Core/StoreConstants.swift",
"Core/StoreHelper.swift",
"Core/StoreLog.swift",
"Core/StoreNotification.swift",
"Core/SubInfo.swift",
"Core/SubscriptionHelper.swift",
"Core/SubscriptionOfferInfo.swift",
"Core/SubscriptionTransactionInfo.swift",
"Styles/Shared/Buttons.swift",
"Styles/Shared/Fonts.swift",
"Styles/Shared/Images.swift",
"Styles/Shared/TapGesture.swift",
"Styles/iOS/Image-ios.swift",
"Styles/macOS/Image-macos.swift",
"Util/Configuration.swift",
"Util/PropertyFile.swift",
"Util/StoreConfiguration.swift",
"Util/Utils.swift",
"ViewModels/OptionsViewModel.swift",
"ViewModels/PriceViewModel.swift",
"ViewModels/PurchaseInfoViewModel.swift",
"ViewModels/SubscriptionInfoViewModel.swift",
"Views/Shared/BadgeView.swift",
"Views/Shared/ConsumableBadgeView.swift",
"Views/Shared/ConsumableView.swift",
"Views/Shared/ContactUsView.swift",
"Views/Shared/PriceButtonText.swift",
"Views/Shared/PriceButtonTextSubscription.swift",
"Views/Shared/PriceView.swift",
"Views/Shared/ProductInfoView.swift",
"Views/Shared/ProductListView.swift",
"Views/Shared/ProductListViewRow.swift",
"Views/Shared/ProductView.swift",
"Views/Shared/PurchaseButton.swift",
"Views/Shared/PurchaseInfoSheet.swift",
"Views/Shared/PurchaseInfoView.swift",
"Views/Shared/RefreshProductsView.swift",
"Views/Shared/RestorePurchasesView.swift",
"Views/Shared/StoreErrorView.swift",
"Views/Shared/SubscriptionInfoSheet.swift",
"Views/Shared/SubscriptionInfoView.swift",
"Views/Shared/SubscriptionListViewRow.swift",
"Views/Shared/SubscriptionView.swift",
"Views/Shared/TermsOfServiceView.swift",
"Views/Shared/VersionInfo.swift",
"Views/iOS/Products-ios.swift",
"Views/iOS/PurchaseManagement-ios.swift",
"Views/iOS/RedeemOfferCodeView-ios.swift",
"Views/iOS/SheetBarView-ios.swift",
"Views/macOS/Products-macos.swift",
"Views/macOS/SheetBarView-macos.swift"
],
"type" : "library"
}
],
"tools_version" : "5.9"
}
Done.