Phone会为每一个应用程序生成一个私有目录,iOS7这个目录位于:/var/mobile/Applications,随机生成一个数字字母串作为目录名,每一次应用程序启动时,这个字母数字串都是不同的。
Documents:保存应用运行时生成的需要持久化的数据,iTunes会自动备份该目录
"/var/mobile/Applications/4DCF7000-BD28-4494-80DF-4F081C975EDC/Documents"
~/Documents
Libaray/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除,一般存放体积比较大,不是很重要的资源
打印:
/var/mobile/Applications/4DCF7000-BD28-4494-80DF-4F081C975EDC/Library/Caches
打印: ~/Library/Caches
Libaray:存储程序的默认设置和其他状态信息,iTunes会自动备份该目录
打印:"/var/mobile/Applications/4DCF7000-BD28-4494-80DF-4F081C975EDC/Library"
打印:~/Library
Libaray/Preferences:保存应用的所有偏好设置,ios的Settings(设置)应用会在该目录中查找应用的设置信息,iTunes会自动备份该目录。
/var/mobile/Applications/4DCF7000-BD28-4494-80DF-4F081C975EDC/Library/Preferences
tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除,应用没有运行时,系统也可能会自动清理该目录下的文件,iTunes不会同步该目录,iPhone重启时该目录下的文件会丢失
/private/var/mobile/Applications/4DCF7000-BD28-4494-80DF-4F081C975EDC/tmp/
NSFileManager 是处理文件系统的 Foundation 框架的高级API。它抽象了 Unix 和 Finder 的内部构成,和 iCloud ubiquitous containers 一样, 提供了创建,读取,移动,拷贝以及删除本地或者网络驱动器上的文件或者目录的方法。
https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW2
NSFileManager http://nshipster.cn/nsfilemanager/
官方文档
不管是在iOS还是Android开发过程中,我们都经常性地需要存储一些状态和数据,比如用户对于App的相关设置、需要在本地缓存的数据等等。根据要存储的的数据的大小、存储性质以及存储类型,在iOS和Android中哪个都有多种存储方式。其中,iOS中的存储方式主要包括以下六类:plist文件(属性列表)
preference(偏好设置)
NSKeyedArchiver(归档)
SQLite 3
CoreData
手动存放沙盒
一、沙盒机制
在研究存储方式之前,我们有必要先研究下这些文件会存储到什么地方去,这就需要我们了解iOS App特有的沙盒机制了。iOS程序默认情况下只能访问程序自己的目录,这个目录被称为“沙盒”,即沙盒其实就是一个App特有的一个文件夹,iOS下每个App都有自己特有的一个沙盒,其结构和目录特性都是一样的。
1.1 沙盒结构
既然沙盒就是一个文件夹,那就看看里面有什么吧。沙盒的目录结构如下图所示,每个App的沙盒都是由下图所示的四部分组成,每一部分中存放的数据和内容都是有一定的规范和性质的。该目录路径的获取方法是直接通过 NSHomeDirectory() 就得到和应用沙盒的路径。
此外,每一个App还有一个Bundle目录,即“应用程序包”,该目录下 存放的是应用程序的源文件,包括资源文件和可执行文件。
使用 file 命令查看ipa文件其中 Payload 文件夹不可缺少,其中包含 .app 文件夹,简单介绍一下 .app 中最主要的几类文件:
新建一个 Xcode iOS App 项目,按 “command + B” 快捷键编译项目,单击查看编译细节,过程如下
下面是《iOS应用逆向安全》中提供的自动打包脚本:
从上述脚本中可以看到整个过程大致如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)