I was having the same issue, and the workaround I’m using is to set the Share Dialog mode to use the native app.
I’m using Obj-C, but should be pretty much the same in Swift:
FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];
dialog.fromViewController = viewController;
dialog.shareContent = content;
dialog.mode = FBSDKShareDialogModeNative; // if you don't set this before canShow call, canShow would always return YES
if (![dialog canShow]) {
// fallback presentation when there is no FB app
dialog.mode = FBSDKShareDialogModeFeedBrowser;
}
[dialog show];
In iOS 9 the user gets the app-switching dialog, but it works fine. There’s also FBSDKShareDialogModeWeb, which doesn’t have the app-switching dialog, but it doesn’t show the image, either.
The default is FBSDKShareDialogModeAutomatic, which chooses FBSDKShareDialogModeShareSheet, which is what you’re seeing.
UPDATE: This is the behavior in iOS9 for the available dialog modes:
FBSDKShareDialogModeAutomatic: uses ShareSheet, which is the OP caseFBSDKShareDialogModeShareSheet: dittoFBSDKShareDialogModeNative: works if the user has the FB app installed, fails silently otherwise. Presents app-switch dialog.FBSDKShareDialogModeBrowser: shares without imageFBSDKShareDialogModeWeb: shares without imageFBSDKShareDialogModeFeedBrowser: works as intendedFBSDKShareDialogModeFeedWeb: works as intended
“Browser” open Safari full-screen, “Web” opens a webview dialog.
I’d go with either of the last two options for iOS9 and Automatic for iOS8.