Xcode 10 FBSDK 'SDKLoggingBehavior

Posted

技术标签:

【中文标题】Xcode 10 FBSDK \'SDKLoggingBehavior【英文标题】:Xcode 10 FBSDK 'SDKLoggingBehaviorXcode 10 FBSDK 'SDKLoggingBehavior 【发布时间】:2018-06-06 16:08:01 【问题描述】:

我已更新到 Xcode 10,但无法编译我的代码。我从 Facebook SDK (FacebookCore) 收到以下错误。

参数类型“SDKLoggingBehavior?”不符合预期类型 '序列'

在线

返回集(行为)

我已经使用 cocoapods 安装了最新的 FBSDK。

我将如何解决这个问题,还是等待 FB 更新 SDK?

extension SDKSettings 
      /**
       Current logging behaviors of Facebook SDK.
       The default enabled behavior is `.DeveloperErrors` only.
       */
      public static var enabledLoggingBehaviors: Set<SDKLoggingBehavior> 
        get 
          let behaviors = FBSDKSettings.loggingBehavior().flatMap  object -> SDKLoggingBehavior? in
            if let value = object as? String 
              return SDKLoggingBehavior(sdkStringValue: value)
            
            return nil
          
          return Set(behaviors)
        
        set 
          let behaviors = newValue.map( $0.sdkStringValue )
          FBSDKSettings.setLoggingBehavior(Set(behaviors))
        
      

      /**
       Enable a particular Facebook SDK logging behavior.

       - parameter behavior: The behavior to enable
       */
      public static func enableLoggingBehavior(_ behavior: SDKLoggingBehavior) 
        FBSDKSettings.enableLoggingBehavior(behavior.sdkStringValue)
      

      /**
       Disable a particular Facebook SDK logging behavior.

       - parameter behavior: The behavior to disable.
       */
      public static func disableLoggingBehavior(_ behavior: SDKLoggingBehavior) 
        FBSDKSettings.disableLoggingBehavior(behavior.sdkStringValue)
      
    

【问题讨论】:

【参考方案1】:

此问题已在最新版本 0.3.1(截至 2018 年 6 月 8 日)中得到修复。

旧答案:

这是在最新的 master 中修复的,但不是在最新的标签或 Cocoapod 版本中。

要使用它,请直接从主分支中将代码从 Swift SDK repo 克隆到您的项目中,或者将您的 podfile 更改为指向 master:

pod 'FacebookCore', :git => 'https://github.com/facebook/facebook-sdk-swift', :branch => 'master'

可以在here找到修复此问题的拉取请求。

【讨论】:

安装 pod 仍然获得 0.3.0 版【参考方案2】:

添加到 @JAL 的 答案:

对我来说,安装 pod 仍然给我版本 0.3.0

用最新版本号修改PodFile给我最新的sdk

  pod 'FacebookCore','0.5.0'
  pod 'FacebookLogin','0.5.0'
  pod 'FacebookShare','0.5.0'

【讨论】:

我 2011 年中期的 mac 仅限于 xCode 10.1 在这个 pod 上运行良好。【参考方案3】:
    将部署目标设置为 11.0(在项目和 Podfile 中) 执行“pod repo 更新”

    按如下方式更新您的 Podfile:

    pod 'FacebookCore', :git => 'https://github.com/facebook/facebook-sdk-swift', :branch => 'master'

    pod 'FacebookLogin', :git => 'https://github.com/facebook/facebook-sdk-swift', :branch => 'master'

    pod 'FacebookShare', :git => 'https://github.com/facebook/facebook-sdk-swift', :branch => 'master'

【讨论】:

【参考方案4】:

改用这个

Change flatMap to compactMap

【讨论】:

不幸的是,这对大多数用户来说并不是一个很好的答案。通过 CocoaPods 安装的依赖项不被检入 git 是非常常见的做法,因此虽然这可能会在本地解决问题,但对于使用同一代码库的其他人来说并不能解决问题。 为我工作。谢谢!【参考方案5】:

在 xcode 10 中。 这对我有用。

1. change the ios version 11.0
2. for swift 4.2 replace flatMap() to compactMap()
3. delete the derived data of project.
4. clean and run the project on simulator


Change flatMap to compactMap

希望对你有帮助

【讨论】:

【参考方案6】:

只需更新您的 pod,它对我来说工作正常

    打开终端并设置项目路径 'pod repo 更新' 部署目标 11.0 或更高版本

【讨论】:

【参考方案7】:

我在以下代码中遇到错误

 get 
      let createBehavior =  (object: AnyHashable) -> SDKLoggingBehavior? in
        if let value = object as? String 
          return SDKLoggingBehavior(sdkStringValue: value)
        
        return nil
      

     #if swift(>=4.1)
         //line of error
            let behaviors: [SDKLoggingBehavior] = FBSDKSettings.loggingBehaviors.compactMap(createBehavior)
          #endif
          #else
          let behaviors: [SDKLoggingBehavior] = FBSDKSettings.loggingBehaviors.flatMap(createBehavior)
          #endif

我把代码改成

 let behaviors: [SDKLoggingBehavior] = (FBSDKSettings.loggingBehaviors?.compactMap( (object) -> SDKLoggingBehavior? in
            if let value = object as? String 
                return SDKLoggingBehavior(sdkStringValue: value)
            
            return nil
        )) ?? []

为我解决了问题。

【讨论】:

【参考方案8】:

如果您正在使用带有 Swift 4.2 的 Xcode 10,请确保同时使用两者

pod 'FacebookLogin', '0.5.0'
pod 'FacebookCore', '0.5.0'

如果你只使用

pod 'FacebookLogin', '0.5.0'

它将自动安装不支持的 FacebookCore -> 0.6.0。

【讨论】:

以上是关于Xcode 10 FBSDK 'SDKLoggingBehavior的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Swift 2 在 Xcode 7 beta 中导入 FBSDK

构建错误:升级到 Xcode 10 后找不到 FBSDKShareKit.h 文件

在 XCode 7.0.1 中将 FB SDK(版本 4.7.0)与 iOS 9 集成时出错:canOpenURL:URL 失败:“fbauth2:/”

适用于 iOS 的 FBSDK:“发送到实例的无法识别的选择器”

在 CI 上找不到 React Native FBSDK 文件

iOS 10 Facebook graph.facebook.com SSL 错误 - FBSDK 安全网络请求失败