Может уже не актуально, но отвечу.
Если в делегате paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) попадается отложенная (deferred) транзакция, я показываю юзеру алерт, что покупка ушла на проверку "маме" и как только будет одобрена, тут же будет активирована и закрываю экран покупок.
Соответственно, как покупка будет одобрена, сработает этот же делегат, но уже с transactionState == .purchased и тут уже обрабатываете покупку, как обычно.
Замечу, что обязательно при старте приложения в AppDelegate в методе didFinishLaunchingWithOptions нужно подписывать на уведомления свой класс IAPPManager, например, так:
func addPaymentObserver() {
SKPaymentQueue.default().add(self)
}
, что бы при старте приложения не пропустить одобренную, ту саму встроенную покупку.