我就是一名任职于HappyFunCorp的软件工程师,最近刚刚为iOS和Android平台编写了一些程序,因此让我来说说在我进行编程的过程中,使用这两个平台的感受。
首先介绍一下背景:在此之前我曾经编写过许多Android和iOS的应用,有个人应用也有专业应用。在编写这些应用时,我不得不提到一款扩平台的开发工具Xamarin。如果你对于C#很熟悉,而不太了解Java和Objective-C语言,那么这款跨平台的开发工具将会是你开发应用的首选工具。
开发环境
你当然可以像往常一样,通过文本文件写代码,不过如果你使用整合开发环境,那么编程无疑会变得更高效。
苹果的开发环境是Xcode,在Xcode上工作是一件十分愉悦的事情。它反应迅速,功能强大,同时又十分顺手。它的调试器可以做到无缝工作,同时反应十分快速。
而Android平台呢?目前的开发环境是Eclipse,由Android外挂程序调试,表现相当糟糕。迟缓,拖沓,同时操作又违背常理,复杂的一团糟,与Xcode相差甚远。而更不要提Android模拟器了,每次启动都要好几分钟,而其中一半时间都无法连接到Android Debug Bridge。
从目前来看,谷歌也已经意识到了问题,他们正在开发一套全新的Android Studio IDE:
Android Studio目前已经提供了预览版的下载,其中一些功能还没有完成,开发者在使用的过程中会遭遇到许多bug。如果你对于使用这样一款半成品觉得十分不爽,那么或许你可以通过下载ADT Bundle来替代它。
虽然谷歌开始重视开发环境这一点还是值得令开发者欣喜的,不过反应速度还是慢的让人吃惊,要知道,距离我购买第一款Android手机已经过去了四年半,而四年半的时间,开发环境仍然一团糟。
获胜者:iOS 胜出一条街
配置
与苹果的Xcode相比,Android拥有一个清单文件,通过Eclipse可以将你的应用在这个文件中进行存储或编辑。当应用运行出现错误的时候,我还是更希望可以得到更清晰的错误信息。而Android应用的配置明显更简单却更优雅。
获胜者:Android
交互设计
你可能已经猜到,苹果肯定会获得这一轮比拼的胜利。苹果的界面生成器可以快速生成美观的用户界面。不过它也存在着一个问题,随着我试用界面生成器的时间越长,我就越不喜欢它。虽然它对于简化有着很深刻的理解,可是随着时间流逝、应用进化,这些简化看起来却更复杂更混乱,而我同样不喜欢苹果在一年前为Storyboard添加的多屏幕功能。
Android理论上来说拥有一套相同的视效开发工具,在实际使用中只要你编写XML文件,那么在编写结束之后,它会自动适应不同屏幕尺寸并完成布局。
在这一环节中,竞争程度要比你想象的更激烈,尽管我认为两个系统都有着自己的优势,不过我还是认为iOS胜出。首先,它更加简洁:只有三种屏幕尺寸需要适配,而Android则明显要复杂许多。第二,默认的iOS视觉元素要比Android的好看太多了。
获胜者:iOS
语言
Android应用的语言是Java,而iOS的应用语言则为Objective-C。在编程的最开始,我选择使用Java,而没有选择Objective-C,因为当时对于Java更熟悉。但是我很快就发现自己越来越喜欢Objective-C。它比Java更易用也更简洁。它有category,可是Java没有;它有block,可是Java没有。
获胜者:iOS
API
Android和iOS都为开发者提供了海量的软件资料库,而笼统的说,这些资料库也十分相似:这些API中有一些提供了手机的使用功能,有些提供了网络连接功能,这些部分大多归于控制器来完成。对于iOS ViewController来说,它的作用等同于Android Activity。
但iOS却具有Android所没有的一些框架和功能。Android并没有iOS强劲的Core Data框架。这个框架使用十分方便,而且设计也相当简洁。
获胜者:iOS
网络
网络连接通常是在后台运行的,因此它们不会对应用本身造成太多影响。Android提供了AsyncTask,用于检测用户当前是否在线。而iOS也提供了相应的功能,不过它们因为级别还很低,因此表现还不是很让人满意。
不过你可以通过许多开源的资料库让这部分变得更加简单。我通过使用AFNetworking,可以让连接变得十分简单。但这个工具却不支持Android,因为Java不能完成block操作。
获胜者:Android的第一方获胜,但iOS的第三方资料库也相当出色
最终获胜者是...
虽然Android在一些地方有其独特的优势,不过总体来说,在为iOS编写出色的应用还是要比Android简单许多。而考虑到iOS用户往往拥有着更健康的付费使用习惯,开发者也很自然的会选择优先为iOS开发应用。新的Android Studio IDE可能会提升一些Android的开发体验,不过还远远不够。