I am sharing with UIActivityViewController but it is shared with different file name (random name). And when I share with the Photos app, then its share image with its real name. My question is: How to share images with its name using UIActivityViewController?
Answer: Hello All,
Yes, I got the answer. First you save image in docuementDirectory then share image link. Please ensure that share image link(saved image in docuement directory) instead of image.
@IBAction func shareImage(_ sender: UIButton) {
var selectedImageArrayToShare:Array<NSURL> = [NSURL]()
selectedImageArrayToShare.append(saveActivityControllerImage())
let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: selectedImageArrayToShare as [Any], applicationActivities: nil)
self.present(activityViewController, animated: true, completion: nil)
}
func saveActivityControllerImage() -> NSURL {
var name:String=selectedPhotoName!.capitalized
print(name.components(separatedBy: ".").last as Any)
if name.components(separatedBy: ".").last!.lowercased() != "png" {
name = name.replacingOccurrences(of: ".\(name.components(separatedBy: ".").last!)", with: ".jpg")
}
else {
name = name.replacingOccurrences(of: ".\(name.components(separatedBy: ".").last!)", with: ".png")
}
let urlString : NSURL = getDocumentDirectoryPath(fileName: name)
print("Image path : \(urlString)")
if !FileManager.default.fileExists(atPath: urlString.absoluteString!) {
do {
var isSaved : Bool = false
print(urlString.pathExtension as Any)
if urlString.pathExtension?.lowercased() == "png" {
isSaved = ((try UIImagePNGRepresentation(photoPreviewImageView.image!)?.write(to: urlString as URL, options: Data.WritingOptions.atomic)) != nil)
}
else {
isSaved = ((try UIImageJPEGRepresentation(photoPreviewImageView.image!, 1.0)?.write(to: urlString as URL, options: Data.WritingOptions.atomic)) != nil)
}
if (isSaved) {
return urlString
} else {
return NSURL.fileURL(withPath: "Blank") as NSURL
}
} catch {
return NSURL.fileURL(withPath: "Blank") as NSURL
}
}
return urlString
}
func getDocumentDirectoryPath(fileName:String) -> NSURL {
let paths:NSArray = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray
let docuementDir:NSString = paths.object(at: 0) as! NSString
return NSURL.fileURL(withPath: docuementDir.appendingPathComponent("NameIt/\(fileName)")) as NSURL
}