iOS沙盒目录简介、沙盒路径获取

一、沙盒的意义

  出于安全的考虑,iOS系统的沙盒机制规定每个应用只能访问当前沙盒目录下面的文件。但是对于一些用户级别的数据,考虑到很多软件都需要使用其中的数据,用户可以通过对当前的软件授权,让当前的应用可以访问这类数据。但是这类数据只存在于苹果原生开发的应用中,比如相册、通讯录等等。

  沙盒中的根目录下的一级目录是固定的,这些目录有Bundle Container(MyApp.app)、DataContainer(Documents、Libray、Temp)、iCloud Container。作出规定的意义在于方便沟通,比如开发者将文件放置在不同的位置,iOS系统会根据之前约定好的规则作出恰当的操作。

二、目录路径的意义规范以及使用场景

1、MyApp.app

(1)说明

存放着应用程序本身的数据,包括资源文件和可执行文件等。整个目录只可读,不可更改。应用程序启动后,软件会根据需要从该目录中懒加载代码和资源到内存中。为了防止篡改里面的内容,应用在安装的时候会将该目录进行签名。在非越狱的情况下,该目录中的内容是无法更改的。在越狱设备上如果更改了目录内容,对应的签名就会被改变,这种情况下应用程序将无法启动。

(2)iTunes同步

该文件不会被iTunes同步。

(3)路径获取

[[NSBundle mainBundle] bundlePath]

 

2、Documents

(1)说明

开发者可以将应用程序的数据文件保存在这个目录下。不过建议这里只保存不可再生的数据,可再生的数据应该存放在Library/Cache目录下。

(2)iTunes同步

该目录下的文件会被iTunes同步。

(3)路径获取

[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]

 

3、Documents/Inbox

(1)说明

这个目录是苹果后面在加上的。比如,QQ接受到一个word文件,通过调用WPS软件打开这个文件。这个过程和前提是这样的,首先WPS软件会像iOS系统注册能够打开的文件格式(比如word、pdf、excel等),然后QQ中打开文件时需要设置一个类似于“用其他软件开发”的按钮,调用系统的外部软件打开功能,这个功能界面中会出现WPS软件,当用户选择WPS后,iOS系统会将这个word文件复制一份到WPS的Documents/Inbox目录下,在让WPS打开。该目录只读不可修改。

(2)iTunes同步

该目录下的文件会被iTunes同步。

(3)路径获取

 

4、Library

(1)说明

苹果工程师建议在该目录下存放一些偏好设置或者一些状态信息。

(2)iTunes同步

除这个Library/Caches之外,Library下的其他文件会被iTunes同步。

(3)路径获取

[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]

 

5、Library/Caches

(1)说明

这个目录下主要存放一些用户在使用软件过程中的缓存数据,前面说的Documents目录用来保存一些不可再生的数据,那么现在这个目录就用来保存那么可以再生的文件,比如网络请求的数据,但是为了用户使用软件的更加顺畅,开发者可以考虑将一些网络数据缓存起来。既然是缓存数据,开发者需要设置好缓存的一系列安排,比如清除缓存、缓存有效期的设置等等。

(2)iTunes同步

该目录下的数据不会被iTunes同步。

(3)路径获取

[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]

 

6、Library/Preferences

(1)说明

程序的偏好设置文件。比如使用的NSUserDefaults就是将数据保存在该目录下的一个plist文件中。

(2)iTunes同步

该目录下的数据会被iTunes同步。

(3)路径获取

[NSUserDefaults standardUserDefaults]

 

7、Temp

(1)说明

各种临时的文件,保存应用再次启动时就可以不需要的文件数据。并且开发者不需要这些文件的时候应该要主动将其删除掉,因为该目录下的文件随时可能被系统清理掉,比如当系统磁盘存储空间不足的时候,系统会自动清除这个目录下的文件。

(2)iTunes同步

该目录不会被iTunes同步。

(3)路径获取

NSTemporaryDirectory()

 

三、其他

1、沙盒主目录路径

NSHomeDirectory()

 

转载于:https://www.cnblogs.com/cchHers/p/9724843.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS 上,应用沙盒目录是私有的,其他应用无法直接访问。因此,要从 JS 中获取 iOS 沙盒内的文件,需要通过 Native Bridge 的方式,即将 JS 中的请求传递给原生代码,由原生代码来实现文件读取并返回结果给 JS。 以下是一个简单的示例,假设你要获取沙盒内的一个名为 `example.txt` 的文件: 1. 在原生代码中实现文件读取逻辑,例如使用 `NSFileManager` 类读取文件内容: ```objc - (NSString *)readFileContentsAtPath:(NSString *)path { NSFileManager *fileManager = [NSFileManager defaultManager]; NSData *data = [fileManager contentsAtPath:path]; return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; } ``` 2. 在 JS 中定义一个函数,用于调用原生代码并获取文件内容: ```js function getExampleFileContents() { // 调用 Native Bridge 方法,传递路径参数 const path = 'path/to/example.txt'; const contents = NativeBridge.readFileContentsAtPath(path); return contents; } ``` 3. 在原生代码中实现 Native Bridge 方法,并将其暴露给 JS 环境: ```objc - (void)registerNativeBridgeMethods { [self.bridge registerNativeMethod:@"readFileContentsAtPath" handler:^(NSString *path) { NSString *contents = [self readFileContentsAtPath:path]; // 将结果返回给 JS 环境 [self.bridge callHandler:@"onFileContentsReceived" withArguments:@[contents]]; }]; } ``` 4. 在 JS 中注册 `onFileContentsReceived` 回调函数,用于接收原生代码返回的文件内容: ```js function onFileContentsReceived(contents) { // 处理文件内容 console.log(contents); } NativeBridge.registerEventHandler('onFileContentsReceived', onFileContentsReceived); ``` 注意:以上示例仅为演示 Native Bridge 的基本用法,具体实现方式可能因框架、平台、业务需求等因素而异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值