2009年06月2日

IPhone开发体验

作者 非鱼

激情的力量真是不可估量。从5月27号拿到《IPhone开发基础教程》,后面用了两天的假期写了两个程序,先是一个普通的数据库阅读程序(被威锋论坛删了)。为了找到一个合适的程序结构,测试了几种不同的方式,最后选定了Navigation方式。

每个IPhone程序拥有一个Window和多个View,Windows可以理解为就是这个屏幕,Window上必须要放一个View才能显示内容给用户。程序启动的时候调用一个程序级的Delegate,打开这个Window并加载一个View。

一个View由一个ViewController来实现其功能代码,而View的界面如果你愿意的话也可以完全用代码来生成,每个控件都是View,都可以在初始化的时候确定自己的起始位置和大小,用代码来生成和显示也没问题,但是通常更合适的方式是用一个xib文件,该文件可以使用Interface Builder来构造,就像VB一样拖放控件。

所有需要同控件调用的方法,比如需要指定给按钮的方法,或者文本框里的事件需要执行的函数等等,都需要先在ViewController类里面声明为IBAction返回值的方法,然后通过在Interface Builder里面按住控件的事件名拖到Controller所属的First Owner上然后选定那个方法来建立关联。

所有需要用代码来修改其属性或调用其方法的控件,比如要启用禁用的按钮,要取值的文本框,都需要先在ViewController类里面声明IBOutlet类型的变量,然后按住Control键把First owner拖到控件上再选这个变量来给变量和文本框建立关联,然后你在代码中操作的这个变量,就是实际的这个文本框了。

《IPhone开发基础教程》这本书作为入门非常不错,可是它缺少很多高级内容,不能作为参考书,这个时候就需要这一本了《The iPhone Developer’s Cookbook-Building Applications with the iPhone SDK》,里面有许多高级用法,甚至SDK文档里没有提到过的隐藏内容。

开发过程中遇到了相当多的问题,幸亏还有Google。即使如此,仍然走了相当多的弯路。比如为了在Navigation顶部的导航栏右边加两个按钮,花了半天的时间,最后还是放弃了。始终没有办法做到彩信软件SwirlyMMS阅读界面上那个按钮效果,一开始用自定义View,放入两个按钮,再把这个View指定为rightButtonItem的CustomView,按钮是成功的放上去了,但是按钮是平板样式,跟左边的工具栏按钮的样式大相径庭。后来使用一个Toolbar,加上按钮,按钮的样式倒是正常了,但是这个Toolbar怎么也无法放到rightButtonItem那个位置,一放上去,Toolbar就占到最左边,而不是最右边,最后只能把Toolbar放到Title的位置,结果就无法显示Title了,而且Toolbar的顶部边框跟NavigationBar的边框不一样,有一条很明显的线,cookbook的教程里的图片也有这个问题。最后还是放弃了,在最下面又加了一条单独的Toolbar。还有为了播放声音,也搞了几个小时,用SoundServices库代码很简单,结果播放没声音,就是出现一点点的噪音,后来换了AVAudio库,还是只放一点点噪音。还以为是声音文件的问题,结果换了Windows自带的声音进去也不行。最后才发现是因为声音播放的代码是非独占的,刚刚开始播放就走到了下面一行release上,结果就停止了。改成全局变量搞定。

这个release在Object C里面是个很头疼的问题,当我程序出现了一个EXC_BAD_ACCESS的错误的时候,根本无从定位错误的位置,虽然知道是由于过度release造成的,但是要在众多代码中找出哪个变量是不应该release的,着实费了些功夫。

另外,程序比较大(数据库比较大,程序其实是很小的),每次放到真机上测试都要花很多时间,建议开发过程中还是使用一个特殊的数据库,弄小一点,发布的时候再换成正常的。大部分情况下用模拟器测试就够了,但是,模拟器不能发声,因为我的MAC是虚拟机。

编译出来的程序是个后缀名为.app的文件夹,在Mac下会自动识别为程序,双击会提示平台不对,不能运行,但是拿到Windows下就是个普通的文件夹。把这个app目录拖到ITunes上会自动生成一个IPA,但是这个IPA在ITunes里没图标。要做成有图标的,还得手动处理,把这个app目录放到一个Payload目录下,在Payload所在的目录放一个iTunesArtwork的文件,这个文件就是一个jpg图标,文件名改成这个就行,没有后缀。然后把这个文件和Payload目录一起压缩成zip文件,再把zip后缀改成ipa就可以了,双击就会加载到iTunes,点同步就可以安装到手机上。Apple居然不提供一个方便一点的打包工具。

基本上感受就是这些了,连续开发了几天,也在威锋上连续发布了几个大版本,程序还算比较受欢迎,等明天去申请个开发者账号,放到程序商店里看看。