Xcode 10 FBSDK 'SDKLoggingBehavior

Я обновил Xcode 10 и не смог скомпилировать свой код. Я получаю следующую ошибку из SDK Facebook (FacebookCore).

Тип аргумента "SDKLoggingBehavior?" не соответствует ожидаемому типу "Последовательность",

В сети

return Set (поведение)

Я установил последний FBSDK, используя cocoapods.

Как я могу решить эту проблему или это ожидание обновления SDK от FB?

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 (по состоянию на 8 июня 2018 года).

Старый ответ:

Это исправлено в последнем мастере, но не в последнем теге или выпуске Cocoapod.

Чтобы использовать это, клонируйте код непосредственно из главной ветки в ваш проект из репозитория Swift SDK или измените ваш подфайл, чтобы он указывал на master:

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

Запрос на удаление, который исправил эту проблему, можно найти здесь.

Ответ 2

Добавление к ответу @JAL:

Для меня установка стручков все еще дает мне версию 0.3.0

изменение PodFile с последним номером версии дает мне последний SDK

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

Ответ 3

  1. Установите для Deployement Target значение 11.0 (в проекте и подфайле)
  2. Сделайте 'обновление репо под'
  3. Обновите ваш Podfile следующим образом:

    модуль 'FacebookCore',: git => ' https://github.com/facebook/facebook-sdk-swift ' ,: branch => 'master'

    модуль 'FacebookLogin',: git => ' https://github.com/facebook/facebook-sdk-swift ' ,: branch => 'master'

    модуль 'FacebookShare',: git => ' https://github.com/facebook/facebook-sdk-swift ' ,: branch => 'master'

Ответ 4

Используйте это вместо

Change flatMap to compactMap

Ответ 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

Просто обновите ваш модуль и он работает нормально для меня

  1. Откройте терминал и установите путь к проекту
  2. "обновление репо"
  3. Цель развертывания 11.0 или выше

Ответ 7

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

Исправлена проблема для меня.

Ответ 8

Если вы работаете с Xcode 10 с Swift 4.2, обязательно используйте оба

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

если вы используете только

pod 'FacebookLogin', '0.5.0'

Он автоматически установит FacebookCore → 0.6.0, который не поддерживается.