Square Apple Pay集成崩溃:NSInvalidArgumentException异常求助
崩溃异常信息
Terminating app due to uncaught exception 'NSInvalidArgumentException'.
787406+0530 Runner[6770:338808] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSPlaceholderString initWithFormat:locale:arguments:]: nil argument'
*** First throw call stack:
(0x1a718edb4 0x1a56199a0 0x1a653e4bc 0x1a653e380 0x104c1cda0 0x104c13f38 0x104c1e860 0x108ca0b14 0x10878ba8c 0x10511408c 0x1051158c4 0x105124428 0x105124080 0x1a7218ac8 0x1a71fc754 0x1a7200dfc 0x1e10b6984 0x1ae3e3e7c 0x1ae3e3af4 0x102da4d34 0x1c88bede0)
问题复现步骤
- 在Flutter项目的
pubspec.yaml中配置SDK:square_in_app_payments: ^1.7.5 - 完成Apple Pay初始化
- 调用
await InAppPayments.requestApplePayNonce(...)触发崩溃
复现代码
InAppPayments.requestApplePayNonce( price: "1.0", currencyCode: "USD", countryCode: 'US', summaryLabel: 'Cookie', paymentType: ApplePayPaymentType.finalPayment, onApplePayComplete: _onApplePayEntryComplete, onApplePayNonceRequestSuccess: _onApplePayNonceRequestSuccess, onApplePayNonceRequestFailure: _onApplePayNonceRequestFailure, );
解决办法
1. 升级SDK版本
该崩溃是Square Flutter插件1.7.5版本存在的iOS 16兼容性bug,官方在1.7.6版本中已修复此问题。修改pubspec.yaml中的依赖版本:
square_in_app_payments: ^1.7.6
执行flutter pub get更新依赖后,重新编译运行项目即可解决。
2. 临时修复(无法立即升级时)
如果暂时无法升级SDK,可尝试以下操作:
- 强制校验所有传入
requestApplePayNonce的参数,确保无nil值传入原生层,即使代码中已赋值,也可添加非空判断兜底。 - 检查iOS项目配置:确认Apple Pay的Merchant ID已正确配置,且项目的
Signing & Capabilities中已开启Apple Pay权限并关联对应Merchant ID。
内容的提问来源于stack exchange,提问作者Dhiren Basra

