iOS Swift集成reCAPTCHA Enterprise初始化时出现未识别选择器错误
reCAPTCHA Enterprise iOS SDK初始化崩溃:unrecognized selector sent to instance
问题场景
使用Swift开发iOS应用,通过Swift Package Manager导入reCAPTCHA-Enterprise-Mobile-SDK,执行以下初始化代码时发生崩溃:
let (recaptchaClient, error) = await Recaptcha.getClient(siteKey: key) if let recaptchaClient = recaptchaClient { self.recaptchaClient = recaptchaClient } if let error = error { print("RecaptchaClient creation error: \(error.errorMessage ?? \"NIL\")."); }
崩溃日志:
2023-04-14 12:55:20.351476+0530 Runner[2442:667659] -[RCAx_GPBTimestamp initWithTimeIntervalSince1970:]: unrecognized selector sent to instance 0x28191c000 2023-04-14 12:55:20.352389+0530 Runner[2442:667659] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[RCAx_GPBTimestamp initWithTimeIntervalSince1970:]: unrecognized selector sent to instance 0x28191c000' *** First throw call stack: (0x1cbdbba84 0x1ca20d958 0x1cbf1c110 0x1cbdd0c28 0x1cbe3470c 0x104bc3d74 0x104bbd91c 0x104bbda04 0x104b973a8 0x104a3c08c 0x104a3d8c4 0x104a44a20 0x104a45698 0x104a51158 0x218562b50 0x21856267c) libc++abi: terminating with uncaught exception of type NSException *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[RCAx_GPBTimestamp initWithTimeIntervalSince1970:]: unrecognized selector sent to instance 0x28191c000' terminating with uncaught exception of type NSException (Recorded stack frame)
错误含义
该错误表示SDK内部的RCAx_GPBTimestamp类无法找到initWithTimeIntervalSince1970:方法,本质是依赖库版本不兼容或重复引入导致的符号冲突/缺失。RCAx_GPBTimestamp是reCAPTCHA SDK依赖的Protocol Buffers(Protobuf)相关类,出现这类问题通常是项目中同时存在多个版本的Protobuf库,或SDK导入时未正确拉取完整依赖链。
解决方法
- 清理并重新导入SDK:
- 从Swift Package Manager中移除reCAPTCHA-Enterprise-Mobile-SDK
- 清理项目缓存:执行
Product > Clean Build Folder,删除DerivedData目录 - 重新添加SDK包地址,勾选"Up to Next Major Version"版本规则,让SPM自动拉取兼容的依赖版本
- 检查重复依赖:
查看项目是否手动引入了Protobuf相关库(如GoogleUtilities或其他依赖Protobuf的第三方库),若有则统一版本号,避免版本冲突 - 验证版本兼容性:
确保reCAPTCHA SDK版本与iOS系统版本兼容(最低支持iOS 13.0),若项目部署目标低于13.0,需调整项目设置或降级SDK到兼容版本 - 强制更新依赖:
在SPM中选择File > Packages > Update to Latest Package Versions,强制更新所有依赖到最新兼容版本
内容的提问来源于stack exchange,提问作者Samuel I
相关产品推荐
相关产品推荐

