Xcode 10 FBSDK&#SDK; SDKLoggingBehavior

时间:2018-06-06 16:08:01

标签: swift facebook facebook-ios-sdk xcode10

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

  

参数类型&#SDK; 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)
      }
    }
}

8 个答案:

答案 0 :(得分:14)

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

旧答案:

这已在最新的主数据中修复,但不在最新的标记或Cocoapod版本中修复。

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

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

可以找到解决此问题的提款请求here

答案 1 :(得分:10)

添加到 @JAL的答案

对我来说,安装Pod仍会为我提供0.3.0

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

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

答案 2 :(得分: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'

答案 3 :(得分:1)

改为使用此

        {id: "53",  description: "here is a <a href = '#/detail/'>Link</a> to something", additional: ["2.jpg", "3.jpg" ]}

答案 4 :(得分:1)

在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

希望有帮助

答案 5 :(得分:0)

只需更新您的吊舱及其对我的正常运行

  1. 打开终端并设置项目路径
  2. “ pod仓库更新”
  3. 部署目标11.0或更高版本

答案 6 :(得分:0)

enter image description here 在以下代码中出现错误

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

为我解决的问题。

答案 7 :(得分:0)

如果要在Swift 4.2上使用Xcode 10,请确保同时使用

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

如果您仅使用

pod 'FacebookLogin', '0.5.0'

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