确定是否正在使用 Xcode StoreKit 配置文件

Determining if Xcode StoreKit Configuration file is being used

Xcode 12 引入了 StoreKit Configuration files,这非常适合在深入研究 App Store Connect、Sandbox 等之前测试基本的 StoreKit 功能。

有没有办法在 运行 时(甚至在编译时)确定方案的 StoreKit Configuration 值是否设置为 'none' 或某个文件?

我也有同样的疑问,因为我执行本地收据验证,所以我必须使用正确的证书:StoreKit 或 Apple 的根证书。

解决方案非常简单:在您的 .storekit 文件中添加一个新产品,以检查您使用的是本地配置还是 sandbox/App 商店配置。

添加一个名为 using_store_kit_conf 的新产品 ID,然后将 ID 数组传递给也包含此 ID 的 SKProductsRequest。 当您在委托中获得产品列表时,请检查 using_store_kit_conf 产品是否存在以确定您是否正在使用 StoreKit 配置文件。

如果您向用户列出所有产品,请记得过滤掉 using_store_kit_conf 产品。

样本:

static let premiumOneTime = "premium_one_time"
static let usingStoreKitConfiguration = "using_store_kit_conf"
static let productIds: Set<String> = [InAppPurchase.premiumOneTime, InAppPurchase.usingStoreKitConfiguration]
private var products: [SKProduct] = []

传递所有 ID:

productsRequest = SKProductsRequest(productIdentifiers: InAppPurchase.productIds)

代表:

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
    self.products = response.products
    print("InAppPurchase products: ", response.products)
}

检查是否使用 StoreKit 配置:

var isUsingStoreKitConfiguration: Bool {
    products.contains(where: { product in product.productIdentifier == InAppPurchase.usingStoreKitConfiguration })
}

注意:这仅在您加载产品列表后有效,否则 isUsingStoreKitConfiguration 将始终 return false。