-
.app
:存放程序源文件,上架前经过数字签名,上架后不可修改 -
Documents
:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
获取路径方法
NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES)firstObject];
-
tmp
:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。在iPhone重启时,该目录下单文件会被删除。iTunes同步设备时不会备份该目录
NSString *tmp = NSTemporaryDirectory();
-
Library
包含两部分
获取路径方法:
NSString *library = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, 1, YES)firstObject];
-
Caches
:保存那些可再生文件,如网络请求数据(图片,音频,视频,)鉴于此,应用程序最好还是负责删除这些文件,不会被iTunes同步
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, 1, YES)firstObject];
-
Preferences
:保存应用的所有偏好设置,iOS的Settings(设置)会在该目录中查找应用的设置信息。用NSUserDefaults存储的用户数据都会被保存在该目录下的文件中.iTunes同步设备时会备份该目录
-
//注意:通常情况下,Preferences是有系统进行维护,我们很少进行操作
NSString *Preferences = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)firstObject];
//stringByAppendingString:将路径与字符串连接在一起拼接为完整路径
NSString *preferencesPath = [Preferences stringByAppendingString:@"/Preferences"];
具体可以查看Mac下iPhone Simulator下的app沙盒,地址如下
Xcode 5及之前
/Users/YourName/Library/Application Support/iPhone Simulator/
Xcode 6及以后
/Users/YourName/Library/Developer/CoreSimulator/Devices/模拟器标识
关于bundle
的补充
-
bundle
是一种特定的文件类型,一个主要作用是 获取Resources文件夹中的资源。 bundle是一个目录,其中包含了程序会使用到的资源。这些资源包含了如图像、声音、编译好的代码、nib文件等。 - 对应
bundle
,cocoa提供了类NSBundle
。我们的程序是一个bundle。在Finder中,一个应用程序看上去和其他文件没有什么区别,但是实际上它是一个包含了nib文件、编译代码、以及其他资源的目录。我们把这个目录叫做程序的main bundle。 -
[NSBundle mainBundle]
是获得NSBundle
的一个单例对象,该单例对象 已经设置了默认的resourcePath,也就是你的app打包后的路径,[NSBundle mainBundle]resourcePath]
就是获得这个完整的打包后的app路径
iOS app 应用程序下载后,打开,可以看到如下的结构
- iTunesArtwork:一张高分辨率的图片
- iTunesMetadata.plist:app 的属性列表文件,包含 app store 中看到如公司名、app 名、版本号、谁下载的、版本发布的时间、软件支持的设备等等
- META-INF 文件夹:不确定作用
- Payload: 里面有个 .app 文件,右键-显示包内容可打开
.app 里面的内容
- ._CodeSignature:.app 包里其他文件的 hash 列表,用来判断应用程序是否完好无损
- 资源文件:工程目录下的资源文件如 mp4、未添加到.xcasset 中的图片、lottie 动画资源、字体文件等
- Assets.car 文件:把图片放在 Assets.xcassets 有多种好处:
- 组织清晰
- 不同分辨率的图片好管理
- 工程打包后会对图片进行压缩
- 可以方便设置拉伸、压缩位置等
- 打包后会对图片同一压缩成 Assets.car 文件,大大减少包的体积,并且根据不同的设备分发不同分辨率的图片
- info.plist:工程文件中的 info.plist
- .Base.lproj 文件夹: 内部有 .storyboardc 文件
- 证书:.p12 文件、.der 文件
- app 可执行文件
- FrameWorks:用到的Framework
- .bundle 文件
ipa 文件与 iOS 沙盒有什么关系?
ipa 属于安装包,例如 ipa 里有运行时需要展示的图片、字体之类的,而沙盒属于在 iOS 应用程序安装时创建的属于自己的沙盒文件,用于保存运行时生成的文件,例如从网络下载的图片、运行时产生的数据等