iOS应用中设置GIDSignIn的clientID触发“unrecognized selector sent to instance”错误求助
我之前在Objective-C项目里集成Google登录时也踩过类似的坑,结合经验给你几个可行的排查方向:
检查GoogleSignIn版本与iOS 14的兼容性
iOS 14对第三方框架有一些权限和API限制,建议锁定一个适配iOS 14的GoogleSignIn版本。比如在Podfile里指定:pod 'GoogleSignIn', '~> 6.2.2'然后执行
pod update GoogleSignIn,清理Xcode缓存(Cmd+Shift+K)后重新构建项目。确认初始化时机与上下文
确保你是在application:didFinishLaunchingWithOptions:方法内设置clientID,而且是在UIApplication完成基础初始化之后。如果在其他提前初始化的代码块(比如分类、全局初始化方法)里调用,可能GIDSignIn的实例还没完成加载,导致方法无法识别。可以把设置代码移到didFinishLaunching的末尾试试。彻底重置CocoaPods集成
有时候Pod的缓存会导致框架部分导入失败,试试以下步骤:- 执行
pod deintegrate彻底移除当前项目的Pod集成 - 删除项目根目录下的
Podfile.lock和Pods文件夹 - 重新执行
pod install - 务必打开生成的
.xcworkspace文件进行开发,而不是旧的.xcodeproj
- 执行
验证
-ObjC链接器标记的正确性
虽然你已经设置了,但要确认是在你的项目目标的Build Settings里设置,而不是Pod子目标的设置。如果还是不行,可以尝试添加-all_load标记(不过-ObjC通常足够,除非涉及静态库的特殊情况)。排查
GID_SIGN_IN_KEY的定义问题
暂时把代码改成直接使用字符串:[GIDSignIn sharedInstance].clientID = @"你的实际Google Client ID";如果这样不报错了,说明是
GID_SIGN_IN_KEY的宏定义有问题(比如拼写错误、未正确导入定义文件);如果还是报错,那问题出在框架的集成上。检查是否存在重复框架导入
如果你之前手动导入过GoogleSignIn相关框架,又通过CocoaPods集成,会导致冲突。打开项目的Linked Frameworks and Libraries面板,移除所有手动添加的GoogleSignIn相关框架,只保留CocoaPods自动导入的版本。验证GIDSignIn类是否被正确加载
在设置clientID之前添加一行日志:NSLog(@"GIDSignIn class exists: %@", [GIDSignIn class]);如果打印结果为
(null),说明框架根本没被正确导入,需要重新检查Pod的安装和项目的构建路径。
内容的提问来源于stack exchange,提问作者Swissdude

