Swift2.2でInstagram,Twitter,Facebookにシェアする方法

Swift2.2でInstagram,Twitter,Facebookにシェアする方法

UIActivityViewControllerのデフォルトではTwitterFacebookへのシェアはうまくいくのに、Instagramのシェアがうまくいきませんでした。
調べてみるとInstagramは独自にアクティビティに追加してやらなければいけないようで、検索して出てきたコードを実際に試してみたのですが、InstagramへシェアすることはできてもTwitterFacebookがアクティビティに表示されなくなってしまいました。
その解決策として、以下のコードにすることでTwitter,Facebook,Instagramへシェアする事ができました。

//シェアしたいImageView
var imageViewForShare: UIImageView!

//TwitterとFacebookはUIActivity
let controller = UIActivityViewController(activityItems: [imageViewForShare.image!], applicationActivities: nil)
//アクティビティに表示したくない機能やアプリを指定
let excludedActivityTypes = [
    UIActivityTypePostToWeibo,
    UIActivityTypeMessage,
    UIActivityTypeMail,
    UIActivityTypePrint,
    UIActivityTypeCopyToPasteboard,
    UIActivityTypeAssignToContact,
    UIActivityTypeSaveToCameraRoll,
    UIActivityTypeAddToReadingList,
    UIActivityTypePostToFlickr,
    UIActivityTypePostToVimeo,
    UIActivityTypePostToTencentWeibo,
    UIActivityTypeAirDrop]
controller.excludedActivityTypes = excludedActivityTypes
self.presentViewController(controller, animated: true, completion: nil)

let imageData = UIImageJPEGRepresentation(imageViewForShare.image!, 0.9)
let fileURL = NSURL(fileURLWithPath: NSHomeDirectory()).URLByAppendingPathComponent("Documents/image.igo")
imageData?.writeToURL(fileURL, atomically: true)

documentInteractionController = UIDocumentInteractionController.init(URL: fileURL)

// TwitterとFacebookと一緒にアクティビティに表示させたいのでUTIに"com.instagram.shareextension"を指定する
documentInteractionController.UTI = "com.instagram.shareextension"

if UIApplication.sharedApplication().canOpenURL(NSURL.init(string: "instagram://app")!) {
    documentInteractionController.presentOpenInMenuFromRect(self.view.frame, inView: self.view, animated: true)
} else {
    print("Could not find Instagram app.")
}

ポイント

UTIの指定

exclusivegramにすると共有先をInstagramのみに限定して表示することができる

"com.instagram.exclusivegram"

shareextensionにするとアクティビティにInstagramを追加表示することができる

"com.instagram.shareextension"

結果

f:id:marikooota:20170410192930j:plain