soranoba
soranoba Author of soranoba.net
programming

iOS17 Simulatorだとin-app purchaseのテストでSKError.Code.unknownが返る問題の対策

SKTestSessionを用いたテストが、Xcode15になってからiOS17 Simulatorでのみテストが通らなくなった場合の対応方法を紹介する。

iOS17では、SKTestSession.failTransactionsEnabledがdeprecatedになった。これに伴い、ここら辺の挙動がおかしくなっている。
もしデフォルト値のfalseから返る必要がないにも関わらず設定している箇所がある場合はそのコードを削除する必要がある。(unavailableを使わずに単に削除しても良いと思う)

// before
session.failTransactionsEnabled = false

// after
if #unavailable(iOS 17.0, *) {
  session.failTransactionsEnabled = false
}

これは、iOS17環境下では代入を行うと強制的にtrueになるという謎の問題があるからである。

(lldb) po session.failTransactionsEnabled
false
(lldb) po session.failTransactionsEnabled = false
0 elements
(lldb) po session.failTransactionsEnabled
true

trueに設定したい場合は正しく動作するように見えるが、iOS17以降はSKTestSession.setSimulatedError(_:forAPI:)に移行した方が良さそうだ。

(Updated: )

comments powered by Disqus