16.6.2  iPhone应用环境(2)

应用启动阶段。用户在主菜单按某个应用的图标启动该应用,这是启动应用的通用方法。当然还有其他启动应用的方法,例如通过一个网页的URL启动一个Safari应用;

系统调用iPhone应用的主函数UIApplicationMain(),它实例化单个应用对象和委托对象,并装载从Info.plist文件中获得的应用主nib文件,UIApplicationMain函数开始了应用的主事件循环;

iPhone应用发送applicationDidFinishLaunching消息到它的委托。

接着做以下几件事:

装载和恢复在前一个进程中保存的应用状态和数据;

创建和显示初始视图,更新状态位和模式(Model)数据,如果应用委托做这些事情,系统从应用bundle中装载图像文件然后显示;

应 用接收并响应事件,重画或部分改变用户界面,例如,当应用正在运行时,应用委托可以接收到 applicationDidReceiveMemoryWarning消息,它应该立即释放一些应用不需要的对象或资源,如果应用委托不能响应这个消 息,或者没有释放足够的内存,应用可能被终止;

用户按Home键终止应用;

应用发送applicationWillTerminate消息到应用委托,这时应用应该保存应用的状态和数据,删除创建的所有临时文件;

应用终止。

2.应用中断

除用户按Home键中断iPhone应用外,还有许多其他方式能中断应用,例如来电、来短信、日历提示(calendar alert)或用户按Sleep键。与按Home键不同,这些中断都是暂时的。然而,当用户决定拨出一个电话或回复一条短信时,应用将被终止。

下面内容描述当来电时将发生什么。对于来短信和日历提示等,这些过程是相同的,只是展现给用户的信息类型不同而已。

系统检测到一个来电;

系 统调用应用委托的application Will Resign Active方法,同时系统屏蔽其他触摸事件传递到应用,开发者能用该方法撤销定时器,throttle back your OpenGL frame rates(如果使用OpenGL),使应用进入睡眠模式,例如,作为游戏开发者,可以利用该通知暂停游戏,在睡眠状态,应用不做任何工作;

系统将显示来电信息的提示面板,系统也提示用户接收或忽略来电;如果用户忽略来电,系统将调用应用委托的applicationDidBecomeActive方法,这时,应用可以启动定时器或与定时器相关的活动,同时系统也使能触摸事件在应用中的传递;

如 果有来电,系统将调用应用委托的applicationWillTerminate:方法,应用将被终止,保存应用的状态和数据,为下次启动该应用备份。 当中断完成后,系统可能再次启动原来的应用。例如,用户接通来电后挂断电话,系统将重新启动原来的应用。如果用户接通电话后,按Home键然后启动其他的 应用,系统将不会启动原来的应用。

如果在运行应用期间,用户按Sleep键,系统将调用应用委托的applicationWill ResignActive方法而不提示用户任何信息。这时系统将进入睡眠状态而不执行任何活动。同样地如果用户按Wake键,系统将调用应用委托的 applicationDidBecomeActive方法,这时系统可以重启定时器或做任何其他想做的事情。

3.应用bundle

当创建一个应用时,Xcode封装整个应用为bundle。bundle是一个包含相关资源的目录,它包括应用可执行文件和相关的资源,如应用图标和图片资源等。表16-5表示一个典型应用的bundle。

表16-5  典型的应用bundle

   

   

MyApp

包含应用代码的可执行文件,文件

名称是应用的名称去掉.app扩展名

Settings.bundle

设置bundle是在设置应用中添加应

用首选项的文件包,它包含属性列

表和其他资源文件,配置和显示首选项

Icon.png

57 × 57像素图标表征在设备主页

上的应用,系统自动为该图

标增加平滑效果

Icon-Settings.png

29 × 29像素图标表征在位于设

置模块中的应用

MainWindow.nib

应用的主nib文件,包含在应用启动

时默认的接口对象。通常它包括应用

的主窗口对象和应用代理对象的实例。

其他的接口对象从附加的nib文件装载,

或由应用程序装载。主nib文件的名称

可以在文件Info.plist中改变,并与

NSMainNibFile关键词配对

Default.png

应用从开始启动直到完全载入它的窗

口和用户界面期间,屏幕将显示

480 × 320像素的临时背景图像

Info.plist

信息属性列表文件,它定义应用的关键

词和属性信息对,例如,bundle ID

版本号和显示名称

sun.png(或其他资源文件)

非地域资源(Nonlocalized Resources

位于bundle目录的顶层(本例中sun.png

表征非地域资源),如果用户选择不同

的语言设置,非地域资源(Nonlocalized

 Resources)保持不变

en.lprojfr.lprojes.lproj

和其他特别语言项目目录

地域资源(Localized resources

位于bundle

目录的子目录,子目录的名称为ISO

语言缩写加上后缀.lproj。例如,en.lproj

 fr.lprojes.lproj目录包含English,

French Spanish资源

一 个应用可以有本地化资源,但它也应该有支持各种语言版本的国际化资源目录language.lproj。开发者可以用NSBundle类的方法或 CFBundle函数获得本地和非本地图片和声音资源存储在应用bundle的路径。例如,可以用Objective-C代码获得图片资源sun.png 的路径:

  1. NSString* p_w_picpathPath = [[NSBundle mainBundle] pathForResource:@'sun'  
  2. ofType:@'png'];  
  3. UIImage* sunImage = [[UIImage alloc]initWithContentsOfFile:p_w_picpathPath]; 

调用mainBundle类的方法获得表征应用bundle的对象,请参考Resource Programming Guide for information on loading resources。

4.应用配置

为了保证应用启动后能正常运行,需要配置应用bundle的几个组件。开发者应该指定从系统识别应用到识别首选用户的属性范围和展示给用户的应用图像。

Xcode应用工程项目的文件Info.plist又称为信息属性列表,它包括关键词和配对的应用运行配置信息。信息属性列表的元素组织为一个结构,结构里的每个节点是一个实体。如array、 dictionary、 string等。

在Xcode的项目菜单里选择'Edit Active Target TargetName',然后选择属性栏,就能得到信息属性列表,如图16-33所示。

 
(点击查看大图)图16-33  信息窗口属性面板

上 述的属性面板显示了应用bundle的一些属性,但不是全部。当单击'Open Info.plist as File'或在Xcode项目中选择文件Info.plist,Xcode将显示属性列表编辑窗口,开发者可以编辑属性值和增加key-value对,如 图16-34所示。

 
(点击查看大图)图16-34  信息属性列表编辑器

Xcode可以自动地设置一些属性值,表16-6列出了文件Info.plist需要包含的重要的属性值。

表16-6  Info.Plist表

关键词

CFBundleDisplayName

显示在应用图标下面的名称,

它应该支持所有的语言

CFBundleIdentifier

标识应用bundle类型的字符串,

它应该是统一类型标识符

Uniform Type Identifier,UTI),

例如,公司名是Ajax,应用名是

Hello,那么bundle标识符应该

com.Ajax.Hellobundle标识符

用于确认应用签名

CFBundleURLTypes

URL类型,每一个URL类型定

义一个Scheme,例如,http mailto

CFBundleVersion

应用bundle编译的版本号,它包

括一个或多个以 句号分隔开的整数

LSRequiresiPhoneOS

布尔变量,标识应用是否只是运行

iPhone OSXcode自动添加这

个关键词,并设置它的值为真,

开发者不需要改变这个关键词

NSMainNibFile

标识应用的主nib文件名称的字符串,

如果开发者不想采用项目的默认

名称,可以改变这个关键词的值

UIStatusBarStyle

识别应用启动时状态条风格的字

符串,这些字符串在文件

UIApplication.h中声明

UIStatusBarHidden

布尔变量,决定应用启动时状态

条是否隐藏。设置True隐藏状

态条,默认值是False

UIInterface-Orientation

识别应用用户界面的初始方向

的字符串,这些字符串在

UIApplication.h头文件中

声明,默认类型是

UIInterfaceOrientationPortrait

UIPrerenderedIcon

布尔变量,标识应用图标是否包

括平滑和倾斜效果,默认值是

False,如果设置True,意味着不

需要增加平滑和倾斜效果。

UIRequiresPersistent-WiFi

布尔变量,通知系统应用使用

Wi-Fi网络通信。使用Wi-Fi

信必须设置该关键词为true

否则,在30 min后,设备关掉

Wi-Fi连接进入省电模式。系统

应该显示网络选择对话框,特别

Wi-Fi网络资源可获得,但系

统并没有使用的情况下。

默认值是False