前回はアプリ外のファイルを読み込む場合の話だったが、今回は、アプリ外にファイルを保存する場合の話
Androidだと普通にできる(簡単とは言っていない)ため、iOSでも割と需要はあると思うのだが、それっぽいキーワードで検索しても出てこなかったためメモ
アプリ外へのファイル保存はいわゆる「共有」で使われるUIActivityViewControllerを使用する(Androidで言うと暗黙的Intent的なやつ)
以下は例としてDocumentディレクトリに保存したファイルをアプリ外に保存する処理のソースコード
func fileSave(fileName: String) { let dir = FileManager.default.urls( for: .documentDirectory, in: .userDomainMask ).first! let filePath = dir.appendingPathComponent(fileName, isDirectory: false); let controller = UIActivityViewController.init(activityItems: [filePath], applicationActivities: nil) controller.excludedActivityTypes = [ .addToReadingList, .airDrop, .assignToContact, .copyToPasteboard, .mail, .markupAsPDF, .message, .openInIBooks, .postToFacebook, .postToFlickr, .postToTencentWeibo, .postToTwitter, .postToVimeo, .postToWeibo, .print, .saveToCameraRoll ] self.present(controller, animated: true, completion: nil) }
excludedActivityTypesは除外したい共有先で、今回はファイル保存以外を出来るだけ消したいのでとりあえず定義してあるものを全部を指定しているが、SNSへの共有などを許可したいのであれば要変更
これに正しいファイル名を渡して呼ぶと以下の画像のように表示される
この中からファイルに保存を選択するとiCloud Driveなどの保存先を選んでファイルを保存することができる
ただし、基本的には共有用のものであり、ユーザー側で他のものを選択されてしまうと保存ができないので、アプリ側である程度ナビゲートするようにした方が良いかもしれない