exc_bad_access 在 Facebook sdk 登录 Xcode 8 beta

exc_bad_access in Facebook sdk login Xcode 8 beta

最近我开始为我的应用程序添加 IOS 10 个功能,但遇到了一个奇怪的错误:

当我在嵌入式浏览器中单击 facebook 本身的确认按钮时,通过浏览器使用 facebook SDK 进行身份验证时,应用程序崩溃。

不幸的是,这个错误没有提供信息,控制台没有告诉我任何关于它的信息,也没有调用堆栈来查看这个异常发生的位置。

证明此错误原因的两点: 1.如果通过系统帐户登录,则不会出现此错误,但仅当它在浏览器中时才会出现,如下图所示:

(一点击确定就出现异常)

  1. 当我通过 Xcode 7.x 运行 我的应用程序时,错误不会发生。所以这可能与facebook SDK与新编译器的集成或类似的东西有关。

希望有人对此有答案,或者可能知道如何调试这种无信息的错误。 提前致谢, 丽然.

我只是 运行 进入类似的东西,但不幸的是我没有时间去挖掘这个问题。但是我找到了这个网站,它很好地解释了它是如何工作的,以及如何调试它:What Is EXC_BAD_ACCESS and How to Debug It

因此,这就是发生此错误的原因:

In summary, when you run into EXC_BAD_ACCESS, it means that you try to send a message to a block of memory that can't execute that message.

In some cases, however, EXC_BAD_ACCESS is caused by a corrupt pointer. Whenever your application attempts to dereference a corrupt pointer, an exception is thrown by the kernel.

本文给出的解决方案之一是使用Zombie Objects

Click the active scheme in the top left and choose Edit Scheme.

Select Run on the left and open the Diagnostics tab at the top. To enable zombie objects, tick the checkbox labeled Enable Zombie Objects. If you now run into EXC_BAD_ACCESS, the output in Xcode's Console will give you a much better idea of where to start your search.

它应该在日志中为您提供更多信息,以便您了解问题的根源。顺便说一句,它对我不起作用。

另一个解决方案是使用 analyze Xcode 工具检查代码中可能存在问题的区域。 按 Shift-Cmd-B 以使用它,或 Product -> Analyze 它应该显示您必须在 Xcode 左侧面板的问题导航器中检查的可能问题。单击问题以显示 Xcode 可疑的代码块,但最终可能根本不是问题的一部分。

更多信息,请查看上面的link,我只是总结了文章所说的内容。

我也 运行 关注这个问题。似乎 UIApplication Delegate 方法之一在 iOS 9 中被弃用,并且可能在 iOS 10 中被删除。

optional func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool

我换成了下面的方法:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(app,
                                                                     open: url,
                                                                     sourceApplication: options[.sourceApplication] as! String,
                                                                     annotation: options[.annotation])
}