You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native/Expo文件如何下载至iCloud Drive及iPhone本地目录

我之前做React Native项目的时候也碰到过这俩iOS文件存储的问题,折腾了好一会儿才弄明白,给你详细说下怎么解决:

一、将文件保存到iCloud Drive并在文件App中显示

你已经开启了云文档和CloudKit功能,但用dirs.DocumentDir存的文件是App私有目录,iCloud Drive默认不会展示这些文件。要让文件出现在iCloud Drive的文件App里,得用iCloud容器的公共文档路径,还要配置Info.plist的相关权限:

1. 配置iOS项目的Info.plist

打开Xcode,找到项目的Info.plist,添加以下配置(可以右键选择「Add Row」手动添加,或者直接编辑源码):

<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
<key>NSUbiquitousContainers</key>
<dict>
  <key>iCloud.com.yourcompany.yourapp</key> <!-- 替换成你的iCloud容器ID,Xcode里能找到 -->
  <dict>
    <key>NSUbiquitousContainerIsDocumentScopePublic</key>
    <true/> <!-- 设为true才能让文件在iCloud Drive中可见 -->
    <key>NSUbiquitousContainerName</key>
    <string>你的App显示名称</string> <!-- 文件App里显示的文件夹名称 -->
    <key>NSUbiquitousContainerSupportedFolderLevels</key>
    <string>Any</string> <!-- 支持任意层级的文件夹 -->
  </dict>
</dict>

这里的iCloud.com.yourcompany.yourapp是你的iCloud容器ID,在Xcode的「Signing & Capabilities」→「iCloud」里的「Containers」列表里能找到。

2. 用React Native代码写入iCloud Drive

不管用react-native-fetch-blob还是react-native-fs,都可以直接获取iCloud容器的文档路径:

用react-native-fetch-blob的示例:

import RNFetchBlob from 'react-native-fetch-blob';

const dirs = RNFetchBlob.fs.dirs;
// 获取iCloud公共文档目录
const icloudPublicDir = dirs.UbiquityDocumentsDir;
// 拼接完整文件路径
const filePath = `${icloudPublicDir}/your-data.json`;

// 写入JSON数据
const jsonData = JSON.stringify(yourDataObject);
RNFetchBlob.fs
  .writeFile(filePath, jsonData, 'utf8')
  .then(() => console.log('文件已成功保存到iCloud Drive!'))
  .catch(err => console.error('保存失败:', err.message));

用react-native-fs的示例:

import RNFS from 'react-native-fs';

// 获取iCloud公共文档目录
const icloudPublicDir = RNFS.UbiquityDocumentsDirectoryPath;
const filePath = `${icloudPublicDir}/your-data.json`;

const jsonData = JSON.stringify(yourDataObject);
RNFS.writeFile(filePath, jsonData, 'utf8')
  .then(() => console.log('文件已成功保存到iCloud Drive!'))
  .catch(err => console.error('保存失败:', err));

注意事项

  • 测试时尽量用真机,模拟器的iCloud同步可能不稳定;
  • 保存后可能需要等几秒同步时间,才能在文件App的iCloud Drive里看到文件;
  • 确保你的设备已经登录了iCloud账号,并且开启了iCloud Drive功能。
二、将文件保存到「On my iPhone」目录

「On my iPhone」里的App文件夹对应的是你的App的共享文档目录,只要开启文件共享权限,就能把文件存在这里,用户可以在文件App里直接访问:

1. 配置Info.plist

同样需要在Info.plist里添加两个关键配置(如果之前已经加过就不用重复了):

<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>

这两个配置会让你的App在「On my iPhone」下生成一个同名文件夹,用户可以直接打开查看里面的文件。

2. 用React Native代码写入目录

直接用DocumentDir(react-native-fetch-blob)或者DocumentDirectoryPath(react-native-fs)就可以,这个路径就是共享文档目录:

用react-native-fetch-blob的示例:

import RNFetchBlob from 'react-native-fetch-blob';

const dirs = RNFetchBlob.fs.dirs;
// 共享文档目录,对应「On my iPhone」里的App文件夹
const documentDir = dirs.DocumentDir;
const filePath = `${documentDir}/your-data.json`;

const jsonData = JSON.stringify(yourDataObject);
RNFetchBlob.fs
  .writeFile(filePath, jsonData, 'utf8')
  .then(() => console.log('文件已成功保存到On my iPhone的App目录!'))
  .catch(err => console.error('保存失败:', err.message));

用react-native-fs的示例:

import RNFS from 'react-native-fs';

const documentDir = RNFS.DocumentDirectoryPath;
const filePath = `${documentDir}/your-data.json`;

const jsonData = JSON.stringify(yourDataObject);
RNFS.writeFile(filePath, jsonData, 'utf8')
  .then(() => console.log('文件已成功保存到On my iPhone的App目录!'))
  .catch(err => console.error('保存失败:', err));

访问方式

用户打开文件App,进入「On my iPhone」列表,找到你的App名称的文件夹,点击进去就能看到你保存的文件了。


内容的提问来源于stack exchange,提问作者hong developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:30:35