データをインポートするために、私のiOSアプリはCSVファイルを開くことができます。私は、ファイル内のファイルをUIDocumentPickerViewController
でファイル内から開くことができ、ファイルアプリケーションに表示されているファイルを選択できます。ただし、最初にファイルアプリ内のファイルを表示してから(共有シートの開いている)からアプリを開くと、私のアプリに渡されたURLのファイルが表示されないことがわかりません。ファイルが存在しないようです。
私のAppDelegateに次のデバッグコードを追加しました。
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
print("Exists: \(FileManager.default.fileExists(atPath: url.path)) (\(url.path))")
return true
}
_
このアプリのファイルからファイルを開くと、次のようなログ行が表示されます。
存在します:false(
/private/var/mobile/Library/Mobile Documents/com~Apple~CloudDocs/Reading List - Andrew’s iPhone - 2018-10-18 11-19.csv
)
他のアプリケーション(例えばDropbox、またはEメールから)からファイルを開くと、ファイルが処理できます、次のことが記録されます。
存在します:true(
/private/var/mobile/Containers/Data/Application/F9110F90-7A91-4AB6-A92E-0ED933184EA4/Documents/Inbox/Reading List - Andrew’s iPhone - 2018-01-27 08-03.csv
)
異なるパスに注意してください(Documents/Inbox
vs Mobile Documents/com~Apple~CloudDocs
)。これを引き起こしているのは何ですか?アプリのファイルアプリからファイルのオープンをサポートする方法
アプリでサポートされている文書タイプは次のとおりです。
LSSupportsOpeningDocumentsInPlace
フラグをFALSEに設定すると、ファイルアプリ内のファイルを選択するとアプリが自動的に開かれるのが防止されます。ファイルが最初にアクセス/ロック解除する必要がある場所にファイルが開いている場合
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let opensInPlace = options[.openInPlace] != nil
opensInPlace ? url.startAccessingSecurityScopedResource() : nil
let fileExists = FileManager.default.fileExists(atPath: url.path)
opensInPlace ? url.stopAccessingSecurityScopedResource() : nil
}
_