wwdc23-code-notes icon indicating copy to clipboard operation
wwdc23-code-notes copied to clipboard

Possible Meet SubscriptionStoreView .subscriptionStatusTask bug

Open simsherpa opened this issue 2 years ago • 0 comments

Hello, I think I might have found a bug in the subscription check and assignment logic.

Here's what I found: The code will resolve to .success but set passStatus = .notSubscribed. That added debug print statement demonstrates that.

Sample Code:

.subscriptionStatusTask(for: passIDs.group) { taskStatus in
            self.status = await taskStatus.map { statuses in
                await ProductSubscription.shared.status(
                    for: statuses,
                    ids: passIDs
                )
            }
            switch self.status {
            case .failure(let error):
                passStatusModel.passStatus = .notSubscribed
            case .success(let status):
                passStatusModel.passStatus = status
                print("Status from subscriptionStatusTask = .success | passStatus actually set to \(passStatusModel.passStatus)")
            case .loading: break
            @unknown default
           }
       }

In my case I'm relying on these results to show/dismiss the subscription sheet -- so I modified Code as follows to correct this behavior:

switch self.status {
            case .failure(let error):
                passStatusModel.passStatus = .notSubscribed
                showSubscriptionView = true
            case .success(let status):
                passStatusModel.passStatus = status
                if passStatusModel.passStatus == .notSubscribed {
                    showSubscriptionView = true
                } else {
                    showSubscriptionView = false
                }
            case .loading: break
            @unknown default: break
            }
        }

Thoughts?

simsherpa avatar Nov 07 '23 21:11 simsherpa