メインコンテンツまでスキップ

StoreKit Test

Overview

StoreKit Testingについてまとめているセクション。

歴史

今までiOSにおけるアプリ内課金処理のユニットテストはとても書きづらく、もし書く場合は実際にApp Storeへの通信をしなければいけなかった。
またアプリ内課金の実装を始めるまでに時間がかかったり(AppStore Connectでの様々な準備があるため)、サンドボックス環境での購入処理を実行してしまうと再度購入処理のテストを行うまでのインターバルが発生したり、アプリ内課金の実装のしづらさがあった。

しかしXcode12から導入された新機能によって様々な問題が解消された。
今回はXcode12で導入された新機能と、アプリ内課金処理のユニットテストを書くためのStoreKit Testというフレームワークについてまとめる。

StoreKit Configuration

Xcode12からアプリ内購入に関することについて、Xcode内で様々な設定を行えるようになった。
この機能を用いることでAppStoreのSandboxやProductionの環境にアクセスせずに、ローカル環境のみで動作確認やテストができるようになる。

StoreKit Configuration File

StoreKit Configuration Fileという、拡張子が.storeKitのファイルを生成できるようになった。
このファイルに商品情報(プロダクトIDや価格 etc.)を設定でき、AppStoreConnectで色々な情報を登録せずに課金処理の動作確認をすることができる。

StoreKit Transaction Manager

StoreKit Transaction Managerとは、ローカルのテスト環境での過去の購入履歴(厳密には購入のトランザクション)を見ることができたり、それらを制御できたりする新機能。

ヒント

例えばローカル環境で一度購入処理を行った後に、リファクタリングやバグ修正などのために、購入処理を再実行したいことがある。
このときStoreKit Transaction Managerから購入履歴を削除し、未購入の状態に戻すことができる。

StoreKit Testing

StoreKit Configuration Fileを使用することでユニットテストも書きやすくなった。
In-App Purchaseに関するユニットテストを書くには、StoreKit TestというiOS14から利用できるフレームワークを使用する。

SKTestSession

コード上でIn-App Purchaseの処理を実行した際、トランザクションを処理するときに使用する設定を制御するクラスです。 SKTestSessionの特定のインスタンスメソッドを呼び出すたびにSKTestTransactionが生成されます。 また上記に加えて、SKPaymentTransactionObserver経由で実際のトランザクション(SKPaymentTransaction)も生成されているようです。

Resource