同一个应用的安卓版本和iOS版本开发杂谈

2016-05-13

同一个应用的安卓版本和iOS版本开发杂谈

我前段时间帮朋友做了一个应用,当然说的更实在一点可以时候就是做外包应用,包括安卓版本和iOS版本。现在想谈一谈感想和总结。

从1月份开始正式开发,最终在5月底完成所有交互,前后算起来就5个月的时间,当然中间有断断续续的开发和沟通。总的来说,这个时间超出了我的预期,所以总得来说我觉得价格有点不合适,稍微便宜了一些。但是因为这是我第一次做这种事情,而且也总体也还在我可接受的范围内,所以就当做一个经验了。个人做外包开发 不能低估工作量和沟通时间。越不正式的外包(朋友间的)需要的沟通和反复修改的情况会越多。千万不要低估这些情况。

Android版本开发

我是先开发安卓版本的,原因当然是安卓开发调试方便,修改方便,还有就是我比较熟悉Android开发。一开始朋友想先开发iPhone版本,我说这个调试不方便,说服他先开发安卓版本,我觉得我这个决策是对的。我的开发主要时间都是周末或者平时的空闲时间。了解了需求之后,安卓的第一个包含主要功能的初级版本一个月之后就出来了。然后我就打了个包给朋友用。当然会有很多问题,然后反复沟通和修改,几个星期之后,主要版本出来了。这时候已经是2月多了,我记得是在我放春节假之前改了改了一个版本给他,这个版本做了一些小细节修改和bug修复。由于朋友他没有测试人员,只能靠他自己测试,我自己测试得也不多,开始难免会有些bug,不过他会集中反馈,然后我集中修改,年后回来又改了一两个版本,3月多终于基本完成安卓版本的开发。总的来说,安卓版本开发是方便版本发布和调试。代码的话,程序架构我一开始就基本想好,程序不复杂,界面层和model层我都有比较好的重用,开源库也不少,我自己又对安卓很熟悉,没有遇到特别的难点,总体开发比较顺利。

iPhone版本的开发

春节的时候,由于没什么特别的事可做,我就做了一些iOS版本准备开发开发工作和基本架构搭建。由于有了Android版本的经验,iOS的基本架构就是对Android版本的基本架构的迁移。特别是model层,几乎是一一对应的。但是iOS版本的界面缺不是那么好做。因为这个应用的需求有些部分比较古怪,我觉得在iOS界面上不太好做。当然,主要原因还是我对iOS开发不算是特别精通,特别是UI层,经验不算很丰富。例如说有一个功能是这样的:主页面要根据上下滑动列表有将导航条收起和展开,还有几个tab页面还可以滑动切换。这两个功能分开做都不难,但是集中在一个页面都要支持这两个功能,就不好做了。最终我暂时只做了滑动切换tab。有了Android开发的经验,iOS开发做起来比较快,但是iOS和Android界面开发差异还是比较大,然后iOS界面开发代码量要比Android的要少,并且更容易重用。例如iOS的ViewController很容易重用,但是Android的Activity就比较难重用,所以Android开发的重复代码要多一些,我觉得这只要是由于Activity的机制造成的。

iOS的开发是比较顺畅,但是调试就麻烦多了。由于朋友没有开发账号,我帮他申请了一个,然后我做了开发,怎么给他安装使用是个大问题。我在我们公司有企业版证书,安装调试很方便,但是没有企业版开发证书就相当麻烦了。你说把他的手机序列号加入开发证书,然后给他安装,我觉得这也很麻烦。所以我最终采用的是:打包应用上传到iTunesconnect,然后通过内部测试(Testflight)发给他安装。之前没怎么做过这种方式,我花了很多时间才最终走通整个流程。最大的一个坑是,我上传了ipa包到iTunesconnect,但是它死活不再内部测试哪里显示出来,我开始以为包还在处理中,等了两天还不行,我又上传了一个,还是不行,但是这次有提示缺少出口规格证明,然后晚上找了不少资料,才知道要在info.plist文件里加一个字段,说明没有使用加密功能。最终才走通整个流程,这里耗费我很多时间和精力,就算是一个经验吧。

总结

第一次将一个应用的安卓版本和iOS版本完整的做了一遍,虽然我以前也做过同一个应用的安卓版和iOS版,但是不是完成从头到尾参与。还有早在2011年我就从一个安卓应用的代码开发,到应用上架商店,一条龙下来我都完整经历过,但是iOS应用的完整一条龙这是第一次。从代码开发,注册开发者账号,下载证书,打包上传,应用测试,上架应用,真的是每一个环节都是自己亲身经历的,所以收获不少。总结如下:

开发流程上,Android开发要完胜iOS开发。Android开发是用Java语言开发,然后Android是开源的,Java也是跨平台的,都有很多开源库支持,很多功能可能Android本身不支持,但是hack起来比较容易。Java做架构也比较容易,有很多开源库支持,现在Android方面的开源库也越来越多,质量也越来越好。对于合作开发或者外包,Android开发有很大优势,因为因为分发很容易,随意就可以打包,安装,日志跟踪与收集非常方便。这点真的很赞。反观iOS,Objective-C基本上是只能限制于Mac OS的平台,iOS也是闭源的。要给别人安装调试那真是比较难:要先有开发者证书,要先把对方的设备的序列号登记入证书中。总之各种麻烦。

代码重用上,iOS更胜一筹。iOS的界面开发挺不错的,而且iOS应用整体性能要比Android要好,整体流畅性比较好(这是我朋友的直观感受)。我看整体代码,iOS端确实比Android端代码重用比较容易,特别是界面模块的代码,iOS的界面代码具有很多的可重用性,Android则不太行。不过鉴于Android端界面开发支持适配更多的设备,某些时候Android的界面开发要比iOS的界面开发便捷很多。另外Android端的动画开发现在也越来越方便,越来越接近iOS的动画开发了。

Category: 技术 Tagged: Android开发 iOS开发 外包

Comments