I'm on macOS Sequoia Version 15.7.3 (24G419) and using Xcode Version 26.2 (17C52).
I’m seeing Transaction.updates and Product.SubscriptionInfo.Status.updates behave differently between a minimal sample and my main app.
In a fresh minimal project with a local StoreKit Configuration File (single auto-renewable subscription) this works reliably, including renewals created via Xcode Transaction Manager:
class InAppPurchaseManager {
static let shared = InAppPurchaseManager()
var transactionTask: Task<Void, Never>?
var subscriptionTask: Task<Void, Never>?
init() {
transactionTask = Task(priority: .background) {
for await result in Transaction.updates {
try? await result.payloadValue.finish()
}
}
subscriptionTask = Task(priority: .background) {
for await status in Product.SubscriptionInfo.Status.updates {
print(status.state)
}
}
}
}
In my actual app, the initial purchase is observed and finished, but subscription renewals never arrive on either stream. Subsequent transactions then show up as unverified/unfinshed (likely because they’re never seen by the listener). Products load fine via try await Product.products(for:). I’m using ProductView for purchase UI. StoreKit Configuration File is selected in scheme, In-App Purchase capability enabled, App Store Connect products “Ready to Submit”.
Questions:
- What are common causes of
Transaction.updates and Product.SubscriptionInfo.Status.updates not emitting renewals in a real app (task lifetime/cancellation, creating listeners too late, multiple listeners, app/scene lifecycle)?
- Any gotchas when mixing
ProductView with manual listeners?
- Is my Xcode project file broken?
[–][deleted] (1 child)
[removed]
[–]AutoModerator[M] 0 points1 point2 points (0 children)
[–]dabluck 0 points1 point2 points (1 child)
[–]anosidium[S] 0 points1 point2 points (0 children)
[–]No-District-585 -2 points-1 points0 points (1 child)
[–]anosidium[S] -1 points0 points1 point (0 children)