Microsoft Enterprise Library (ссылка на .NetTiers) была нашей проблемой, которая, в свою очередь, ссылалась на более старую версию Unity. Чтобы решить проблему, мы использовали следующее переадресацию привязки в файле web.config:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.Unity.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
. Кроме того, вам может потребоваться просто обновить корпоративную библиотеку до последней версии.
«Я делал это таким образом и нашел сообщение, в котором говорится, что оно может даже не выполняться»
blockquote>Возможно, оно не будет выполнено, потому что вы не вызываете обработчик завершения на всех путях.
Как сказал Ш_Кхан в своем ответе, вам на самом деле здесь не нужен обработчик завершения, вам нужно использовать методы делегата, чтобы получать информацию о его завершении и о том, был ли он успешным или нет. Но ваша особая проблема с вашим конкретным кодом заключается в том, что вы не вызываете завершение в операторе if.
if !self.canMakePayments { return }
Вероятно, должно быть
guard canMakePayments else { completion() return }
В вашем коде, если canMakePayments имеет значение false, ваш код завершения не будет выполнен.
Результат здесь асинхронный
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue)
или
func paymentQueue(_ queue: SKPaymentQueue,
restoreCompletedTransactionsFailedWithError error: Error)