Flutter升级RevenueCat后iOS调用Purchases.getOfferings()挂起
问题属性说明
这是purchases_flutter 3.x版本适配iOS 15+的已知问题,和你将Purchases.identify替换为Purchases.logIn的操作无直接关联。
getOfferings无返回的核心原因
- 你当前使用的
purchases_flutter: ^3.0.0底层依赖的iOS原生RevenueCat SDK存在缺陷:iOS 15 + XCode 13的组合下,SKProductsRequest请求返回304缓存状态时,回调线程会出现死锁,导致Dart层的Future永远得不到完成通知,最终表现为方法调用挂起。 - M1芯片的Mac编译iOS真机包时,StoreKit框架的静态链接逻辑会额外提升该线程冲突的触发概率,这也是Android端运行正常、仅iOS端出问题的原因。
修复方案
永久修复
直接将pubspec.yaml中的purchases_flutter依赖版本升级到^3.10.0,该版本是3.x分支的稳定补丁版,官方已经专门修复了iOS 15下SKProductsRequest的死锁问题,不需要修改现有业务逻辑即可解决挂起问题。
临时应急方案
如果暂时不能升级依赖,可以给getOfferings调用添加主动超时逻辑,避免应用启动直接卡住:
import 'dart:async'; // 调用处添加超时 Offerings? rcOfferings; try { rcOfferings = await Purchases.getOfferings().timeout(const Duration(seconds: 8)); } on TimeoutException catch (_) { // 超时后走降级逻辑,比如隐藏付费入口、延后到次页再请求 rcOfferings = null; }
额外验证操作
如果升级后仍有异常,按以下步骤清理缓存重新编译即可:
- 项目根目录执行
flutter clean - 删除ios文件夹下的Pods目录和Podfile.lock文件
- 终端进入ios目录,M1芯片Mac执行
arch -x86_64 pod install --repo-update,Intel芯片Mac直接执行pod install --repo-update - 重启XCode后重新运行到真机测试
内容的提问来源于stack exchange,提问作者edn
相关产品推荐
相关产品推荐

