Flutter iOS构建失败 StripeApplePay pod Swift编译错误 安卓运行正常
Flutter iOS构建报错:StripeApplePay Pod Swift类型不匹配编译错误
问题表现
- 安卓端应用可正常构建、运行,仅iOS端构建失败
- 报错指向
StripeApplePaypod依赖的Swift编译错误 - 已多次尝试删除
Podfile.lock、Pods文件夹后重新执行pod install,错误仍复现 - 当前开发环境:为适配iOS 16系统,使用Xcode 14.0 Beta版本进行开发
具体报错信息
Swift Compiler Error (Xcode): '(any PKPaymentAuthorizationControllerDelegate) -> ((PKPaymentAuthorizationController, PKShippingMethod, @escaping (PKPaymentRequestShippingMethodUpdate) -> Void) -> Void)?' is not convertible to 'pkDidSelectShippingMethodSignature' (aka 'Optional<((PKPaymentAuthorizationControllerDelegate) -> (PKPaymentAuthorizationController, PKShippingMethod, @escaping (PKPaymentRequestShippingMethodUpdate) -> ()) -> ())>') /Users/apple/Desktop/Cool%20Panda%20Apps/provider_flutter/ios/Pods/StripeApplePay/StripeApplePay/StripeApplePay/Source/ApplePayContext/STPApplePayContext.swift:239:53
相关截图


问题根因
Xcode 14.0 Beta搭载的iOS 16 SDK调整了PassKit框架中PKPaymentAuthorizationControllerDelegate相关代理方法的闭包类型声明,22.8.0版本之前的StripeApplePay SDK未适配Beta版SDK的签名变更,触发Swift强类型校验失败,该问题和本地pod安装缓存、Podfile基础配置无关。
修复方案
- 升级Flutter端Stripe相关依赖
打开项目根目录pubspec.yaml,将flutter_stripe、stripe_apple_pay依赖升级到5.1.0及以上版本,执行flutter pub get拉取最新依赖包。 - 锁定iOS端Stripe依赖版本与编译配置
打开iOS目录下的Podfile,在post_install钩子中添加如下配置,强制使用适配Xcode 14的StripeApplePay版本:post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) # 统一Stripe相关依赖的最低部署版本 if ['StripeApplePay', 'StripePaymentSheet', 'StripePayments', 'StripeCore'].include? target.name target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' end end end end - 全量清理缓存后重新安装依赖
在项目根目录依次执行以下命令,清理所有旧构建缓存后重新安装依赖:flutter clean rm -rf ios/Pods ios/Podfile.lock ~/Library/Developer/Xcode/DerivedData/* flutter pub get cd ios pod deintegrate pod install --repo-update cd .. - 重新打开iOS目录下的
.xcworkspace文件构建即可,若首次构建仍报相同错误,在Xcode菜单栏执行Product > Clean Build Folder后再次构建即可。
注意:Xcode 14 Beta属于测试版本,本身存在Swift编译稳定性问题,若后续遇到其他非代码逻辑导致的编译错误,优先清理Xcode构建缓存重试。
内容的提问来源于stack exchange,提问作者Sheikh Hassan Majeed
相关产品推荐
相关产品推荐

