Flutter开发中如何查找iOS Files App的目录路径?
Flutter 获取iOS系统Files App对应目录路径方案
首先明确iOS沙盒机制的基础限制:你无法未经用户授权直接访问其他App的私有目录,Files App中可见的内容分为两类,对应不同的获取方式:
前置配置(必要操作)
如果需要让你当前开发的App的目录出现在Files App的「我的iPhone」列表中,需要先在Xcode项目的Info.plist中添加两项配置:
- 将
UIFileSharingEnabled(Application supports iTunes file sharing)设置为YES - 将
LSSupportsOpeningDocumentsInPlace(Supports opening documents in place)设置为YES
场景1:获取当前App在Files中展示的自有目录路径
使用官方维护的path_provider组件即可直接获取,步骤如下:
- 在
pubspec.yaml中添加依赖:path_provider: ^2.1.0 - 调用API获取路径:
import 'dart:io'; import 'package:path_provider/path_provider.dart'; Future<String?> getIOSAppPublicDirPath() async { if (!Platform.isIOS) return null; // 获取到的documents目录就是对应Files App里你App同名文件夹的实际路径 final documentsDir = await getApplicationDocumentsDirectory(); return documentsDir.path; }
你存在该目录下的所有文件,都会直接同步展示在Files App的对应文件夹中。
场景2:获取Files App中其他公开目录/文件的路径
苹果不允许App直接获取其他App公开目录的绝对路径,必须通过系统文件选择器由用户主动授权后才能拿到临时可访问路径,推荐使用file_picker组件实现:
- 在
pubspec.yaml中添加依赖:file_picker: ^6.1.1 - 唤起系统Files选择界面获取授权路径:
import 'package:file_picker/file_picker.dart'; Future<String?> pickPathFromFilesApp() async { FilePickerResult? selectResult = await FilePicker.platform.pickFiles( type: FileType.any, allowMultiple: false, // 如果需要选择整个目录可以改为: // directory: true, ); if (selectResult == null) return null; // 此处获取的path就是用户授权的文件/目录的临时可访问路径 return selectResult.files.first.path; }
注意:通过用户授权拿到的外部路径仅在当前App启动周期内有效,下次启动App如果需要再次访问该路径,需要重新让用户授权。
内容的提问来源于stack exchange,提问作者M.Omer
相关产品推荐
相关产品推荐

