mcpField
S
storekit

storekit

github.com/johnrogers開発233157 回インストール42 週間前に更新
リポジトリ

storekit について

async/await と SwiftUI でアプリ内購入を実装する開発者向けの StoreKit 2 スキルです。商品設定、取引、サブスクリプション、検証、ローカルテストを扱います。

主な機能

  1. 01商品の読み込みと購入フロー
  2. 02サブスクリプションとオファーの処理
  3. 03取引更新と検証
  4. 04SwiftUI の StoreKit ビュー
  5. 05.storekit による購入のローカルテスト

活用シーン

  1. 01アプリ内商品の購入機能の追加
  2. 02自動更新サブスクリプションの実装
  3. 03購入の復元と利用権の付与
  4. 04Xcode での購入フローのテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/johnrogers/claude-swift-engineering --skill storekit

インストール後、Claude Code で/storekitを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
getting-started.md
products.md
storekit-views.md
subscriptions.md
transactions.md

詳細

StoreKit

非同期/待機 API、自動検証、SwiftUI との統合を活用してアプリ内購入を実装するための StoreKit 2 のパターンです。

リファレンスの読み込みガイド

内容が必要になる可能性が少しでもある場合は、必ずリファレンスファイルを読み込んでください。 パターンを見落としたり、間違えたりするより、事前にコンテキストを把握しておくほうが確実です。

リファレンス読み込むタイミング
はじめに.storekit 設定ファイルの作成、テスト優先のワークフロー
製品製品の読み込み、製品タイプ、Product.purchase() による購入
サブスクリプション自動更新サブスクリプション、サブスクリプショングループ、オファー、更新の追跡
トランザクショントランザクションリスナー、検証、トランザクションの完了、購入の復元
StoreKit のビューSwiftUI の ProductView、SubscriptionStoreView、SubscriptionOfferView

コアワークフロー

  1. まず .storekit 設定ファイルを作成します(コードを書く前に)
  2. Xcode シミュレータで購入をローカルテストします
  3. @MainActor を使用して StoreManager を一元化します
  4. アプリ起動時に Transaction.updates リスナーを設定します
  5. ProductView またはカスタム UI で製品を表示します
  6. エンタイトルメントを付与した後は、必ず 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() }
    }
}

よくある間違い

  1. トランザクションで .finish() を呼び出し忘れる — エンタイトルメントを付与した後に transaction.finish() を呼び出さないと、トランザクションが完了しません。ユーザーには購入が反映されません。必ず finish() を呼び出してください。

  2. StoreManager の状態が安全でない — @MainActor を指定せずに StoreManager を共有すると、競合状態が発生する可能性があります。複数の非同期タスクが @Published プロパティを同時に更新し、状態が破損することがあります。スレッドセーフにするため、@MainActor を使用してください。

  3. アプリ起動時にトランザクションリスナーを設定しない — Transaction.updates リスナーを設定していないと、アプリがクラッシュしたり、返金・キャンセルされた購入を見落としたりする可能性があります。ユーザーが購入ボタンをタップしたときではなく、@main で直ちにトランザクションを監視してください。

  4. 製品 ID をハードコードする — ID をハードコードすると、テストやローカライズが難しくなります。製品 ID には設定ファイルまたは環境変数を使用してください。価格にも同じことが当てはまります(App Store から取得し、ハードコードしないでください)。

  5. 検証の失敗を無視する — App Store の検証は、ときどき通知なく失敗します。検証ステータスを確認しないと、未検証のトランザクションを受け入れてしまう可能性があります(セキュリティ上のリスク)。エンタイトルメントを付与する前に、必ず検証してください。

コメント