iOSアプリで作成したファイルをFilesアプリから
こんな感じで閲覧することができるようにする方法を紹介します。
アプリで作成したファイルをFilesアプリから閲覧できるメリット
アプリで作成したファイルを他のデバイス間で共有したいのであれば、iCloudを活用するのが最も楽な方法です。しかし扱うデータ量が多い場合にはデータ通信量が大きくなるなど問題もあります。
iPhoneは省データモードという設定があって、これをONにするとWi-Fiに接続している環境でしか同期通信をしなくなり、データ通信量を抑えることができます。しかしこれはiPhone全体に影響する設定であるため、他のアプリの通信にまで影響が出てしまったりすぐにiCloudに反映されないといった使い勝手の悪さがあります。そのため省データモード設定を前提にした設計は避けたほうがいいです。
というワケで、状況によってはFilesアプリから閲覧して必要なものだけをAirDropなどで別デバイスにコピーするような小回りのきく運用も、時には検討が必要になります。
作成したファイルをFilesアプリから閲覧できるアプリ
URL.documentsDirectoryにファイルを書き込む
iOSアプリは自分のサンドボックス内にあるファイルにしかアクセスできません。アプリが自分のサンドボックスに対しファイルを書き込む場合、URL.documentsDirectory
を指定します。
URL.documentsDirectory
は例えば次の位置です。
/var/mobile/Containers/Data/Application/6FDDD53A-3A74-443A-C46D-B3B24AF1CD89/Documents/
サンドボックス内にファイルを保存するiOSのプログラムは次のようになります。
import SwiftUI
import os
struct ContentView: View {
func createSampleFile() {
let path = URL(
filePath: "sample.txt",
relativeTo: URL.documentsDirectory).absoluteURL.path()
FileManager.default.createFile(
atPath: path,
contents: "sample content".data(using: .utf8))
}
var body: some View {
VStack {
Button("Create sample file") {
createSampleFile()
}
Spacer()
}
.padding()
}
}
このアプリをiPhoneやiPadで起動して"Create sample file"ボタンをタップすると、URL.documentsDirectory
の場所に sample.txt が作成されます。
FilesアプリからOn My iPhoneの場所を表示すれば、先ほど作成したsample.txtが閲覧できるのですが、今はまだ何も表示されません。
ファイルにアクセスできるようにアプリを設定する必要があります。
Information Property List
アプリの設定は、Information Property Listに記述します。この設定ファイルはInfo.plist
です。
Info.plist
ではカメラやマイクにアクセスする権限を設定したり、アプリを実行できるiOSの最低バージョンなど、多様なアプリの設定をできます。
今回はアプリのサンドボックスフォルダ内に作成されたファイルをFilesからアクセスできるように設定します。
Info.plist
は直接編集することもできますが、文法エラーのリスクがあったり効率性の理由から、XCode上で設定するのが推奨されています。
XCode > ターゲット > Infoと選択し、Application supports iTunes file sharing
とSupports opening documents in place
をYESに設定します。
XCode上でInfo.plist
を設定する方法は、XCode Help: Edit property listで詳しく説明されています。
この設定をしたうえで再度アプリを実行すると、次のようにFilesからアプリのサンドボックスにアクセスすることができるようになっていることが確認できます。
続いて、それぞれの設定についても少し説明をしておきます。
Application supports iTunes file sharing
Application supports iTunes file sharing
は、Apple DeveloperのDocumentationかのndle Resources > Information Property List > Data and storage > UIFileSharingEnabledにドキュメントがあります。
サンドボックス内に作成したファイルをiTunesから共有できるようにする設定です。
iTunes使わずにFilesアプリから表示できるようにしたいだけの場合でもApplication Supports iTunes file sharingという名前の設定をXCodeからしないといけないのがわかりづらいですよね。。
Supports opening documents in place
Supports opening documents in place
は、Apple Developer DocumentationのBundle Resources > Information Property List > Data and storage > LSSupportsOpeningDocumentsInPlaceにドキュメントがあります。
ファイルのコピーじゃなくてファイルそれ自体を開けるようにする設定のようです。
この設定がない場合、ファイルを閲覧することはできても変更を加えることができないのかな…と思いきや、Filesアプリから閲覧することすらできません。そのため閲覧したいだけの場合であってもこの設定も必要です。意味不。。
Filesアプリ以外でのファイル共有選択肢
アプリからデバイスにファイルを保存してFilesアプリから閲覧する以外に、他のデバイス間でファイルを共有する方法はいくつかあります。
一般的なユーザーはFilesアプリを使ったことすらない人が多いので、ユーザー負担が極力軽くなるように次の選択肢をまず検討します。
iCloudで共有する
ファイルをiCloudに書き込み、アプリ同士で同じ場所を参照することで共有する方法です。
アプリの設定を共有する場合などでこの方法が適切です
Photosで共有する
画像や動画はPhotos(写真)アプリに保存することができます。
クラウドで共有する
自前のサーバーにユーザーが使用しているアプリからファイルをアップロードする方法も可能です。
AWSであればAWS SDK for Swiftを活用できます。