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.idproduct.titleproduct.displayNameproduct.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.idがStringに変更 — 以前はUInt64でした。この値を数値として保存、比較、送信しているコードを更新してください。
新機能
-
Transaction.all— アプリのトランザクション履歴全体を新しい順に返すAsyncStream<VerificationResult<Transaction>>。 -
Transaction.latest(for:)— 指定した商品識別子について、最新のVerificationResult<Transaction>?を返す非同期の静的メソッド。 -
product.latestTransaction— その商品の最新トランザクションを返すProductの非同期計算プロパティ。 -
product.currentEntitlement— その商品の未完了トランザクションが存在する場合にそれを返すProductの非同期計算プロパティ。
移行手順
-
Purchaseへの参照をすべてTransactionに置き換えます。 Xcode の検索と置換(Cmd+Shift+H)を使って、プロジェクト全体で型名を変更してください。 -
Product のプロパティ名を変更します。
product.sku→product.id、product.title→product.displayName、product.priceLabel→product.displayPriceに置き換えます。 -
Product.products()の呼び出しからdomain:パラメータを削除します。 -
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)")
} -
try await purchase.finish()をawait transaction.finish()に変更します。 -
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)")
}
} -
Purchase.updates/PurchaseIntentストリームを削除します。 代わりにproduct.purchase()の戻り値から購入結果を処理してください。復元には起動時のTransaction.unfinishedを使用します。 -
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 の
TransactionReportingAPI の可用性チェックを追加しました。
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.plistにMKSellsDigitalGoods(YES、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 バージョンのサポートを追加しました。
移行手順
-
Sandbox.getTestingWalletAddress()にawaitを追加します。 すべての呼び出し箇所を確認してawaitを追加し、必要に応じて呼び出し元の関数をasyncにしてください。 -
すべてのエントリポイントで
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 月
互換性のない変更
-
TransactionResultをPurchaseResultに名称変更 —product.purchase()が返す列挙型の名称が変更されました。すべての switch 文と型注釈を更新してください。// Before
let result: TransactionResult = await product.purchase()
// After
let result: PurchaseResult = await product.purchase() -
Purchase.updatesがPurchaseIntentを発行するように変更 — 以前は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()。
移行手順
-
Xcode の検索と置換(Cmd+Shift+H)を使用して、プロジェクト全体で
TransactionResultをPurchaseResultに名称変更します。 -
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:)。Purchase—uid、sku、state、orderUid、payload、createdを持つトランザクションデータクラス。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:)— 課金のディープリンクコールバックを処理します。