首页 » iOS编程(第4版) » iOS编程(第4版)全文在线阅读

《iOS编程(第4版)》18.11 深入学习:应用程序包

关灯直达底部

Xcode在构建iOS应用时,需要完成的主要工作是创建应用程序包(application bundle)。应用程序包会包含应用的可执行文件和执行应用所需的全部资源。这些资源包括XIB文件、图片和音频文件等,即应用在运行时需要使用的所有文件。将某个文件加入项目时,Xcode会自动判断是否应该将该文件加入应用程序包。

通过以下步骤,可以查看会被加入Homepwner程序包的文件。选中位于项目导航面板顶部的Homepwner条目,选中右侧面板中的Homepwner目标,选择Build Phases面板。展开Copy Bundle Resources(拷贝程序包资源)列表,可以看到一组文件。Xcode会在构建项目时,将这组文件加入应用程序包。

Build Phases面板中的每一个列表,都是Xcode在构建项目时需要经历的阶段。Copy Bundle Resources阶段的任务是将指定的文件(资源文件)全部拷贝至应用程序包。

将某个应用装入模拟器后,可以通过文件系统查看相应的应用程序包(见图18-11)。在Finder中打开~/Library/Application Support/iPhoneSimulator/(版本号)/Applications目录。该目录下的子目录都是已安装应用的沙盒。打开某个子目录,可以看到一个应用沙盒应该包含的目录,其中包括:应用程序包、Documents目录、tmp目录和Library目录。右键单击或Command-单击应用程序包,然后选择上下文菜单中的Show Package Contents(显示包内容)。

图18-11 查看应用程序包

Finder会打开一个新窗口并显示包内的内容(见图18-12)。当用户通过App Store下载某个应用后,相应的程序包会被拷贝至用户的设备。

图18-12 应用程序包

iOS应用可以在运行时载入应用程序包中的文件。要获得应用程序包中的某个文件的全路径,需要先得到代表应用程序包的NSBundle对象,然后通过该对象得到某个文件的全路径,代码如下:

// 获取代表应用程序包的NSBundle对象

NSBundle *applicationBundle = [NSBundle mainBundle];

// 通过NSBundle对象,获得包内名为myImage.png的文件的全路径

NSString *path = [applicationBundle pathForResource:@“myImage”

ofType:@“png”];

调用pathForResource:ofType:后,如果应用程序包没有包含指定的文件,则它会返回nil。如果文件存在,则它会返回该文件的全路径。

应用程序包中的文件都是只读的,不能修改。此外,也不能在运行时向应用程序包添加文件。应用程序包中的文件通常包含:按钮图片、界面音效或初始化模板等。后续章节为了能在运行时载入这类资源,还会再次使用pathForResource:ofType:方法。