title: FBSDKLoginManager.loginWithReadPermissions not calling handler on iOS
body: <p>Simplified, the code is this:</p>
  
  <pre><code>func login() {
       NSLog("Will login with read permissions")
       FBSDKLoginManager().logInWithReadPermissions(
              ["public_profile"],
              handler: {
                  (result: FBSDKLoginManagerLoginResult!, error: NSError!) -&gt; Void in
                      NSLog("Handler is called")
              })
       NSLog("Returning from login")
  }
  </code></pre>
  
  <p>When this is called, it produces the following log statements:</p>
  
  <pre><code>2015-05-25 11:35:07.886 MyApp[1213:646722] Will login with read permissions
  2015-05-25 11:44:22.048 MyApp[1213:646722] Returning from login
  </code></pre>
  
  <p>(The large time difference between the statements above is due to me using the debugger to step through the internals of logInWithReadPermissions.  Running without the debugger does not change the behavior.)</p>
  
  <p>I have tried this on a device with the Facebook native app installed and me logged in, and I have tried this on a device without the native app where I had never accessed Facebook at all.  I have also tried this on simulators.  I get the same result.</p>
  
  <p>I am assuming that this is a synchronous call, but just in case, I tried waiting indefinitely in the calling thread -- the handler is still never called, and nothing visible is happening on the device.</p>
  
  <p>I turned on all the logging that I could find:</p>
  
  <pre><code>FBSDKSettings.setLoggingBehavior(
     [FBSDKLoggingBehaviorAppEvents,
      FBSDKLoggingBehaviorInformational,
      FBSDKLoggingBehaviorAccessTokens,
      FBSDKLoggingBehaviorUIControlErrors,
      FBSDKLoggingBehaviorGraphAPIDebugWarning,
      FBSDKLoggingBehaviorGraphAPIDebugInfo,
      FBSDKLoggingBehaviorNetworkRequests,
      FBSDKLoggingBehaviorCacheErrors,
      FBSDKLoggingBehaviorDeveloperErrors])
  </code></pre>
  
  <p>Then, on startup, I am getting either this:</p>
  
  <pre><code>2015-05-25 11:35:01.320 MyApp[1213:646722] FBSDKLog: Request &lt;#1111&gt;:
    URL:  https://graph.facebook.com/v2.3
    Method:   POST
    UserAgent:    FBiOSSDK.4.1.0
    MIME: multipart/form-data; boundary=3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f
    Body (w/o attachments):   
      batch_app_id:   140xxxxxxxxxxxxx
      batch:  [{"relative_url":"140xxxxxxxxxxxxx?debug=info&amp;fields=app_events_feature_bitmask%2Cname%2Cios_dialog_configs%2Csupports_implicit_sdk_logging%2Cgdpv4_nux_enabled%2Cgdpv4_nux_content%2Cios_supports_system_auth%2Cios_sdk_error_categories&amp;format=json&amp;include_headers=false&amp;sdk=ios","method":"GET"},{"relative_url":"140xxxxxxxxxxxxx?debug=info&amp;fields=app_events_feature_bitmask%2Cname%2Cios_dialog_configs%2Csupports_implicit_sdk_logging%2Cgdpv4_nux_enabled%2Cgdpv4_nux_content%2Cios_supports_system_auth%2Cios_sdk_error_categories&amp;format=json&amp;include_headers=false&amp;sdk=ios","method":"GET"}]
  
  2015-05-25 11:35:01.321 MyApp[1213:646722] FBSDKLog: Request &lt;#1111&gt;:
    URL:  https://graph.facebook.com/v2.3
    Method:   POST
    UserAgent:    FBiOSSDK.4.1.0
    MIME: multipart/form-data; boundary=3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f
  
  2015-05-25 11:35:01.329 MyApp[1213:646722] FBSDKLog: FBSDKTimeSpentData Restore: {"numInterruptions":0,"lastSuspendTime":1432544336,"secondsSpentInCurrentSession":3}
  2015-05-25 11:35:01.363 MyApp[1213:646722] FBSDKLog: FBSDKAppEvents: Recording event @ 1432578901: {
      "_eventName" = "fb_mobile_activate_app";
      "_logTime" = 1432578901;
      "_ui" = UIAlertController;
      "fb_mobile_launch_source" = Unclassified;
  }
  2015-05-25 11:35:01.364 MyApp[1213:646722] FBSDKLog: FBSDKAppEvents Persist: Read 0 event states. First state has 0 events
  2015-05-25 11:35:01.364 MyApp[1213:646722] FBSDKLog: FBSDKAppEvents Persist: Clearing
  2015-05-25 11:35:01.365 MyApp[1213:646722] FBSDKLog: FBSDKAppEvents: Recording event @ 1432578901: {
      "_eventName" = "fb_mobile_deactivate_app";
      "_logTime" = 1432578901;
      "_ui" = UIAlertController;
      "_valueToSum" = 3;
      "fb_mobile_app_interruptions" = 0;
      "fb_mobile_launch_source" = Unclassified;
      "fb_mobile_time_between_sessions" = "session_quanta_5";
  }
  2015-05-25 11:35:01.781 MyApp[1213:646722] FBSDKLog: FBSDKURLConnection &lt;#1114&gt;:
    Duration: 460 msec
  Response Size: 1 kB
    MIME type: application/json
  2015-05-25 11:35:01.783 MyApp[1213:646722] FBSDKLog: Response &lt;#1111&gt;
  Duration: 461 msec
  Size: 2011 kB
  Response Body:
  (
          {
          body =         {
              "app_events_feature_bitmask" = 1;
              "gdpv4_nux_content" = "New! You're in control - choose what info you want to share with apps.";
              "gdpv4_nux_enabled" = 0;
              id = 140xxxxxxxxxxxxx;
              "ios_dialog_configs" =             {
                  data =                 (
                                          {
                          name = like;
                          url = "/connect/dialog/MPlatformLikeJSDialog";
                          versions =                         (
                              20140410
                          );
                      },
                                          {
                          name = appinvites;
                          url = "/connect/dialog/MPlatformAppInvitesJSDialog";
                          versions =                         (
                              20140410
                          );
                      }
                  );
              };
              "ios_sdk_error_categories" =             (
                                  {
                      items =                     (
                                                  {
                              code = 102;
                          },
                                                  {
                              code = 190;
                          }
                      );
                      name = login;
                      "recovery_message" = "Please log into this app again to reconnect your Facebook account.";
                      "recovery_options" =                     (
                          OK,
                          Cancel
                      );
                  },
                                  {
                      items =                     (
                                                  {
                              code = 341;
                          },
                                                  {
                              code = 9;
                          },
                                                  {
                              code = 2;
                          },
                                                  {
                              code = 4;
                          },
                                                  {
                              code = 17;
                          }
                      );
                      name = transient;
                      "recovery_message" = "The server is temporarily busy, please try again.";
                      "recovery_options" =                     (
                          OK
                      );
                  }
              );
              "ios_supports_system_auth" = 1;
              name = MyApp;
              "supports_implicit_sdk_logging" = 1;
          };
          code = 200;
      },
          {
          body =         {
              "app_events_feature_bitmask" = 1;
              "gdpv4_nux_content" = "New! You're in control - choose what info you want to share with apps.";
              "gdpv4_nux_enabled" = 0;
              id = 140xxxxxxxxxxxxx;
              "ios_dialog_configs" =             {
                  data =                 (
                                          {
                          name = like;
                          url = "/connect/dialog/MPlatformLikeJSDialog";
                          versions =                         (
                              20140410
                          );
                      },
                                          {
                          name = appinvites;
                          url = "/connect/dialog/MPlatformAppInvitesJSDialog";
                          versions =                         (
                              20140410
                          );
                      }
                  );
              };
              "ios_sdk_error_categories" =             (
                                  {
                      items =                     (
                                                  {
                              code = 102;
                          },
                                                  {
                              code = 190;
                          }
                      );
                      name = login;
                      "recovery_message" = "Please log into this app again to reconnect your Facebook account.";
                      "recovery_options" =                     (
                          OK,
                          Cancel
                      );
                  },
                                  {
                      items =                     (
                                                  {
                              code = 341;
                          },
                                                  {
                              code = 9;
                          },
                                                  {
                              code = 2;
                          },
                                                  {
                              code = 4;
                          },
                                                  {
                              code = 17;
                          }
                      );
                      name = transient;
                      "recovery_message" = "The server is temporarily busy, please try again.";
                      "recovery_options" =                     (
                          OK
                      );
                  }
              );
              "ios_supports_system_auth" = 1;
              name = MyApp;
              "supports_implicit_sdk_logging" = 1;
          };
          code = 200;
      }
  )
  
  2015-05-25 11:35:01.841 MyApp[1213:646722] FBSDKLog: Dynamically loaded library at /System/Library/Frameworks/Accounts.framework/Accounts
  </code></pre>
  
  <p>or this:</p>
  
  <pre><code>2015-05-25 12:04:59.336 MyApp[1221:650047] FBSDKLog: FBSDKTimeSpentData Restore: {"numInterruptions":0,"lastSuspendTime":1432544336,"secondsSpentInCurrentSession":3}
  2015-05-25 12:04:59.343 MyApp[1221:650047] FBSDKLog: FBSDKAppEvents: Recording event @ 1432580699: {
      "_eventName" = "fb_mobile_activate_app";
      "_logTime" = 1432580699;
      "_ui" = UIAlertController;
      "fb_mobile_launch_source" = Unclassified;
  }
  2015-05-25 12:04:59.344 MyApp[1221:650047] FBSDKLog: FBSDKAppEvents Persist: Read 0 event states. First state has 0 events
  2015-05-25 12:04:59.344 MyApp[1221:650047] FBSDKLog: FBSDKAppEvents Persist: Clearing
  2015-05-25 12:04:59.345 MyApp[1221:650047] FBSDKLog: FBSDKAppEvents: Recording event @ 1432580699: {
      "_eventName" = "fb_mobile_deactivate_app";
      "_logTime" = 1432580699;
      "_ui" = UIAlertController;
      "_valueToSum" = 3;
      "fb_mobile_app_interruptions" = 0;
      "fb_mobile_launch_source" = Unclassified;
      "fb_mobile_time_between_sessions" = "session_quanta_5";
  }
  </code></pre>
  
  <p>Either way, my handler is never called, yet the logInWithReadPermissions function returns alright.</p>
  
  <p>I have implemented all of the following in my AppDelegate:</p>
  
  <pre><code>func application(application: UIApplication,
                   didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -&gt; Bool {
  
     FBSDKApplicationDelegate.sharedInstance().application(
         application,
         didFinishLaunchingWithOptions: launchOptions)
  }
  
  func applicationDidBecomeActive(application: UIApplication) {
      FBSDKAppEvents.activateApp()
  }
  
  func application(application: UIApplication,
                   openURL url: NSURL,
                   sourceApplication: String?,
                   annotation: AnyObject?) -&gt; Bool {
  
      return FBSDKApplicationDelegate.sharedInstance().application(
          application,
          openURL: url,
          sourceApplication: sourceApplication,
          annotation: annotation)
  }
  </code></pre>
  
  <p>I have these lines in my Info.plist:</p>
  
  <pre><code>&lt;array&gt;
      &lt;dict&gt;
          &lt;key&gt;CFBundleURLSchemes&lt;/key&gt;
          &lt;array&gt;
              &lt;string&gt;fb140xxxxxxxxxxxxx&lt;/string&gt;
          &lt;/array&gt;
      &lt;/dict&gt;
  &lt;/array&gt;
  &lt;key&gt;FacebookAppID&lt;/key&gt;
  &lt;string&gt;140xxxxxxxxxxxxx&lt;/string&gt;
  &lt;key&gt;FacebookDisplayName&lt;/key&gt;
  &lt;string&gt;MyApp&lt;/string&gt;
  </code></pre>
  
  <p>Anything I am missing in the above?  If not, how do I go about debugging this further?  Any logging that I can turn on or off?  Anything in my app settings on either XCode or Facebook side anyone can think of that I could look at?</p>