IOS on Instagram: file cannot be saved because the specified URL type is not supported

I have the following code for sharing an image on instagram in fast 3 iOS 10.1:

func shareOnInstagram(_ photo: UIImage, text: String?) { let instagramUrl = URL(string: "instagram://app")! if UIApplication.shared.canOpenURL(instagramUrl) { let imageData = UIImageJPEGRepresentation(photo, 1.0)! let captionString = text ?? "" let writePath = URL(string: NSTemporaryDirectory())!.appendingPathComponent("instagram.igo") do { try imageData.write(to: writePath) let documentsInteractionsController = UIDocumentInteractionController(url: writePath) documentsInteractionsController.delegate = self documentsInteractionsController.uti = "com.instagram.exlusivegram" documentsInteractionsController.annotation = ["InstagramCaption": captionString] documentsInteractionsController.presentOpenInMenu(from: CGRect.zero, in: self.view, animated: true) }catch { return } }else { let alertController = UIAlertController(title: "Install Instagram", message: "You need Instagram app installed to use this feature. Do you want to install it now?", preferredStyle: .alert) let installAction = UIAlertAction(title: "Install", style: .default, handler: { (action) in //redirect to instagram }) alertController.addAction(installAction) let laterAction = UIAlertAction(title: "Later", style: .cancel, handler: nil) alertController.addAction(laterAction) present(alertController, animated: true, completion: nil) } } 

An on the try imageData.write(to: writePath) line try imageData.write(to: writePath) , it throws an error like this:

 Error Domain=NSCocoaErrorDomain Code=518 "The file couldn't be saved because the specified URL type isn't supported." UserInfo={NSURL=/private/var/mobile/Containers/Data/Application/5B80A983-5571-44A5-80D7-6A7B065800B5/tmp/instagram.igo} 

Can someone help me?

+5
source share
1 answer

You are not creating your URL correctly. The change:

 let writePath = URL(string: NSTemporaryDirectory())!.appendingPathComponent("instagram.igo") 

in

 let writePath = URL(fileURLWithPath: NSTemporaryDirectory())!.appendingPathComponent("instagram.igo") 

Whenever you create a URL from a file path, you must use the fileURLWithPath initializer. Using the string initializer only works when creating a URL that starts with a scheme, such as the URL http , mailto , tel , etc.

+19
source

Source: https://habr.com/ru/post/1262762/


All Articles