Exercise 2: Why .pending Is Genuinely Different From an Error — Possible Solution ====================================================================================== An error represents a real, failed purchase attempt - something genuinely went wrong (a network failure, a declined payment method, an invalid product) and the purchase will not go through unless the user tries again. The correct real response to an error is to inform the user something failed and let them retry. .pending represents a genuinely different real situation: the purchase has not failed at all - it is a legitimate, real transaction that is simply waiting on some external approval before it can complete. The chapter's own example, Ask to Buy, is a real, concrete case: a family member's purchase can require actual parental approval before it's allowed to finalize, which may take real time - minutes, hours, or longer - during which the purchase is neither succeeded nor failed, just genuinely still in progress. If an app treated .pending as an error, it would tell the user their purchase failed when it may well complete successfully once approval is granted - a real, misleading message that could cause a user to attempt the same purchase again unnecessarily, or simply give up on a purchase that was actually still on track to succeed. Handling .pending as its own distinct case lets the app instead show something real and accurate - a message explaining the purchase is awaiting approval - and StoreKit will deliver the real, final transaction later, once approval genuinely happens, through the app's own transaction listener. ANSWER: .pending represents a real, legitimate purchase still awaiting external approval (like Ask to Buy) rather than a failed one - treating it as an error would incorrectly tell the user their purchase failed when it may still genuinely succeed later, so it must be handled as its own distinct, non-error outcome that informs the user the purchase is pending rather than lost. WHY THIS WORKS AS AN ANSWER ------------------------------ This explains the real, concrete situation .pending represents (an external approval still in progress, not a failure) and the specific, concrete harm of miscategorizing it as an error, rather than just restating that the two cases are different.