Using LoginManager from the Facebook iOS SDK to login like so:
let loginManager = LoginManager()
loginManager.logIn([.publicProfile, .email], viewController: self) { (loginResult) in
The Login Dialog opens facebook.com through Safari, which has a button for me to
Log In with the Facebook App
When I click "Continue" in the Facebook app I am returned back to my app, however the Login Dialog is not dismissed even though loginResult returns .success.
This is what is displayed after returning to my app after being successfully logged in:

The only option is for me to click 'Cancel'. It seems like the Login Dialog is SFAuthenticationViewController, which currently contains 0 results on a Google search.
It seems problems other people have had in the past was that in their AppDelegate they were not calling the appropriate authorization flow processing in application:openURL:options: but that is successfully being called like so:
@available(iOS 9.0, *)
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
print("application open url\n\(url)\noptions \(options)")
if url.absoluteString.hasPrefix("fb") {
print("Finishing Facebook log in flow")
return SDKApplicationDelegate.shared.application(application, open: url, options: options)
} else {
print("Finishing Google sign in flow")
return GIDSignIn.sharedInstance().handle(url, sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: [:])
}
}
The only thing I can think of is some incompatibility issues since I am using Swift 4 on iOS 11 Developer beta, and the fact that there are no results online for SFAuthenticationViewController which is seemingly being used.
I am unsure why the dialog isn't automatically being dismissed.
Update:
I created a brand new, blank app with only a single button and the FacebookCore and FacebookLogin dependencies and the issue still persists.
Steps followed: