web-dev-qa-db-ja.com

Xcode 10 FBSDK 'SDKLoggingBehavior

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)
      }
    }
}
15
MattBlack

これは、最新リリースの0.3.1(2018年6月8日現在)で修正されています。

古い答え:

これは最新のマスターでは修正されていますが、最新のタグやCocoapodリリースでは修正されていません。

これを使用するには、マスターブランチのコードを Swift SDK repo からプロジェクトに直接クローンするか、マスターを指すようにポッドファイルを変更します。

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

この問題を修正したプルリクエストは here にあります。

14
JAL

@ JAL's answerに追加:

私にとっては、ポッドをインストールしてもバージョン0.3.0

PodFileを最新のバージョン番号で変更すると、最新のSDKが提供されます

  pod 'FacebookCore','0.5.0'
  pod 'FacebookLogin','0.5.0'
  pod 'FacebookShare','0.5.0'
10
Zaid Mirza
  1. 展開ターゲットを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'

3
n.by.n

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

それが役に立てば幸い

1
Abuzar Manzoor

代わりにこれを使用してください

Change flatMap to compactMap
1
MUHAMMAD HASSAN

ポッドを更新するだけで問題なく動作します

  1. ターミナルを開き、プロジェクトパスを設定します
  2. 「ポッドリポジトリの更新」
  3. 展開ターゲット11.0以降
0
Sahidul Islam

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

私の問題を修正しました。

0
Pramod More

Swift 4.2でXcode 10を使用している場合は、必ず両方を使用してください

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

使用する場合のみ

pod 'FacebookLogin', '0.5.0'

FacebookCore-> 0.6.0が自動的にインストールされますが、サポートされていません。

0
Akila Wasala