前一段时间用业余时间熟悉了下iOS开发,感受了下移动开发的另一面。
我同时参考了好几个资料,先看的是CodeSchool上iOS Path的Try Objective-C和Try iOS,对于基本的语言和基本的在iOS上的应用熟悉了下,然后阅读《iOS开发指南:从零基础到App Store上架》来快速上手,这个过程中熟悉了Storyboard、常见的UI控件、表视图、导航设计和常用的设计模式。最后跟着@MengTo的 design+code 完整地实现了一个客户端,学习了iOS的一些设计概念,CocoaPods以及开源库的使用,Sketch的使用等等。
对于一个陌生领域的开发者,接触到一个新的平台的时候,急需知道的是支撑一个应用的基本框架是什么,简单来说,就是应用的界面构成,UI和code的结合,事件处理,网络和常见问题的处理模式等等。就那我来说,我第一直觉就是想知道界面如何构成,因为这样是最直观并有成就感的,我当时的困惑是为什么 Try iOS 里面在代码里搞搞,界面就出来了,而书上的却一直使用拖拽,后来看到 “代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧”,才清楚了一些。再看看Android,情况好像好一些,因为基本上所有的教程都是从建立Activity并setContentView来描述界面的,不会有不清楚的地方,Android也可以用代码来控制UI,但是跟iOS一样不太好理解。
从开发环境来说,Xcode的使用体验已经非常良好了,UI很棒很简洁,该有的都有,自动补全让我很长时间不清楚Objective-C的函数到底是怎么构成的。。。不满的是在13寸rmbp上拖拽产生IBOutlet的时候屏幕空间明显不够用。同时也试用了AppCode,感觉一般。Android IDE是基于eclipse的,eclipse的界面实在是让人受不了,不过很成熟,遇到问题解决起来也快。我的个人项目已经切换到Android Studio了,界面上感觉良好,新的构建系统使得引用开源库十分方便,以后也会是方向。自动补全,重构,缩进,快速查找,配色,git支持等等两个开发环境都能满足日常需要,没有太多要吐槽的。
从布局组织上来说,Android使用的是xml,日常的界面都是在xml文件上进行更改,其中各种具体的属性可以精确控制各种组件,但是图形界面的预览功能还不是很成熟,问题多多,所以用的比较少。一般来说,一个Activity对应一个xml布局,布局中的对象可以指定一个id(类似于iOS的Identifier),在Activity的onCreate中通过findViewById()来获取布局中个个组件的对象。而iOS的界面组织可以通过一个Storyboard文件来完成,跟Android的Activity对应的概念是ViewController,在Storyboard可以拖一个ViewController出来形成一个界面,在上面添加UI组件,他可以有一个类继承ViewController作为这个界面的控制类,做一些响应UI事件的工作等等。
从开源库的使用来说,CocoaPods已经很不错了,Eclipse引用库类似,但是如果多个项目包含同名的库的话很麻烦。Android Studio很好地解决了这个问题。总体来说,开源库的引用方式也比较成熟了,而且各种库在github上也是数不胜数,庞大的开发者人群给我们贡献了很多优秀的项目,搞Android的点这里,搞iOS的点这里。
从部署的角度来说,各有利弊。我目前还没有在App Store上发布过作品,不过对于苹果的审核有所耳闻,苹果对于品牌形象维护比较严格,可能存在的违规的都应尽量避免,很多开发者叫苦不迭,不过这也同时提高了App Store的应用质量。Google Play就相当于大杂烩,我的应用 Android Weekly 提交之后没隔几天就成功了,一般晚上更新,第二天早上就可以上线了。不过国内的应用市场真的是参差不齐,审核进度不一,提交内容不一,而且像豌豆荚还需要其他应用市场的详情页,真的是。。。
还有一些相同的地方,比如说列表控件,ListView对应UITableView,ListActivity对应UITableViewController,Adapter对应UITableViewDataSource,ListView.setOnItemClickListener对应UITableViewDelegate中的didSelectRowAtIndexPath。还有页面之间的跳转,Android上是用Context.startActivity(),而iOS是在两个ViewController之间连一条线(Segue),代表从一个页面调到另外一个页面的动作,在需要的时候(比如按钮按下)执行这条线就行了。
如果说,学会iOS需要100天,学会Android需要100天,那么把两者都学会则需要150天就OK了。很多移动设计的概念是相似的,触类旁通。当然,如果你要再深入的话,必须通过不断实现需求来提高,这种需求来源于日常工作,或者日常生活,比如说,用类应用不符合你的使用习惯,你需要做出一个更优秀的App来满足自己。