У меня есть этот код в UIViewController
, который подтверждает UIDocumentPickerDelegate
:
- (void)openTextFilePicker {
NSArray *UTIs = [NSArray arrayWithObjects:@"public.text", nil];
[self openFilePicker:UTIs];
}
- (void)openFilePicker:(NSArray *)UTIs {
UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:UTIs inMode:UIDocumentPickerModeImport];
documentPicker.delegate = self;
documentPicker.popoverPresentationController.barButtonItem = self.importButton;
[self presentViewController:documentPicker animated:TRUE completion:nil];
}
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURLs:(NSArray<NSURL *> *)urls {
[self documentPicker:controller didPickDocumentAtURL:[urls firstObject]];
}
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
NSLog(@"picked document %@", url);
}
- (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller {
NSLog(@"cancelled");
}
Это позволяет пользователям выбирать файл в любом месте своей системы и импортировать его содержимое в приложение. Это работает, если у меня в App Sandbox> User Selected File установлена опция Read / Write. Но я только читаю данные из файла, мне не нужно обновлять файл или сохранять что-либо вне песочницы. Поэтому я изменил возможность на «Только чтение», но затем я получаю эту ошибку в консоли, и didPickDocumentsAtURLs
не вызывается:
Не удалось создать FPSandboxingURLWrapper для [путь]. Ошибка: Ошибка Domain = NSPOSIXErrorDomain Code = 1 «не удалось выдать расширение песочницы com.apple.app-sandbox.read-write для« [путь] »: операция не разрешена»
Похоже правильно, или я должен иметь возможность читать файлы только с правом «Только чтение»? При необходимости достаточно легко переключить его на чтение / запись, но моя первая заявка была отклонена из-за использования ненужных прав, и я хочу быть готовым объяснить это группе проверки, если это действительно необходимо.