storekit について
async/await と SwiftUI でアプリ内購入を実装する開発者向けの StoreKit 2 スキルです。商品設定、取引、サブスクリプション、検証、ローカルテストを扱います。
主な機能
- 01商品の読み込みと購入フロー
- 02サブスクリプションとオファーの処理
- 03取引更新と検証
- 04SwiftUI の StoreKit ビュー
- 05.storekit による購入のローカルテスト
活用シーン
- 01アプリ内商品の購入機能の追加
- 02自動更新サブスクリプションの実装
- 03購入の復元と利用権の付与
- 04Xcode での購入フローのテスト
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ johnrogers/ claude-swift-engineering --skill storekitインストール後、Claude Code で/storekitを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/getting-started.mdproducts.mdstorekit-views.mdsubscriptions.mdtransactions.md詳細
StoreKit
非同期/待機 API、自動検証、SwiftUI との統合を活用してアプリ内購入を実装するための StoreKit 2 のパターンです。
リファレンスの読み込みガイド
内容が必要になる可能性が少しでもある場合は、必ずリファレンスファイルを読み込んでください。 パターンを見落としたり、間違えたりするより、事前にコンテキストを把握しておくほうが確実です。
| リファレンス | 読み込むタイミング |
|---|---|
| はじめに | .storekit 設定ファイルの作成、テスト優先のワークフロー |
| 製品 | 製品の読み込み、製品タイプ、Product.purchase() による購入 |
| サブスクリプション | 自動更新サブスクリプション、サブスクリプショングループ、オファー、更新の追跡 |
| トランザクション | トランザクションリスナー、検証、トランザクションの完了、購入の復元 |
| StoreKit のビュー | SwiftUI の ProductView、SubscriptionStoreView、SubscriptionOfferView |
コアワークフロー
- まず
.storekit設定ファイルを作成します(コードを書く前に) - Xcode シミュレータで購入をローカルテストします
@MainActorを使用してStoreManagerを一元化します- アプリ起動時に
Transaction.updatesリスナーを設定します ProductViewまたはカスタム UI で製品を表示します- エンタイトルメントを付与した後は、必ず
transaction.finish()を呼び出します
基本アーキテクチャ
@MainActor
final class StoreManager: ObservableObject {
@Published private(set) var products: [Product] = []
@Published private(set) var purchasedProductIDs: Set<String> = []
private var transactionListener: Task<Void, Never>?
init() {
transactionListener = listenForTransactions()
Task { await loadProducts() }
}
}
よくある間違い
-
トランザクションで
.finish()を呼び出し忘れる — エンタイトルメントを付与した後にtransaction.finish()を呼び出さないと、トランザクションが完了しません。ユーザーには購入が反映されません。必ずfinish()を呼び出してください。 -
StoreManager の状態が安全でない —
@MainActorを指定せずにStoreManagerを共有すると、競合状態が発生する可能性があります。複数の非同期タスクが@Publishedプロパティを同時に更新し、状態が破損することがあります。スレッドセーフにするため、@MainActorを使用してください。 -
アプリ起動時にトランザクションリスナーを設定しない —
Transaction.updatesリスナーを設定していないと、アプリがクラッシュしたり、返金・キャンセルされた購入を見落としたりする可能性があります。ユーザーが購入ボタンをタップしたときではなく、@mainで直ちにトランザクションを監視してください。 -
製品 ID をハードコードする — ID をハードコードすると、テストやローカライズが難しくなります。製品 ID には設定ファイルまたは環境変数を使用してください。価格にも同じことが当てはまります(App Store から取得し、ハードコードしないでください)。
-
検証の失敗を無視する — App Store の検証は、ときどき通知なく失敗します。検証ステータスを確認しないと、未検証のトランザクションを受け入れてしまう可能性があります(セキュリティ上のリスク)。エンタイトルメントを付与する前に、必ず検証してください。