iOS 如何加快测试内购功能?

这里每天分享一个 iOS 的新知识,快来关注我吧

前言

在以前,测试内购不是一件容易的事情,需要开沙盒账号,打各种测试包之类的。

从 Xcode 14 开始,苹果推出了一个 StoreKit 配置文件,可以支持在 Xcode 中测试 App 内购买项目。还能够在不连接到 App Store 服务器的情况下购买产品,无需互联网连接,并且还能测试交易失败等各种边缘情况。

今天就来聊聊这个功能。

创建 StoreKit Configuration

要测试内购产品,需要先在 Xcode 中创建一个 StoreKit Configuration 文件,点击快捷键 Command + N,新建文件,搜索 StoreKit,可以看到一个 StoreKit Configuration File

点击下一步,输入名称,如果你的应用在 App Store Connect 上已经创建了一些内购商品,则需要勾选 Sync this file with an app in App Store Connect,勾选后会自动同步已有商品(这种情况貌似只能同步,不能编辑),最后点击下一步,完成创建。

我本次演示的 Demo 中没有勾选同步选项,创建出这个文件后,点击打开,是一个空页面,点击页面的左下角的加号:

这里可以创建用于售卖的 4 种商品类型:

  • Add Consumable In-App Purchase: 消耗品

  • Add Non-Consumable In-App Purchase: 非消耗品

  • Add Non-Renewing Subscription: 非续订订阅商品

  • Add Renewable Subscription: 可续订订阅商品

比如我们点击创建一个消耗品,输入产品名称和 ID,点击完成按钮,屏幕上出现了这个产品的信息,并且可以动态配置产品名、ID、价格、本地化信息等选项:

创建其他产品也是一样的操作,这里就不演示了。

在这个产品的上方还可以看到 Configuration Settings 的选项,点击之后可以看到关于内购的相关配置:

这里可以配置更详细的内容,比如默认的地区、语言,购买选项,以及模拟各种购买过程中的报错信息,可以自己探索一下。

启动 StoreKit 测试

要使用这个配置文件,需要在启动选项中设置,点击运行选项中的项目 -> Edit Scheme...

在 Run 一栏中的 StoreKit Configuration 中选择我们刚刚创建的配置文件,并点击完成。

此时运行项目,就能在项目中使用这个配置文件了。

代码部分

接下来可以在项目中获取刚刚配置的产品了,因为使用的是本地的配置文件,因此即使在无网的情况下也能正常进行获取和购买。

swift 复制代码
import StoreKit

class ViewController: UIViewController, SKProductsRequestDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        // 配置请求
        let req = SKProductsRequest(productIdentifiers: ["ios.product1"])
        req.delegate = self
        
        // 开始请求商品
        req.start()
    }

    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        guard let product = response.products.first else {
            return
        }
        
        // 商品请求成功,渲染出来
        DispatchQueue.main.async {
            let label = UILabel()
            label.text = "商品ID:\(product.productIdentifier)\n商品名:\(product.localizedTitle)\n价格:\(product.price)"
            label.numberOfLines = 0
            label.textAlignment = .center
            self.view.addSubview(label)
            label.sizeToFit()
            label.center = self.view.center
        }
    }
}

我这里只是简单的写了获取商品的代码,关于购买的部分,以后专门写一篇给大家介绍。

最后运行代码,就可以成功的在模拟器上看到商品信息了:

这里每天分享一个 iOS 的新知识,快来关注我吧

本文同步自微信公众号 "iOS新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

相关推荐
咕噜签名分发冰淇淋2 小时前
免下载苹果 IPA 文件重签名工具:快速更换应用名称和 BID的教程
ios
二流小码农11 小时前
鸿蒙开发:DevEcoStudio中的代码提取
android·ios·harmonyos
Digitally17 小时前
如何用4 种可靠的方法更换 iPhone(2025 年指南)
ios·iphone
97650333520 小时前
iOS 审核 cocos 4.3a【苹果机审的“分层阈值”设计】
flutter·游戏·unity·ios
I烟雨云渊T20 小时前
iOS Alamofire库的使用
ios
程序员老刘·20 小时前
iOS 26 beta1 真机无法执行hot reload
flutter·ios·跨平台开发·客户端开发
EndingCoder20 小时前
React Native 构建与打包发布(iOS + Android)
android·react native·ios
程序员小刘21 小时前
HarmonyOS 5鸿蒙多端编译实战:从Android/iOS到HarmonyOS 5 的跨端迁移指南详
android·ios·华为·harmonyos
I烟雨云渊T21 小时前
iOS swiftUI的实用举例
ios·swiftui·swift
大熊猫侯佩1 天前
SwiftUI 中为何 DisclosureGroup 视图在收缩时没有动画效果?
swiftui·swift·apple