提供商品

商品Product ID形式
広告削除com.happyboy1002.CHROMATIC.removeads非消耗型・買い切り(¥240)

PurchaseManager API

@Observable @MainActor
final class PurchaseManager {
    var isAdsRemoved: Bool

    func loadProducts() async
    func purchase() async throws
    func restore() async throws
    func verifyEntitlements() async  // 起動時に呼出(改ざん対策)
}

処理フロー

  1. App起動時に verifyEntitlements() でStoreKitから最新を取得
  2. UserDefaults chromatic_ads_removed を上書き(オフラインキャッシュとして保持)
  3. 購入時 product.purchase()
  4. VerificationResult で検証 → transaction.finish()

改ざん対策

UserDefaults はオフラインキャッシュのみ。起動時に必ず StoreKit で上書きするため、 UserDefaults を直接書き換えても次回起動でリセットされる。

変更履歴

バージョン日付変更内容
1.02026-05-09初版作成