说到应用程序开发,很多iPhone应用程序从来不用考虑它们将在什么平台上运行。大多数程序只依赖于显示屏和触摸输入。你大可放心地将它们部署到目前所有的iPhone家族设备上,无需进行特别的编程,也不必关心它们在哪种平台上运行。 然而,实际平台之间仍存在差异。这些差异非常重要,并且值得注意。在决定如何告诉App Store帮助你销售软件以及在一开始如何设计软件时,这些差异有着重要的影响。应该将软件只部署到iPhone吗?部署到iPhone和第二代及以后的iPod touch?还是应该考虑使应用程序面向所有平台?下面是要考虑的一些问题。 1.3.1 摄像头 每个iPhone都带有一个摄像头,而iPod touch则没有。摄像头非常有用。可以使用摄像头拍照,然后将照片发送到Flickr或Twitter。可以使用摄像头抓图并直接对图像进行操作,等等。iPhone SDK提供了一个内置的图像采集控制器,使用户可以使用摄像头,但是它仅适用于装有摄像头的平台。视频服务仅限于3G S及以后的型号。 当构建支持摄像头的应用程序时应该清楚,不能将这种应用程序部署到iPod。摄像头服务仅限于iPhone家族产品。第一代和第二代iPhone内置的200万像素的摄像头马马虎虎。第三代iPhone的摄像头则有了很大的改进,提供了自动聚焦、微距摄影、视频录制和更好的低照度感光。 1.3.2 扬声器和麦克风 第一代iPod touch没有扬声器,而iPhone和第二代iPod touch则有扬声器。虽然第一代iPod touch支持通过底端的连接端口外接第三方扬声器,但是苹果公司将它们视作未经授权的配件,因而用得很少。 不要假定终端用户在使用应用程序时会戴上耳机。当针对第一代iPod进行设计时,应仔细考虑音频提示的作用。如果它们对于程序比较关键,则要么建议使用耳机,要么不考虑将1G iPod作为发布平台。 第二代iPod touch支持外接耳麦。第一代则不支持。如果打算部署录音应用程序,务必清楚地说明iPod需要额外的设备才能使用这些功能。 第三代iPhone 3G S提供了很多可访问性功能,包括声音控制。但是,在撰写本书之际,尚不清楚声音控制API是否向iPhone开发人员开放。 1.3.3 手机 非常明显的一点是,当收到来电时,iPhone负责处理呼叫和SMS消息的手机系统会中断应用程序。在iPhone和iPod平台上,用户确实可以随时退出应用程序,但是只有iPhone必须处理系统强制的而不是由用户选择的退出。 应考虑不同类型的中断会对应用程序产生怎样的影响。在设计软件时,应想到所有的可能性,这一点非常重要。注意,离开应用程序并非总是出于用户的选择,尤其是在iPhone上。 手机运作方式的另一个不同是,与iPod touch相比,在iPhone上有更多的东西在后台运行。这通常意味着与iPod touch相比,iPhone上的空闲内存很可能会减少。这也是使用iPhone而不是iPod touch作为主要开发设备的原因之一。由于iPhone的限制更多,在这种环境下开发的软件能够同时在iPhone和iPod touch平台上健壮地运行。 1.3.4 Core Location的差异 Core Location依赖于3种不同的方式,每种方式在给定的平台上可能可用,也可能不可用。这些方式受每种设备内置功能的限制。Wi-Fi定位扫描本地路由器,使用它们的MAC地址搜索一个中心位置数据库,所有iPhone和iPod touch平台都免费提供了这种定位方式。 蜂窝定位则依赖于天线,但是只有iPhone上才有这样的天线。这种技术利用本地蜂窝基站进行三角定位,这些基站的位置是在手机公司安装基站时就确定的。最后一种、也是最准确的一种定位方式是GPS,只有第二代和更新的iPhone才提供GPS。第一代iPhone没有内置GPS,目前所有iPod touch设备也没有提供GPS。 第三代iPhone 3G S引入了一个内置的罗盘(通过一个磁强计),并提供了用于支持它的Core Location API。 1.3.5 振动支持和接近传感器 只有iPhone提供了振动支持,振动可以为很多游戏提供触觉反馈。iPod touch没有提供振动支持,也没有包括接近传感器。在打手机期间,将iPhone靠近耳朵时,接近传感器会将屏幕变成空白。在SDK 3.0之前,理论上不能在应用程序中使用接近传感器,不过App Store中已经有很多软件使用了接近传感器,其中最突出的是移动Google应用程序(http://itunes.com/apps/googlemobileapp)。从3.0版开始,通过UIDevice类可以直接访问接近传感器的当前状态。 1.3.6 处理器速度 第二代iPod touch提供了一个532 MHz的处理器。iPod touch提供的处理能力一直是iPhone线上最高的,直到被iPhone 3G S超越,后者的处理器报告频率可达600 MHz。既要在较旧、较慢的设备上测试软件,也要在较新的设备上测试软件。应用程序的响应时间将受到所在设备的影响。 如果应用程序在较旧的平台上的响应时间不符合要求,那么要考虑提高效率。目前,App Store尚不允许从发布基站(distribution base)中排除第一代iPhone。 1.3.7 OpenGL ES OpenGL ES为2D和3D图形开发提供免版税的跨平台API。它被包括在iPhone SDK中。并不是所有型号的iPhone都提供相同的OpenGL ES支持。iPhone 3G S和更新的型号同时支持OpenGL ES 2.0和1.1。较早的型号,包括2G和3G iPhone,以及第一代和第二代iPod touch只运行OpenGL ES 1.1。2.0 API提供更好的明暗和文本支持,从而提供更高质量的图形。 为了让所有iPhone都能使用,应该只使用1.1来开发图形。利用2.0 API的应用程序只能在iPhone 3G S和其他将来的型号上使用。