iOS应用剖析 ---- 设备目录

从iOS8开始,模拟器平台(比如iPhone、iPad以及其他的变体设备)都存储在以唯一标识符命名的目录下。这些标识符由两部分组成:一部分是从Xcode启动模拟器时选择的设备类型,另一部分是系统版本。所有目录都有一个plist文件记录当前的设备信息。

在这个plist文件中,想找出设备信息并不容易。为了找出设备信息,要么去Devices目录下查看.default_created.plist文件,要么使用grep命令找出所有的device.plist文件。
打开终端,输入(这里举例子,具体路径还要根据自己的电脑酌情改变):

1
2
3
4
5
6
7
$ cd /User/me/Library/Developer/CoreSimulator/Devices && ls

$ for dir in 'ls|grep -v default'
do
echo $dir
grep -Cl name $dir/device.plist |tail -l|sed -e 's/</\*string>//g'
done

进入正在运行的应用程序目录后,你会看到data目录,它包含所有的模拟器文件,还包括应用的相关数据。应用数据被分别放到了三个目录中,他们在data/Containers目录下,分别是Bundle、Data和Shared目录。
这篇文章主要介绍一下Bundle和Shared目录,关于Data目录内容较多,下一篇文章单独介绍。

Bundle目录

Bundle目录中有一个Applications目录,该目录包含设备上的所有的应用目录,这些应用目录用应用程序的bundle ID命名。

在应用目录中,.app文件夹存储应用程序的核心二进制代码、图像资源、本地化信息等;info.plist文件包含应用程序的核心配置信息,包括bundle标识、主程序包、应用程序的UI信息以及应用程序需要向设备请求的功能。

在文件系统中,这些plist会以XML或二进制格式进行存储,后者通常是默认的存储方式。你可以通过代码的方式获取info.plist中的信息,及引用[NSBundle mainBundle]中的字典属性;一般通过这种方式来载入一些样式或本地化信息。

info.plist文件中值得我们关注的条目是UIRequiredDeviceCapabilities,他看上去像这样

1
2
3
4
5
6
7
8
9
<key>UIRequiredDeviceCapabilities</key>
<dict>
<key>armv7</key>
<true/>
<key>location-services</key>
<true/>
<key>sms</key>
<true/>
</dict>

UIRequiredDeviceCapabilities描述了应用所需要的系统资源。
虽然这不是强制要求的,但还是暗示了这个应用将涉及哪些活动类型。

Shared目录

Shared目录是一个特殊的目录,用来为应用程序提供一个共享的应用组(为了支持iOS8的扩展extensions),比如通知中心的“今日”视图中的任务或键盘行为,widget。苹果要求所有的扩展必须对应一个容器应用,每一个容器应用会拥有自己的应用ID。扩展及其应用容器可以通过Shared目录来共享数据。

例如,用户可以使用NSUserDefaults的初始化方法,制定一个名字来访问用户数据中共享的数据库。

Shared目录不常用,但是当我们检查存储在perferences中的敏感信息或其他隐私数据时,别忘了它。

文章目录
  1. 1. Bundle目录
  2. 2. Shared目录
|