【问题标题】: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)
      }
    }
}

【问题讨论】:

    标签: swift facebook facebook-ios-sdk xcode10


    【解决方案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】:
    1. 将部署目标设置为 11.0(在项目和 Podfile 中)
    2. 执行“pod repo 更新”
    3. 按如下方式更新您的 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,它对我来说工作正常

        1. 打开终端并设置项目路径
        2. 'pod repo 更新'
        3. 部署目标 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。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-04-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-04-26
              • 2019-03-24
              • 2020-07-03
              • 1970-01-01
              相关资源
              最近更新 更多