title: Facebook Login not going back to App when migrated to Swift 3
body: <p>I have created a sample app where User logs in using Facebook Login button.</p>
  
  <p>Once logged in I display User's Name and Email on Login screen.
  It was working with Swift 2.3.
  Once I migrated to Swift 3, it stopped working.</p>
  
  <ul>
  <li>Step1: Login with Facebook Login Button </li>
  <li>Step2: Allow permissions for    email and profile  </li>
  <li>Step3: Here it should go back to screen 1. But it doesn't.
  Attaching the Log I get when I click "Ok" button.</li>
  </ul>
  
  <blockquote>
    <p>Update 1: App runs fine on iOS 9.3. The issue occurs only on iOS 10 devices. </p>
  </blockquote>
  
  <pre><code>2016-06-19 08:30:09.300070 MyApp[13942:1214112] [] nw_endpoint_handler_start [4 graph.facebook.com:443 initial path (null)]
  2016-06-19 08:30:09.300484 MyApp[13942:1214112] [] nw_connection_endpoint_report [4 graph.facebook.com:443 initial path (null)] reported event path:start
  2016-06-19 08:30:09.301255 MyApp[13942:1214112] [] nw_connection_endpoint_report [4 graph.facebook.com:443 waiting path (satisfied)] reported event path:satisfied
  2016-06-19 08:30:09.302664 MyApp[13942:1214112] [] nw_connection_endpoint_report [4 graph.facebook.com:443 in_progress resolver (satisfied)] reported event resolver:start_dns
  2016-06-19 08:30:09.348956 MyApp[13942:1214130] [] nw_endpoint_resolver_update [4 graph.facebook.com:443 in_progress resolver (satisfied)] Adding endpoint handler for 31.13.79.246:443
  2016-06-19 08:30:09.349570 MyApp[13942:1214130] [] nw_connection_endpoint_report [4 graph.facebook.com:443 in_progress resolver (satisfied)] reported event resolver:receive_dns
  2016-06-19 08:30:09.350027 MyApp[13942:1214130] [] nw_endpoint_resolver_start_next_child [4 graph.facebook.com:443 in_progress resolver (satisfied)] starting child endpoint 31.13.79.246:443
  2016-06-19 08:30:09.350564 MyApp[13942:1214130] [] nw_host_stats_add_src recv too small, received 24, expected 28
  2016-06-19 08:30:09.351022 MyApp[13942:1214130] [] nw_endpoint_resolver_start_next_child [4 graph.facebook.com:443 in_progress resolver (satisfied)] starting next child endpoint in 250ms
  2016-06-19 08:30:09.351479 MyApp[13942:1214130] [] nw_endpoint_handler_start [4.1 31.13.79.246:443 initial path (null)]
  2016-06-19 08:30:09.351862 MyApp[13942:1214130] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 initial path (null)] reported event path:start
  2016-06-19 08:30:09.352596 MyApp[13942:1214130] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 waiting path (satisfied)] reported event path:satisfied
  2016-06-19 08:30:09.352915 MyApp[13942:1214130] [] __nwlog_err_simulate_crash_libsystem libsystem simulate crash unavailable, [libsystem_network.dylib: nw_endpoint_get_hostname :: incorrect endpoint type 1]
  2016-06-19 08:30:09.353524 MyApp[13942:1214130] [] nw_endpoint_get_hostname incorrect endpoint type 1, dumping backtrace:
          [x86_64] libnetcore-805.0.0.2.2
      0   libsystem_network.dylib             0x000000011186037f __nw_create_backtrace_string + 123
      1   libsystem_network.dylib             0x000000011186246e nw_endpoint_get_hostname + 75
      2   libnetwork.dylib                    0x0000000112bc4be7 nw_endpoint_proxy_handler_should_use_proxy + 125
      3   libnetwork.dylib                    0x0000000112bd204f nw_endpoint_handler_path_change + 1509
      4   libnetwork.dylib                    0x0000000112bd18a2 nw_endpoint_handler_start + 570
      5   libnetwork.dylib                    0x0000000112be8026 nw_endpoint_resolver_start_next_child + 2050
      6   libdispatch.dylib                   0x00000001115b91e8 _dispatch_call_block_and_release + 12
      7   libdispatch.dylib                   0x00000001115e5dee _dispatch_client_callout + 8
      8   libdispatch.dylib                   0x00000001115c0a1d _dispatch_queue_serial_drain + 239
      9   libdi
  2016-06-19 08:30:09.357989 MyApp[13942:1214130] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] reported event flow:start_connect
  2016-06-19 08:30:09.468327 MyApp[13942:1214130] [] nw_endpoint_flow_protocol_connected [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] Output protocol connected
  2016-06-19 08:30:09.469541 MyApp[13942:1214130] [] nw_endpoint_flow_connected_path_change [4.1 31.13.79.246:443 ready socket-flow (satisfied)] Connected path is satisfied
  2016-06-19 08:30:09.470103 MyApp[13942:1214130] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 ready socket-flow (satisfied)] reported event flow:finish_connect
  2016-06-19 08:30:09.470858 MyApp[13942:1214130] [] nw_connection_endpoint_report [4 graph.facebook.com:443 ready resolver (satisfied)] reported event flow:finish_connect
  2016-06-19 08:30:09.471427 MyApp[13942:1214130] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 ready socket-flow (satisfied)] reported event flow:changed_viability
  2016-06-19 08:30:09.471870 MyApp[13942:1214130] [] nw_connection_endpoint_report [4 graph.facebook.com:443 ready resolver (satisfied)] reported event flow:changed_viability
  2016-06-19 08:30:09.472479 MyApp[13942:1214112] [] nw_endpoint_start_tls_while_connected [4.1 31.13.79.246:443 ready socket-flow (satisfied)]
  2016-06-19 08:30:09.473243 MyApp[13942:1214112] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] reported event flow:start_secondary_connect
  2016-06-19 08:30:09.473685 MyApp[13942:1214112] [] nw_connection_endpoint_report [4 graph.facebook.com:443 in_progress resolver (satisfied)] reported event flow:start_secondary_connect
  2016-06-19 08:30:09.474206 MyApp[13942:1214112] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] reported event flow:start_connect
  2016-06-19 08:30:09.474740 MyApp[13942:1214112] [] nw_connection_endpoint_report [4 graph.facebook.com:443 in_progress resolver (satisfied)] reported event flow:start_connect
  2016-06-19 08:30:09.475123 MyApp[13942:1214112] [] nw_endpoint_flow_protocol_connected [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] Transport protocol connected
  2016-06-19 08:30:09.475502 MyApp[13942:1214112] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] reported event flow:finish_transport
  2016-06-19 08:30:09.475834 MyApp[13942:1214112] [] nw_connection_endpoint_report [4 graph.facebook.com:443 in_progress resolver (satisfied)] reported event flow:finish_transport
  2016-06-19 08:30:09.586843 MyApp[13942:1214130] [] nw_endpoint_flow_protocol_connected [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] Output protocol connected
  2016-06-19 08:30:09.588117 MyApp[13942:1214130] [] nw_endpoint_flow_connected_path_change [4.1 31.13.79.246:443 ready socket-flow (satisfied)] Connected path is satisfied
  2016-06-19 08:30:09.588724 MyApp[13942:1214130] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 ready socket-flow (satisfied)] reported event flow:finish_connect
  2016-06-19 08:30:09.589299 MyApp[13942:1214130] [] nw_connection_endpoint_report [4 graph.facebook.com:443 ready resolver (satisfied)] reported event flow:finish_connect
  </code></pre>
  
  <p>Here is my Code.</p>
  
  <p>ViewController</p>
  
  <pre><code>import UIKit
  import FBSDKCoreKit
  import FBSDKLoginKit
  import Firebase
  
  class ViewController: UIViewController, FBSDKLoginButtonDelegate{
  
      // Properties
      @IBOutlet weak var usernameTextField: UITextField!
      @IBOutlet weak var usernameLabel: UILabel!
      @IBOutlet weak var submitButton: UIButton!
      @IBOutlet weak var fbLoginBtn: FBSDKLoginButton!
      var ref:FIRDatabaseReference!
  
      private let dataurl = "https://project-URL/"
  
      override func viewDidLoad() {
          super.viewDidLoad()
          self.ref = FIRDatabase.database().reference()
          fbLoginBtn.delegate = self
          fbLoginBtn.readPermissions = ["email"]
          // Do any additional setup after loading the view, typically from a nib.
      }
  
      //Actions
      @IBAction func onSubmitBtnPressed(_ sender: UIButton) {
          usernameLabel.text = usernameTextField.text;
      }
  
      func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: NSError!) {
          print("User Logged In")
  
          if ((error) != nil)
          {
              // Process error
              print("error")
          }
          else if result.isCancelled {
              // Handle cancellations
              print("cancelled")
          }
          else {
              // If you ask for multiple permissions at once, you
              // should check if specific permissions missing
              if result.grantedPermissions.contains("email")
              {
                  let credential = FIRFacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
                  // Do work
                  print("logged in ")
                  FIRAuth.auth()?.signIn(with: credential, completion: { (user, error) in
                      if (user != nil) {
  
                          let uid = user?.uid as String!
  
                          self.fetchProfile(uid!);
                      }
                  })
              }
          }
      }
  
      func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
          print("User Logged Out")
      }
  
      func fetchProfile(_ uid: String) {
          let parameters = ["fields": "email, first_name, last_name, picture.type(large)"]
           var userinfo: [String:String] = [:]
          FBSDKGraphRequest(graphPath: "me", parameters: parameters).start(completionHandler: { (connection, user, requestError) -&gt; Void in
  
              if requestError != nil {
                  print(requestError)
  
              }
  
              userinfo["email"] = user?["email"] as? String
              userinfo["firstname"] = user?["first_name"] as? String
              userinfo["lastname"] = user?["last_name"] as? String
              self.ref.child("users").child(uid).setValue(userinfo)
          })
      }
  }
  </code></pre>
  
  <p>AppDelegate</p>
  
  <pre><code>import UIKit
  import Firebase
  import FirebaseDatabase
  import FBSDKCoreKit
  import FBSDKLoginKit
  
  @UIApplicationMain
  class AppDelegate: UIResponder, UIApplicationDelegate {
  
      var window: UIWindow?
  
  
      func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -&gt; Bool {
          // Override point for customization after application launch.
  
          // Use Firebase library to configure APIs
          FIRApp.configure()
          FIRDatabase.database().persistenceEnabled = true
          return FBSDKApplicationDelegate.sharedInstance()
              .application(application, didFinishLaunchingWithOptions: launchOptions)
      }
  
      func application(_ application: UIApplication, open url:URL,sourceApplication: String?, annotation: AnyObject) -&gt; Bool {
          return FBSDKApplicationDelegate.sharedInstance()
              .application(application, open: url,
                           sourceApplication: sourceApplication, annotation: annotation)
      }
  
      func applicationDidBecomeActive(_ application: UIApplication) {
          // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
          FBSDKAppEvents.activateApp()
      }
  }
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/WXSOi.png" rel="nofollow noreferrer">Login Screen</a></p>
  
  <p><a href="https://i.stack.imgur.com/OJRJP.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/OJRJP.png" alt="Permission Screen"></a></p>
  
  <p><a href="https://i.stack.imgur.com/V04J1.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/V04J1.png" alt="Here didCompleteWith should be called but nothing happens."></a></p>