How to write a file to a folder located at Apple's Files App in Swift
You can use UIDocumentInteractionController
and let the user select where he wants to save your file when you share your url. The user just needs to select save to files and choose which directory to save the file you are exporting.
You can use UIDocumentInteractionController
to share any file type located inside your App bundle, at your Documents directory or another folder accessible from your App.
class ViewController: UIViewController { let documentInteractionController = UIDocumentInteractionController() func share(url: URL) { documentInteractionController.url = url documentInteractionController.uti = url.typeIdentifier ?? "public.data, public.content" documentInteractionController.name = url.localizedName ?? url.lastPathComponent documentInteractionController.presentOptionsMenu(from: view.frame, in: view, animated: true) } @IBAction func shareAction(_ sender: UIButton) { guard let url = URL(string: "https://www.ibm.com/support/knowledgecenter/SVU13_7.2.1/com.ibm.ismsaas.doc/reference/AssetsImportCompleteSample.csv?view=kc") else { return } URLSession.shared.dataTask(with: url) { data, response, error in guard let data = data, error == nil else { return } let tmpURL = FileManager.default.temporaryDirectory .appendingPathComponent(response?.suggestedFilename ?? "fileName.csv") do { try data.write(to: tmpURL) DispatchQueue.main.async { self.share(url: tmpURL) } } catch { print(error) } }.resume() }}
extension URL { var typeIdentifier: String? { return (try? resourceValues(forKeys: [.typeIdentifierKey]))?.typeIdentifier } var localizedName: String? { return (try? resourceValues(forKeys: [.localizedNameKey]))?.localizedName }}