ios iphone hooks open instagram directly without showing UIDocumentInteractionController
I use a very simple share-open Instagram flow.
- I save image locally to photos
- Then I open Instagram with following URL: instagram://library?AssetPath=assets-library
This opens Instagram directly into photos library. Because photo was saved few moments ago, the new photo is visible as the first photo in library.
I've searched for this myself, I don't think it's possible to use the UIDocumentInteractionController without showing an action sheet, nor does it seem possible to share an image with instagram without using a UIDocumentInteractionController.
Which leads to the unavoidable action sheet.
I understand why they designed it like that (you won't leave an app unknowingly as a user) but it leads to annoying UI design in many cases.
It looks like this method is NOT mentioned in the Instagram documentation. However, I just confirmed that @sabiland's answer still works in Swift 4.2 iOS 12. Here is some sample code:
func postImageToInstagram(image: UIImage) {
UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.image(image:didFinishSavingWithError:contextInfo:)), nil)
}
@objc func image(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) {
if let err = error {
print(err)
}
let urlString = "instagram://library?AssetPath=assets-library"
let url = URL(string: urlString)!
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
let alertController = UIAlertController(title: "Error", message: "Instagram is not installed", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alertController, animated: true, completion: nil)
}
}
Original code source
You also have to make sure you info.plist
has the instagram query scheme.
In order for your app to use Instagram's custom URL scheme, you mush whitelist the scheme by adding instagram:// to the LSApplicationQueriesSchemes key in your app's Info.plist.
Source