iOS端DocumentPicker异常 仅打开iCloud无法浏览本地文件
iOS端跨端文件选择异常修复方案
问题1:expo-document-picker触发后仅显示iCloud入口,无法浏览本地存储
根因
iOS系统对文档访问有权限限制,默认隐藏本地存储目录;同时传入的MIME类型数组在iOS端存在格式兼容问题,导致本地文件目录无法被正常枚举。
修复步骤
- 打开iOS项目下的
Info.plist文件(路径为ios/[你的项目名]/Info.plist),添加以下权限与配置项:
<!-- 文档访问权限说明 --> <key>NSDocumentPickerUsageDescription</key> <string>需要访问存储以选择待上传文件</string> <!-- 开启本地文件共享支持 --> <key>UIFileSharingEnabled</key> <true/> <key>LSSupportsOpeningDocumentsInPlace</key> <true/>
- 修正文件选择调用参数,iOS使用UTType作为文件类型标识,和安卓的MIME类型做平台兼容处理:
import { Platform } from 'react-native'; import * as DocumentPicker from 'expo-document-picker'; const documentFile = await DocumentPicker.getDocumentAsync({ // iOS使用系统UTType,安卓使用通用MIME type: Platform.OS === 'ios' ? ['public.image', 'com.adobe.pdf'] : ["image/*", "application/pdf"], copyToCacheDirectory: true })
- 重新编译项目:
- 纯Expo托管项目执行
npx expo prebuild --clean后重新执行npx expo run:ios - 原生裸工作流项目进入
ios目录执行pod install后,在Xcode中重新编译运行
- 纯Expo托管项目执行
- 配置生效后,打开文件选择器点击位置列表中的「我的iPhone」即可访问本地存储目录,照片、下载等文件夹均可正常浏览。
问题2:react-native-document-picker调用时提示documentPicker is undefined
根因
React Native 0.60及以上版本支持自动link,手动执行react-native link会导致依赖重复关联;同时导入语句写法错误,且Expo Go运行环境不支持该纯原生库,会直接返回undefined。
修复步骤
- 先清理错误的关联配置:
npx react-native unlink react-native-document-picker rm -rf node_modules && npm install
- iOS端进入
ios目录执行pod install重装原生依赖 - 修正导入与调用写法,不要导入不存在的
documentPicker默认对象:
import { pick, types } from 'react-native-document-picker'; const documentFile = await pick({ presentationStyle: 'fullScreen', type: Platform.OS === 'ios' ? [types.images, types.pdf] : ["image/*", "application/pdf"], });
- 注意:如果是Expo托管项目,不要使用react-native-document-picker,Expo Go环境不包含该库的原生编译代码,会持续报undefined,直接使用官方适配的expo-document-picker即可
提示:所有原生配置修改后必须重新编译安装包,RN热重载/快速刷新不会同步原生配置变更。
内容的提问来源于stack exchange,提问作者catBuddy
相关产品推荐
相关产品推荐

