Я создаю приложение Flutter для iOS. Я создал тип файла, которым мое приложение и другое приложение могут совместно использовать. Для этого я использую библиотеку flutter receive_sharing_intent. Чтобы проверить это, я внес все необходимые изменения в свой файл info.plist для обработки моего пользовательского типа файла, я поместил образец файла этого типа в папку загрузок своего устройства (тестирование на ipad) и щелкнул по нему. оттуда, чтобы открыть его в моем приложении. ОС знает, что мое приложение может с этим справиться. Итак, мое приложение открывается, оно получает путь к общему файлу, но мое приложение не может открыть файл. Вот код в моем main.dart, который обрабатывает прием файла:
StreamSubscription _intentDataStreamSubscription =
ReceiveSharingIntent.getTextStream().listen((String value) {
setState(() {
try{
//This was added to test and make sure the directory actually exists.
//The value for the directory path was added after I ran it once to capture where the shared file was coming from.
Directory dir = Directory("/private/var/mobile/Containers/Shared/AppGroup/7DD4B316-3D73-4339-9B11-7516DE52F6FC/File Provider Storage/Downloads/");
bool dirExists = dir.existsSync();
var files = dir.listSync();
File drawingFile = File.fromUri(Uri.parse(value));
bool fileExists = drawingFile.existsSync();
var contents = drawingFile.readAsStringSync();
DrawingCanvas canvas = DrawingCanvas.fromFileContents(contents);
DrawingCanvasBloc canvasBloc = DrawingCanvasBloc(canvas);
Navigator.of(context).push(MaterialPageRoute(builder: (context) => CanvasScreen(canvasBloc)));
}
catch(e){
log(e.toString());
}
});
}, onError: (err) {
print("getLinkStream error: $err");
});
Сценарий: запускаю приложение. Захожу в папку загрузок в файлах на айпаде. Я выбираю свой файл example.fbg, расположенный там (мой собственный тип файла). Мое приложение открывается.
В приведенном выше коде он взрывается, когда я пытаюсь перечислить содержимое каталога. Я поместил это здесь (предварительно определив путь к каталогу и жестко его закодировав), чтобы проверить, чтобы убедиться, что я получил правильное местоположение. dirExists верно, но я не могу перечислить в нем файлы. Я получаю следующее сообщение об ошибке:
FileSystemException: Directory listing failed, path = '/private/var/mobile/Containers/Shared/AppGroup/7DD4B316-3D73-4339-9B11-7516DE52F6FC/File Provider Storage/Downloads/' (OS Error: Operation not permitted, errno = 1)
Если я возьму эту строку и продолжу до открытия файла (readAsStringSync), я получу:
FileSystemException: Cannot open file, path = '/private/var/mobile/Containers/Shared/AppGroup/7DD4B316-3D73-4339-9B11-7516DE52F6FC/File Provider Storage/Downloads/example.fbg' (OS Error: Operation not permitted, errno = 1)
Я не уверен, почему он не позволяет мне получить доступ к этому файлу. Есть ли какие-то разрешения, которые мне не хватает? Дайте мне знать, если мне нужно включить дополнительную информацию в вопрос, и я обновлю.