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

Swift SDK 変更履歴

このページでは、AppCoins iOS Swift SDK のバージョンごとの API 変更を記載します。各エントリには、互換性のない変更、新機能、および該当する場合は移行手順が含まれます。


バージョン 5.x(予定)

互換性のない変更

  • PurchaseIntent の削除PurchaseIntent 型、Purchase.updates ストリーム、PurchaseIntent.confirm()PurchaseIntent.reject() はすべて削除されました。購入結果は product.purchase() から VerificationResult<Transaction> として直接返されるようになりました。

  • Product のプロパティ名の変更 — StoreKit 2 の命名規則に合わせて、Product の 3 つのプロパティが変更されました。

    旧名称新名称
    product.skuproduct.id
    product.titleproduct.displayName
    product.priceLabelproduct.displayPrice
  • Product.products() のシグネチャ変更domain: パラメータが削除されました。

    Product.products(for: ["sku"], domain: "com.example.app")Product.products(for: ["sku"])
  • Purchase 型が Transaction に置き換えPurchase 型は存在しなくなりました。すべてのトランザクションデータは Transaction で表されます。

  • purchase() が throw するように変更Product.PurchaseResult から .failed(let error) ケースが削除されました。エラーはスローされるようになったため、product.purchase() の呼び出しはすべて do/catch ブロックで囲んでください。

  • Purchase.unfinished()Transaction.unfinished ストリームに置き換え[Purchase] を返す関数は、throw しない AsyncStream に置き換えられました。

    let purchases = try await Purchase.unfinished()for await result in Transaction.unfinished { }
  • transaction.finish() が throw しなくなったtry await purchase.finish()await transaction.finish() に置き換えてください。

  • transaction.idString に変更 — 以前は UInt64 でした。この値を数値として保存、比較、送信しているコードを更新してください。

新機能

  • Transaction.all — アプリのトランザクション履歴全体を新しい順に返す AsyncStream<VerificationResult<Transaction>>

  • Transaction.latest(for:) — 指定した商品識別子について、最新の VerificationResult<Transaction>? を返す非同期の静的メソッド。

  • product.latestTransaction — その商品の最新トランザクションを返す Product の非同期計算プロパティ。

  • product.currentEntitlement — その商品の未完了トランザクションが存在する場合にそれを返す Product の非同期計算プロパティ。

移行手順

  1. Purchase への参照をすべて Transaction に置き換えます。 Xcode の検索と置換(Cmd+Shift+H)を使って、プロジェクト全体で型名を変更してください。

  2. Product のプロパティ名を変更します。 product.skuproduct.idproduct.titleproduct.displayNameproduct.priceLabelproduct.displayPrice に置き換えます。

  3. Product.products() の呼び出しから domain: パラメータを削除します。

  4. product.purchase()do/catch で囲み、.failed ケースを削除します。

    変更前:

    let result = await product.purchase()
    switch result {
    case .success(let verification): break
    case .pending: break
    case .userCancelled: break
    case .failed(let error): print("Purchase failed: \(error)")
    }

    変更後:

    do {
    let result = try await product.purchase()
    switch result {
    case .success(let verification): break
    case .pending: break
    case .userCancelled: break
    }
    } catch {
    print("Purchase failed: \(error)")
    }
  5. try await purchase.finish()await transaction.finish() に変更します。

  6. Purchase.unfinished()Transaction.unfinished ストリームに置き換えます。

    変更前:

    let purchases = try await Purchase.unfinished()
    for purchase in purchases {
    giveItemToUser(productID: purchase.productID)
    try await purchase.finish()
    }

    変更後:

    for await verificationResult in Transaction.unfinished {
    switch verificationResult {
    case .verified(let transaction):
    giveItemToUser(productID: transaction.productID)
    await transaction.finish()
    case .unverified(let transaction, let error):
    print("Unverified: \(error.description)")
    }
    }
  7. Purchase.updates / PurchaseIntent ストリームを削除します。 代わりに product.purchase() の戻り値から購入結果を処理してください。復元には起動時の Transaction.unfinished を使用します。

  8. transaction.id の使用箇所を更新します。 値を保存、比較、送信しているすべての箇所で UInt64 から String に変更してください。


バージョン 4.x(現行)

v4.3.3 — 2026 年 7 月

バグ修正および改善

  • 指数バックオフによる再試行ロジックにより、アトリビューションの信頼性を向上しました。
  • SDK のライフサイクルログがデバイス上に確実に保持されるよう、ログレベルを引き上げました。

v4.3.2 — 2026 年 3 月

バグ修正および改善

  • ゲストアカウントからユーザーアカウントへの変換後に getWalletList が重複したウォレットを返す不具合を修正しました。

v4.3.0 — 2026 年 3 月

バグ修正および改善

  • Apple の MessageProtection フレームワークと競合していた SwiftyRSA 依存関係を削除しました。この競合に対する回避策を追加していた場合は、削除して構いません。
  • Swift 6.2 より前のバージョン向けに、MarketplaceKit の TransactionReporting API の可用性チェックを追加しました。

v4.2.0 — 2026 年 2 月

バグ修正および改善

  • アトリビューションの精度向上のため、Web Checkout URL に installation_origin および oem_id パラメータを追加しました。

v4.1.2 — 2026 年 2 月

バグ修正および改善

  • インストール元にかかわらず MMP のインストールイベントが発火していた問題を修正しました。このイベントは Aptoide 経由のインストールでのみ発火するようになりました。

v4.1.1 — 2026 年 2 月

新機能

  • CTC(Catappult Token Contribution)のトランザクションレポートを追加しました。レポートを有効にするには、アプリの Info.plistMKSellsDigitalGoodsYES、Boolean)を追加してください。

v4.0.1 — 2025 年 12 月

バグ修正および改善

  • AppcSDK.isAvailable() が再び既定で false を返すようになりました。この既定値を変更していた以前の修正は取り消されました。
  • Swift 6.2 との互換性のため、web3swift パッケージの依存バージョンを引き上げました。

v4.0.0 — 2025 年 11 月

互換性のない変更

  • Sandbox.getTestingWalletAddress()async に変更 — すべての呼び出し箇所に await を追加してください。

    // Before
    let address = Sandbox.getTestingWalletAddress()

    // After
    let address = await Sandbox.getTestingWalletAddress()
  • AppcSDK.initialize() が必須化 — すべてのアプリエントリポイントで initialize() が呼び出されていない場合、product.purchase() の呼び出しは実行時に失敗します。以前は推奨事項でしたが、現在は必須要件です。

新機能

  • ネイティブのチェックアウト UI を Web Checkout フローに置き換えました。上記の互換性のない変更を除き、API の変更は不要です。チェックアウトの表示は SDK が内部で処理します。
  • より古い iOS バージョンのサポートを追加しました。

移行手順

  1. Sandbox.getTestingWalletAddress()await を追加します。 すべての呼び出し箇所を確認して await を追加し、必要に応じて呼び出し元の関数を async にしてください。

  2. すべてのエントリポイントで AppcSDK.initialize() を呼び出します。 SceneDelegate および AppDelegate での必要な設定については、連携ガイド を参照してください。

⚠️
AppcSDK.initialize() はすべてのアプリケーションエントリポイントで呼び出す必要があります。SceneDelegate および AppDelegate での必要な設定については、連携ガイド を参照してください。

バージョン 3.x

v3.2.0 — 2025 年 8 月

バグ修正および改善

  • TestFlight で配信されたビルドでは AppcSDK.isAvailable()false を返すようになりました。AppCoins 課金の対象となるのは、Aptoide を通じて配信されたアプリのみです。

v3.1.0 — 2025 年 5 月

新機能

  • SDK 内からアクセスできるアカウント管理シートを追加しました。
  • アカウント削除フローを実装しました。

v3.0.0 — 2025 年 5 月

互換性のない変更

  • TransactionResultPurchaseResult に名称変更product.purchase() が返す列挙型の名称が変更されました。すべての switch 文と型注釈を更新してください。

    // Before
    let result: TransactionResult = await product.purchase()

    // After
    let result: PurchaseResult = await product.purchase()
  • Purchase.updatesPurchaseIntent を発行するように変更 — 以前は VerificationResult を発行していました。このストリームは PurchaseIntent を配信するようになり、購入を完了するには明示的に確認または拒否する必要があります。

    // Before
    for await verificationResult in Purchase.updates {
    if case .verified(let purchase) = verificationResult {
    giveItem(for: purchase.sku)
    try await purchase.finish()
    }
    }

    // After
    for await intent in Purchase.updates {
    let result = await intent.confirm()
    if case .success(let verificationResult) = result,
    case .verified(let purchase) = verificationResult {
    giveItem(for: purchase.sku)
    try await purchase.finish()
    }
    }

新機能

  • 明示的な 2 段階の購入完了のための PurchaseIntent.confirm() および PurchaseIntent.reject()

移行手順

  1. Xcode の検索と置換(Cmd+Shift+H)を使用して、プロジェクト全体で TransactionResultPurchaseResult に名称変更します。

  2. Purchase.updates の監視処理を更新して PurchaseIntent を扱えるようにします。購入を完了するには intent.confirm() を、拒否するには intent.reject() を呼び出してください。

📘
PurchaseIntent は v5.x で削除されます。v3.x から v5.x へ直接アップグレードする場合は、PurchaseIntent を完全に省略し、上記の v5.x の移行手順に従ってください。

バージョン 2.x

v2.1.1 — 2025 年 3 月

バグ修正および改善

  • チェックアウト中にモバイルデータ通信が無効になった場合に、開発者向けコールバックが呼び出されない問題を修正しました。

v2.1.0 — 2025 年 3 月

バグ修正および改善

  • 不具合の修正と安定性の向上。

v2.0.0 — 2025 年 2 月

新機能

  • Purchase.updates — アプリの外部(例: プロモーションリンクやアプリのストアページ)から開始された間接的なアプリ内購入を配信する、新しい AsyncStream<VerificationResult>。アプリ起動時にこのストリームを購読して、保留中の購入を受け取り完了させてください。

    Task {
    for await verificationResult in Purchase.updates {
    if case .verified(let purchase) = verificationResult {
    giveItemToUser(productID: purchase.sku)
    try await purchase.finish()
    }
    }
    }

バージョン 1.x

v1.6.1 — 2024 年 12 月

バグ修正および改善

  • 商品や購入のカタログが大きい場合に、結果の 1 ページ目しか返されないページネーションの問題を修正しました。
  • 認証のローカライズおよび UI を改善しました。

v1.6.0 — 2024 年 11 月

バグ修正および改善

  • 決済方法のアイコンが消える問題を修正するため、URLImage をネイティブの AsyncImage に置き換えました。
  • ボーナスおよび残高の金額が正しく丸められない問題を修正しました。
  • より説明的なエラーメッセージにより、開発者によるエラーのデバッグを改善しました。

v1.5.0 — 2024 年 10 月

バグ修正および改善

  • 互換性向上のため、配布形式を .xcframework に変更しました。

v1.4.0 — 2024 年 10 月

バグ修正および改善

  • 決済シートの横向き表示に対応しました。
  • 新しい言語のサポート追加を含むローカライズの改善。

v1.3.0 — 2024 年 8 月

新機能

  • 実際の取引を伴わずにテストできるサンドボックス決済のサポートを追加しました。
  • 商品価格をユーザーの現地通貨で表示するようになりました。

v1.2.0 — 2024 年 8 月

新機能

  • サーバーサイド検証をサポートするため、Purchase に検証データを追加しました。

v1.1.0 — 2024 年 7 月

新機能

  • guest_id および oem_id のトラッキングパラメータによる MMP アトリビューションのサポートを追加しました。
  • Sandbox.getTestingWalletAddress() が同期処理になりました。

v1.0.4 — 2024 年 7 月

バグ修正および改善

  • 不具合の修正と安定性の向上。

v1.0.3 — 2024 年 5 月

バグ修正および改善

  • 不具合の修正と安定性の向上。

v1.0.2 — 2024 年 5 月

バグ修正および改善

  • 不具合の修正と安定性の向上。

v1.0.1 — 2024 年 4 月

バグ修正および改善

  • 不具合の修正と安定性の向上。

v1.0.0 — 2024 年 2 月

初回リリース

AppCoins iOS Swift SDK の最初の一般公開リリースです。

API の構成:

  • Product.products(domain:for:) — SKU で利用可能なアプリ内商品を取得します。
  • product.purchase(domain:payload:orderID:) — 購入を開始し、TransactionResult を返します(throw せず、エラーは .failed ケースとして返されます)。
  • TransactionResult.success(verificationResult:).pending.userCancelled.failed(error:)
  • VerificationResult.verified(purchase:).unverified(purchase:error:)
  • PurchaseuidskustateorderUidpayloadcreated を持つトランザクションデータクラス。
  • purchase.finish() — 購入を消費済みとしてマークします。失敗時に throw します。
  • Purchase.unfinished() — 未完了の購入の [Purchase] を返します。throw します。
  • Purchase.all() — すべての購入の [Purchase] を返します。throw します。
  • Purchase.latest(sku:) — 指定した SKU の最新の Purchase? を返します。throw します。
  • AppcSDK.initialize() — 起動時にアプリを SDK に登録します。
  • AppcSDK.isAvailable() — このデバイスで AppCoins 課金が有効かどうかを返します。
  • AppcSDK.handle(redirectURL:) — 課金のディープリンクコールバックを処理します。