升级Xcode 9.3后Facebook Login返回时触发EXC_BAD_ACCESS崩溃
解决Xcode 9.3升级后Facebook登录返回应用崩溃的问题
嘿,我刚好碰到过一模一样的情况!Xcode 9.3的底层适配变化确实给第三方登录SDK挖了不少坑,你遇到的EXC_BAD_ACCESS (code=1, address=0x0)空指针崩溃,大概率是Facebook SDK和新环境的兼容性问题,给你几个亲测有效的解决步骤:
优先升级Facebook SDK版本
旧版SDK(比如v4.28及更早)对Xcode 9.3适配很差,尤其是Swift 4.1和iOS 11.3的环境。直接更到最新稳定版就行:
如果用CocoaPods,在终端跑:pod update FacebookCore FacebookLogin手动管理SDK的话,去Facebook开发者后台下载最新包替换旧文件就好。
修复AppDelegate的回调逻辑
崩溃常出现在URL回调的空参数处理上,给application:openURL:options:加个空值判断再调用Facebook的处理方法:
Swift版本:func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { guard let sourceApp = options[.sourceApplication] as? String else { return false } return SDKApplicationDelegate.shared.application(app, open: url, sourceApplication: sourceApp, annotation: options[.annotation]) }Objective-C版本:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { NSString *sourceApp = options[UIApplicationOpenURLOptionsSourceApplicationKey]; if (!sourceApp) { return NO; } return [[FBSDKApplicationDelegate sharedInstance] application:app openURL:url sourceApplication:sourceApp annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; }关掉Zombie Objects调试选项
有不少开发者反馈,Xcode 9.3开启Zombie Objects时会触发这个崩溃。你去Product > Scheme > Edit Scheme > Run > Diagnostics里,把Zombie Objects的勾去掉,重新跑项目试试。彻底清理项目缓存
Xcode升级后的旧缓存很容易搞事情:- 先关掉Xcode
- 删除项目的
DerivedData文件夹(路径在Xcode > Preferences > Locations里能找到) - 用CocoaPods的话,终端跑
pod deintegrate && pod install - 重新打开项目编译运行
对了,你日志里那条[App] if we're in the real pre-commit handler...只是系统警告,和崩溃没啥关系,不用纠结它~
内容的提问来源于stack exchange,提问作者fcberg
相关产品推荐
相关产品推荐

