业精于勤,荒于嬉
全部博文(763)
分类: C/C++
2009-12-18 12:54:53
iPhone/iTouch开发技术介绍
1、iPhone系统介绍
“iPhone是一款革命性的、不可思议的产品,比市场上的其他任何移动电话整整领先了五年,”苹果公司首席执行官 HYPERLINK “” 史蒂夫·乔布斯如是说,“手指是我们与生俱来的终极定点设备,而iPhone利用它们创造了自鼠标以来最具创新意义的用户界面。”
在这里,我给大家介绍一个全新的手持系统——iPhone。2007年1月 9 日苹果公司今推出了小巧、轻盈的手持设备iPhone,将创新的移动电话、可触摸宽屏iPod以及具有桌面级电子邮件、网页浏览、搜索和地图功能的突破性因特网通信设备这三种产品完美地融为一体。除了这些强大的功能外,iPhone引入了许多具有革命新的创新元素:多点触摸和虚拟键盘,iPhone上提供多达20种虚拟键盘提供用户方便快捷输入。
在很多场合下,iPhone和iTouch这两个词语总是被一起提及,为了后面叙述的方便,我先厘清一下两者的区别。iTouch和iPhone都是使用iPhone OS操作系统,两者基本上没有区别,唯一不同的是iTouch没有GSM这个硬件模块,也就是说,iTouch不具备打电话功能,只能通过内置的WIFI模块上网。除了这些,还有一些细微的差别:像Touch没有外置喇叭
iPhone硬件特性
屏幕尺寸/分辨率:3.5吋/320×480pixels; 存储空间:4GB至8GB两种容量版;
CPU类型: ARM 412 MHZ; 物理内存: 116M;(不支持自扩展)
内置摄像头: 200万像素; USB:2.0接口;
GSM模块: 支持频率850/900/1800/1900MHz ,网络连接:GPRS/EDGE;
蓝牙:2.0 WIFI:802.11b/g ;
内置4种传感器:一个加速计、一个触摸传感器、一个光线感应器和一个接近性传感器
iPhone上这么多硬件设备为其炫丽的功能提供了强大的基础:利用加速器传感器,iPhone能够检测出用户何时把它由纵向旋转为横向,是否在做甩,摇等动作。利用光线传感器,根据周围环境光线强度,户内or户外,自动调节显示亮度,提供最舒适的视觉效果;利用接近性传感器,可以检测出用户何时把iPhone提升至耳朵附近,并立即关闭显示屏,以节省电源和防止触碰,直至iPhone被移开。
iPhone 系统软件特性
OS:iPhoneOS;iPhone OS是Apple 台式机的操作系统 Mac OSX 嵌入式系统版;有点类似于windows和wince之间的关系。iPhone OS的内核是darwin(达尔文),darwin内核是从FreeBSD移植过来,支持多进程,多线程,Posix 标准;iPhone OS 的图形系统是Cocoa Touch,Cocoa Touch 提供了图形2D/3D、窗口,web、动画等功能。
iPhone自带一些非常优秀的软件应用:Safari:一款非常优秀的手持设备浏览器;Phone:电话软件.Visual Voicemail:可视语音信箱;SMS:短信工具;Google Map:google地图.
2、开发环境介绍
iPhone SDK开发库框架介绍
Cocoa Touch :是面向用户的编程接口,包括UIKit 和 Foundation 两部分。UIKit 提供了进程,线程管理,事件、窗口、视图管理。Foundation 提供基本的数据结构,有点类似于STL,GLIB功能。Cocoa 提供的接口全部是Objective-C方式的接口。
Media:该层提供了更底层的图形和语音,视频方面接口。如OpenGL-ES, OpenAL,动画,QuartzCore,Video支持H.264,mp4,3gp,quicktime等压缩编码。音频支持AAC,ALAC、A-law、IMA/ADPCM (IMA4)、PCM、μ-law。另外还支持PDF,HTML格式图形显示。这层接口有些是用Objective-C方式提供,有些是使用C语言接口方式提供。
Core Services:次层提供的功能和Cocoa touch的Foundation 功能比较接近,不同的是Core Services 提供的接口是C语言接口,并且更接近系统底层,效率更高。RAW socket,sqlite,xml文件读写等。
Core OS:提供接近操作系统层的接口,C语言接口。如memory, threads, file system, network。
开发工具Xcode介绍
下载安装完iPhone SDK,你的机器上便有一个Xcode应用程序,XCode是一个IDE,功能强大,几乎可以和Windows 下 的 VC相媲美。
支持语法高亮,在线帮助,工程管理,断点调试,单步跟踪等功能。
并且XCode 和 其他工具 如 iPhone 模拟器,内存检查工具Instruments, 性能分析工具Shark无缝结合的非常好。 下面给出几张截图。
模拟器(iPhone Simulator)
iPhone 模拟器能模拟大多数场景,并且和XCode 集成的非常好,可以在Xcode中断点调试,查看内存泄露问题。但是和它和真机设备环境还是有一些区别:
不能模拟GPRS或EDGE无线上网方式;
不能模拟多点接触操作;
不能模拟OpenGL-ES;
模拟器的CPU和内存,网络都是用PC机的,相对比较充裕,真正设备上相对比较恶劣,所以在模拟器上跑得很流畅的应用,在真机设备上可能性能低下。
运行库不完全一直,在模拟器上能运行的应用有可能运行不起来。可能某个函数在模拟器上不支持。
3、如何开发自己的iPhone 应用
Apple公司给用户提供了一个iPhone SDK,开发用户自己的应用程序。有两种iPhone应用开发:一是Web Application 开发,是基于iphone Safari浏览器开发网页应用,本文不介绍Web Application开发方面内容;一是Native Applications。这篇文章只介绍Native Applications开发技术。
关于开发Native Applications,又可以分成官方和非官方两种不同的开发方式:
官方(official):Official的开发方式是Apple公司认可的开发方式,通过改方式开发出来的应用可以申请放在Apple的AppStore上发布。这种开发方式是使用Apple 公司免费发布的iPhone SDK 2.x ,只能在Mac OSX 10.5.4 ( or later)操作系统上进行编码和编译,SDK 带有iPhone 的模拟器和单步调试环境;这种方式只能开发iPhone OS 2.x 的应用,可以开发出多线程应用。
非官方的(unofficial/or hacked): unofficial 是指有第三方hacker 通过反编译手段,导出一些api 头文件,使用hacker提供的编译工具(在window,linux,mac上都可以安装开发环境),该环境没有调试环境。但是通过这种方式比用官方工具能开发出更强的应用。因为这些导出的api有相当一部分是Apple 不公开的Api接口。并且这种方法能开发iPhone OS 2.x 和 iPhone OS 1.x的应用。可以开发出多线程应用,多进程应用
由上面比较可以看出,unofficial和official是两种差别很大的开发环境,无法做到同一份代码在这两种方法下都能编译,因为他们头文件都不一样。Unofficial 好处是 被官方认可,Apple 会保证后续系统升级的兼容性,缺点是但是有很多限制;unofficial 好处是功能强大,限制比较少,缺点是无法保证兼容性,并且是被官方禁止的。
本文只介绍official 开发方式。下面介绍如何搭建iPhone开发环境,编译自己的iPhone 程序。
首先需要一个Mac OSX 10.5.4 or later 的操作系统。Mac可以在 Apple电脑和普通PC上安装。
一台iPhone或iTouch是不可缺少的,虽然SDK带有模拟器,但是模拟的环境和真实环境还是有很大差别的。
下载安装iPhone SDK (Xcode),目前最新的是2.1,该SDK是免费的。
申请license,这个不是免费,有99美元和299美元两种license.
熟悉Objective-C 语言,iPhone 的界面库是使用Objective-C语言写的,熟悉Objective-C语法是必修之路。
写代码,编译,调试,发布。
4、iPhone 应用设计原则
iPhone全新的开发平台,在归类上它属于嵌入式开发,和许多其他嵌入式开发遵循相同的原则,同时,它又有自己的特色。
1、One Application at a Time:在同一时刻只能有一个应用运行。这条规则是Apple公司给开发人员的一个紧箍咒。实际上,iPhone OS 是一个支持多进程的系统。当你的iPhone开机后,至少有10个以上的进程在后台运行。但是Apple给开发人员这个限制也是无奈的选择。原因是 iPhone物理内存虽然有116M,但是iPhone OS不支持虚拟内存,也就是说,无法像高级操作系统那样通过存储设备换取大内存。另外,iPhone 一开机,就有10多个系统应用在运行,这时候留给用户可以用的内存空间只有4-5M可以用。这么少的内存,加上iPhone应用都是图形应用,根本无法同时分给几个进程。
2、One Windows at a Time:在同一时刻只有一个窗口,iPhone是一个手持设备,遵循便捷的输入输出,不能像PC上应用那样,多窗口叠加拖放。基本上,iPhone每个界面都是全屏显示。
3、Reducing Memory Use:这是开发人员在开发过程中时时刻刻要挂在心里的一条原则。正如第一条所述。iPhone系统中内存是极度缺乏。尽量少用长期占用内存,用完马上释放。
4、Reducing Power Consumption:减少电源消耗。iPhone 耗电量大是iPhone几大缺点之一。网络,电话,影视频,3D这些调用都是导致耗电量大的原因,如果你的应用中有这些调用,那你就要考虑如果省着点用,如减少网络流量等方法。
5、Fast Launch, quickly Out:这个是要求用户软件应当有良好的用户体验感,启动快,退出快。不能长时间对用户操作没有响应。
5、应用程序结构介绍
1、应用程序生命周期和事件循环
EMBED Photoshop.Image.8 \s
应用程序从点击桌面快捷方式(User taps application icon)开始,就被系统加载到内存中,在所谓的sandBox(沙箱)环境运行,成为一个进程。经过一系列初始化(NSApplicationMain(),ApplicationDidFinishLaunching:),开始在主循环(mainLoop)中接收处理事件(定时器,用户点击,网络事件,内存不够系统事件,电量不够系统事件)。当用户按Home按键(User presses Home button), 应用程序将退出,释放自己的资源。
2、沙箱
Application Sandbox 是 提供给应用程序一个限制的运行环境。对应用的许多操作做了授权限制。如文件读写,应用程序只能访问某些限定目录下的文件,还有网络和其他硬件设备的访问控制都做了限定。
应用程序的目录限定如下,MyApp.app目录下是只读,Documents有读写权限、Library只读、tmp可读写。
6、UIKit控件介绍
iPhone的开发工具Xcode支持C语言和Objective-C语言,可以混合编译,开发人员可以像在其他平台一样使用C语言写自己的数据结构管理数据。但是如果要创建窗口和控件的话,就得用Objective-C 语法,因为UIKit接口是Objective-C接口。
UIKit是iPhone开发的界面库,提供了丰富的界面元素:
UIWindow:一个应用程序有且只有一个window,window是个容器只能放一个UIView;
UIView:用来显示的区域,UIView是所有其他界面控件的父类。UIView可以作为一个容器,放多个子View;
UIButton:从UIView继承,响应用户点击事件;
UILable:从UIView继承,静态只读文本标签;
UITextField: 从UIView继承,单行文本输入控件。
UITextView:多行文本输入
UIWebView:显示Html网页控件。
UINavigationBar:导航条;
UITabBar:工具条;
UIAlertSheet/UIAlertView:模态对话框
UISwitchCtrl:相当与RadioBox,2选一。
UISegmentCtrl:多选一
UITableView:显示列表
UISlider:表示进度或百分比
UIProgressView:表示进度。。
UIPickerView:有点例似于Combox功能,多选一
7、总结
iPhone OS 提供了非常强大的开发平台,有许多强大的系统调用让你能够写出炫丽的应用。从某种角度来看,iPhone OS已经不是一个嵌入式操作系统,它几乎有着桌面操作系统所有的功能。同时它又有诸多限制,内存不够,CPU频率过低,无法后台运行。如何在有限的资源上充分利用这些系统特性,就是考验开发人员系统设计能力和编程功底了。
8、资源。
1、Apple官方开发网站,提供SDK下载和开发文档,sample
HYPERLINK “http://developer.apple.com/” http://developer.apple.com/
2、早期比较知名的一个网站,有许多关于official和unofficial的开发讨论
HYPERLINK “http://www.iphonedevdocs.com/forum/” http://www.iphonedevdocs.com/forum/
3、大部分网站关于unofficial开发比较多,这个网站有比较多的offical sdk开发讨论
HYPERLINK “http://www.iphonedevsdk.com” http://www.iphonedevsdk.com
4、个代码仓库,搜搜吧,有许多开源的iphone的project。
HYPERLINK “”