The lesson I'm keeping:
`#if canImport` is a silent failure mode. It turns "this dependency is missing" into "this feature no longer exists," and your build stays green.
Anything behind it that touches money needs a hard compile guard.
For months my app's paywall didn't charge anyone.
Not a pricing problem. Not a conversion problem.
It was structurally incapable of taking money — and the build was green the entire time.
Fixed, then made it impossible to repeat quietly:
#if !canImport(RevenueCat)
#error("RevenueCat is NOT linked...")
#endif
Release builds now refuse to compile. If the link breaks again, I can't archive. That's the point.