无法识别的选择器发送到来自 Facebook SDK 的类

Posted

技术标签:

【中文标题】无法识别的选择器发送到来自 Facebook SDK 的类【英文标题】:unrecognized selector sent to class coming from Facebook SDK 【发布时间】:2018-11-02 03:20:55 【问题描述】:

大约一年前,我将 Facebook SDK 安装到我的 ios 应用中,仅用于广告跟踪。我在我的应用程序中调用的唯一 SDK 调用是它们告诉您放入应用程序委托的三个。没有任何问题,我的应用运行良好(广告跟踪工作正常)。

最近 Facebook 发送了一封电子邮件,要求我更新 SDK,所以我做到了。现在我的应用程序在启动后几秒钟内崩溃,并出现一串“无法识别的选择器发送到类”错误。

由于我没有 Facebook 的源代码,我无法调试它,不知道它来自哪里,除了从我的应用程序中完全删除 SDK 之外别无选择,这将使我的营销人员非常心烦意乱。

这是什么问题?有人找到解决办法了吗?

【问题讨论】:

仅供参考,我确定问题来自 Facebook,因为 (a) 错误消息包含文本 "+[NSError fbErrorWithCode:userInfo:message:underlyingError:]" 和 (b) 问题如果我注释掉三个 Facebook SDK 调用,它就会消失。 【参考方案1】:

在构建设置中,您是否为“其他链接器标志”设置了-ObjC

这为我解决了问题。

此外,如果您不使用 CocoaPods,您可以look at the podspec 并尝试确保您已链接所需的依赖项。

具体来说:

  "ios": 
    "weak_frameworks": [
      "Accounts",
      "CoreLocation",
      "Social",
      "Security",
      "QuartzCore",
      "CoreGraphics",
      "UIKit",
      "Foundation",
      "AudioToolbox",
      "WebKit"
    ]
  ,

【讨论】:

谢谢,-ObjC 标志为我解决了这个问题。显然,在上一个版本中不需要。【参考方案2】:

参见RN FBK SDK iOS issue 472 和RN Unity SDK issue 208 也报告了类似的崩溃。

对我来说,添加 -ObjC 链接器标志不足以防止崩溃。

我还必须包含 force_load 标志和 FBSDKLoginKit 框架的正确路径。

所以在 Other Link Flags 项目中的 Build Settings 在 XCode 中我添加了:

-ObjC
-force_load
-$PROJECT_DIR/FacebookSDK/FBSDKCoreKit.framework/FBSDKCoreKit

请注意,您到 FBSDKCoreKit 框架的路径可能不同。

在上面链接的 Github 问题中有更多关于此崩溃原因的详细信息。

【讨论】:

以上是关于无法识别的选择器发送到来自 Facebook SDK 的类的主要内容,如果未能解决你的问题,请参考以下文章

尝试获取 AppDelegate 时出现“无法识别的选择器发送到实例”错误

Facebook iOS SDK 3.2.1 - [NSError fberrorShouldNotifyUser]:无法识别的选择器发送到实例

无法识别的选择器发送到 UINavigationController 的实例

无法识别的选择器发送到实例 resignFirstResponder

-[XBMessage messageHash]:发送到实例的无法识别的选择器

[NSManagedObject sayHello]:无法识别的选择器发送到实例 0x