Table of Contents
iOSでは、あるアプリから写真や動画などのファイルを他のアプリに移動したり、逆にストレージアプリからファイルを受信したりといったことが可能です。
今回はファイルの送受信の機能をアプリに実装する方法について紹介します。
ファイルを他のアプリに送信する
ファイルを送信するには、クラス UIDocumentInteractionController を使用します。
UIDocumentInteractionController – UIKit | Apple Developer Documentation
このクラスは、Safariやストレージ系アプリにある「共有ボタン」を押した時の処理を行ってくれます。
サンプルコード
Documentディレクトリにある画像ファイル(test.jpg)を他のアプリに送るサンプルコードです。
// Documentディレクトリ let documentDir = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, .userDomainMask, true).last! // 送信するファイル名 let filename = "test.jpg" // 送信ファイルのパス let targetDirPath = "\(documentDir)/\(filename)" let documentInteraction = UIDocumentInteractionController(url: URL(fileURLWithPath: targetDirPath)) if !documentInteraction.presentOpenInMenu(from: self.view.frame, in: self.view, animated: true) { // 送信できるアプリが見つからなかった時の処理 let alert = UIAlertController(title: "送信失敗", message: "ファイルを送れるアプリが見つかりません", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) self.present(alert, animated: true, completion: nil) }
実行例
実行すると、以下のようなファイルの送信先を選ぶ画面が表示されます。指定した形式のファイルを受け取れるアプリがない場合はアラートを出して警告します。
ファイルを他のアプリから受信する
ファイルを受け取る場合、プロジェクトでファイルを受け取るための設定が必要になります。それは、受信するファイルの形式を UTIs (Uniform Type Identifiers) の形式で登録することです。
TARGET > Info > Document Types を開き、受信したいファイルの形式を登録します。
例えば、JPEG形式の画像を受け取るには、Types に public.jpeg を登録します。
Name は自分がわかればどんな名前でもOKです。また、アイコン画像は指定しなければアプリアイコンになるため、特にこだわりがなければ指定しなくても問題ありません。
受け取りたいファイル形式によって、Types に書き込む値が違います。詳しくは以下のページを御覧ください。このページの表の Identifier (Constant) の文字列を Types に入力すると、それに対応するファイルの受信が可能になります。
System-Declared Uniform Type Identifiers
また、この Document Types はプロジェクトの Info.plist からも直接編集することができます。
他のプロジェクトでも同じファイル対応設定を使いたいという場合は、Info.plistの値をコピーすると簡単です。
保存場所や方法に指定がない場合は、特にコードを書かなくても、以上の設定でファイルの受け取りができます。この場合、受け取ったファイルの保存場所は以下のディレクトリになります。
~/Document/Inbox/
Inbox というディレクトリが Document の中に自動的に作られます。
実行例
Dropbox から画像ファイル(profile.png)を受け取る例です。受け取りたいファイルを Dropbox で「エクスポート」すると、以下の画面が表示されます。
ここで「別のアプリで開く…」を選ぶと、上記の設定を行ったアプリが項目に現れます。(この例では FolderSystem というアプリ名になっています)
これを選択すると、画像がアプリ内のドキュメントディレクトリに保存されます。実機では以下のようなパスになります。
/var/mobile/Containers/Data/Application/EAAFE4C3-4A40-47E3-AB96-05AD15ACF4C3/Documents/Inbox/profile.png
以上のように別のアプリにファイルを移動させたり、ファイルを受け取ることが可能です。