Я пытаюсь создать новый документ в 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. Тот же код для файлов, сохраненных из PSPDFKit, файлов или фотографий работает отлично. С другой стороны, Word правильно сохраняет файлы другим провайдерам файлов, таким как Dropbox, поэтому проблема не должна возникать.
Я пытался сделать это с помощью файлового координатора, но это не помогло. Я проверил, что у каждого startAccessingSecurityScopedResource () есть свой stopAccessingSecurityScopedResource (). Я тестировал на двух устройствах iOS11.3 - то же самое поведение. Я даже нашел другое приложение с открытым исходным кодом , которое выполняет те же операции.
Что я делаю не так, за исключением того, что ожидается расширение приложения для iOS?