酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Xcode 8のiOS 10シミュレータを使っているとFacebook SDKの認証に失敗する

Firebase.Authを使ってFacebookログインの実装をしていたのですが、iOS 10でFacebook SDKの認証が通らなくなってしまって焦りました。

(追記)この現象はXcode 8のシミュレータ限定の現象のようです。stackoverflowでも同じ問題に悩んでいる方がいました。

エラーログの出方がFacebook SDKの導入時の別の問題と同じですので、ググリビリティは最悪で問題の解決まで時間がかかってしまいました。

結論としては、Facebook SDKをiOS 10 SDKの「シミュレータ」で利用する場合にはKeychain Sharingを有効にしておく必要がありそうです

開発環境

  • Xcode 8
  • Swift 3
  • Facebook SDK
    • FBSDKCoreKit (4.11.0)
    • FBSDKLoginKit (4.11.0)
    • FBSDKShareKit (4.11.0)

現象

Facebookアプリをインストールしていない状態で、Facebook SDKを使ってログインを試みるとSafariViewControllerでログインページが表示されます。

ユーザーIDとパスワードを入力してログインに成功したあと、自分のアプリに戻ってくるのですがiOS 10の場合に以下のようなエラーログが出力されてアクセストークンが得られません。

-canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"

LSApplicationQueriesSchemesに利用するスキーマを登録しておく必要があるというのは過去の記事にも書いていました。

もちろん当該のアプリでもLSApplicationQueriesSchemesはきちんと設定しています。

 <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>fbapi</string>
        <string>fb-messenger-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
    </array>

何が悪かったのか? Keychain Sharingを ON にしていませんでした

f:id:ch3cooh393:20161008181506p:plain

Keychain Sharingを ON にするとあっさりとトークンを得ることができました。