Xcode 10 FBSDK 'SDKLoggingBehavior

Xcode 10 FBSDK 'SDKLoggingBehavior

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

Argument type 'SDKLoggingBehavior?' does not conform to expected type 'Sequence'

在线

return Set(behaviors)

我已经使用 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({ [=11=].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)
      }
    }
}

这已在最新版本 0.3.1(截至 2018 年 6 月 8 日)中修复。

旧答案:

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

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

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

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

  1. 将部署目标设置为 11.0(在项目和 Podfile 中)
  2. 做'pod repo update'
  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'

改用这个

Change flatMap to compactMap

只要更新你的 pod,它对我来说工作正常

  1. 打开终端并设置项目路径
  2. 'pod repo update'
  3. 部署目标 11.0 或更高版本

在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

希望对您有所帮助

添加到 @JAL 的 回答:

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

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

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

我在以下代码中遇到错误

 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
        })) ?? []

为我解决了问题。

如果您使用 Xcode 10 和 Swift 4.2,请确保同时使用

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

如果你只使用

pod 'FacebookLogin', '0.5.0'

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