My iOS app can open CSV files, in order to import their data. I can open files from within the app via a UIDocumentPickerViewController
with no issues, selecting a file shown in the Files app. However, when viewing a file in the Files app first, and then opening my app from there (via the Open In share sheet), my app cannot see the file at the URL passed to my app. The file does not seem to exist.
I added the following debug code to my 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
}
When I open a file from Files in this app, it results in a log line like:
Exists: false (
/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/Reading List - Andrew’s iPhone - 2018-10-18 11-19.csv
)
When I open a file from some other app (e.g. Dropbox, or from an Email), the file can be processed, and the following is logged:
Exists: 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
)
Note the different path (Documents/Inbox
vs Mobile Documents/com~apple~CloudDocs
). What is causing this? How can I support the opening of files from the Files app in my app?
The document type(s) supported by my app are as follows:
LSSupportsOpeningDocumentsInPlace
tofalse
was enough – Puseyism