Xcode 14.1(Beta版)编译失败:React Native Stripe组件报错求助
解决@stripe/stripe-react-native@0.2.3在Xcode14.1 Beta编译失败的方案
问题根源
@stripe/stripe-react-native@0.2.3依赖的Stripe iOS SDK版本中,CardDetailsEditView.swift文件里的存储属性违规使用了@available修饰符。Xcode14.1 Beta的Swift编译器收紧了语法规则,不再允许这种写法,这就是编译报错的核心原因——修改Podfile里的iOS部署版本根本无法触及问题本质。
可行修复方案
方案1:升级Stripe React Native版本(优先推荐)
直接把@stripe/stripe-react-native升级到0.19.0及以上版本,这些版本已经适配了Xcode14的语法要求,可彻底解决该编译错误。
执行以下命令更新:
npm install @stripe/stripe-react-native@latest # 用yarn的话执行 yarn add @stripe/stripe-react-native@latest
更新完成后,进入iOS目录执行pod install,再重新编译项目即可。
方案2:手动修改Stripe SDK源码(临时应急)
如果暂时没法升级主库,可直接修改Pod拉取的Stripe SDK代码:
- 在Xcode里打开项目,找到
Pods目录下的Stripe→Sources→PaymentSheet→CardDetailsEditView.swift - 定位到报错的存储属性,比如类似这样的代码:
@available(iOS 13.0, *) private let someProperty: SomeType - 移除属性上的
@available修饰符,改成在使用该属性的代码块里加版本判断:- 先修改属性定义:
private let someProperty: SomeType - 然后在用到该属性的地方添加条件判断:
if #available(iOS 13.0, *) { // 这里写使用someProperty的代码 } else { // 低版本系统的兼容逻辑(如果需要) }
- 先修改属性定义:
- 保存修改后重新编译项目。
方案3:锁定Stripe iOS SDK兼容版本
在Podfile里指定一个未使用违规语法的Stripe iOS SDK版本:
- 打开项目iOS目录下的Podfile,添加一行:
pod 'Stripe', '~> 22.13.0' - 执行
pod install --repo-update强制安装该版本,之后再编译项目。
内容的提问来源于stack exchange,提问作者Mian Umer
相关产品推荐
相关产品推荐

