Я пытаюсь создать новый документ в Word.app и сохранить его в своем приложении через расширение FileProvider. Моя реализация соответствующего метода:
override func importDocument(at fileURL: URL,
toParentItemIdentifier parentItemIdentifier: NSFileProviderItemIdentifier,
completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void)
{
let internalUrl = NSFileProviderManager.default.documentStorageURL.appendingPathComponent(fileURL.lastPathComponent, isDirectory: false)
guard fileURL.startAccessingSecurityScopedResource() else { fatalError() }
try! FileManager.default.copyItem(at: fileURL, to: internalUrl) // breakpoint here
fileURL.stopAccessingSecurityScopedResource()
// update local db, whatever
completionHandler(TemporaryItem(forImporting: internalUrl, into: parentItemIdentifier), nil)
}
По-видимому, когда я ставлю точку останова и проверяю атрибуты файла с помощью команды po FileManager.default.attributesOfItem(forPath: fileURL.path)
, значение для NSFileSize равно 0. Команда po FileManager.default.contents(atPath: fileURL.path)
возвращает мне 0-байтовые данные с указателем 0x000000000000bad0. Файл, записываемый во internalUrl, также пуст.
Самое странное, что такая ситуация бывает только с приложениями MS Word, Excel и PowerPoint. Тот же код для файлов, сохраненных из PSDFKit, Files или Photos, работает отлично. С другой стороны, Word правильно сохраняет файлы в других файловых провайдерах, таких как Dropbox, поэтому проблемы быть не должно.
Я пытался сделать это с файловым координатором, но это не помогло. Я проверил, что у каждого startAccessingSecurityScopedResource() есть stopAccessingSecurityScopedResource(). Я тестировал на двух устройствах iOS11.3 - такое же поведение. Я даже нашел другое приложение с открытым исходным кодом, которое выполняет те же операции.
Что я делаю неправильно, кроме как ожидаю, что расширение приложения для iOS будет работать?