翻译自Xamarin官方文档《Creating Mobile Apps with Xamarin.Forms》
近年来个人电脑产业尽力了巨大的变化。当然台式机仍然存在,它们在编程,写作,电子表格,数据跟踪等需要键盘和大屏幕的任务中仍然必不可少。但是很多个人计算技术出现在更小的设备上,尤其是在快速信息,媒体消费和社交网络方面。平板和智能手机与台式机在根本上的不同之处在于它们主要基于触摸,而键盘只有在需要的时候才会弹出来的用户交互模型。
移动设备的现状
尽管移动市场有快速改变的可能,但是目前主要被两种手机和平板平台所支配:
- 包括各种iPhone和iPad在内的Apple家族,它们全部运行iOS操作系统。
- 运行在各种各样的手机和平板上的由谷歌开发的基于Linux内核的Android操作系统。
移动市场如何被这两个巨人瓜分取决于如何看待它们:目前在使用的Android设备更多,但是iPhone和iPad用户在使用它们的设备上投入了更多的时间。
还存在第三种移动开发平台,它没有iOS和Android那样流行,但是牵涉到一家在个人电脑产业方面有辉煌历史的公司:
- 微软的Windows Phone和Windows 10 Mobile平台。
近年来,由于微软已经将自家的手机,平板和桌面平台的API合并,使得它的平台成为更加吸引人的另一种选择。Windows 8.1和Windows Phone 8.1都是基于一个以Mcrosoft .NET为基础的被称为Windows Runtime(WinRT)的统一API。这个统一的API意味着面向台式机,笔记本,平板和手机的应用程序可以共享很多他们自身的代码。
更加具有吸引力的是Windows通用平台(UWP),一个构成Windows 10和Windows 10 Mobile基础的Windows Runtime版本。一个单一的UWP应用程序可以面向从台式机到手机的所有设备类型。
对于软件开发人员,最佳的策略是面向多个平台。但是那并不容易,主要存在四个大的障碍:
问题1:不同的用户交互模型
三个平台包含相似的方法来呈现图形用户界面和通过多点触控实现与设备的交互,但是在细节上他们有很多的不同点。每个平台都有不同的方式在应用和页面之间进行切换过渡,不同的数据显示协议,不同的方法调用和显示菜单,甚至不同的触摸方法。
特定平台上的用户会习惯于不同的与应用程序交互的方式,同时希望未来的应用程序也可以适用于这种方式。每个平台具有与自身相关联的文化,而这些约定俗称的规定会影响开发者。
问题2:不同的开发环境
如今的程序员习惯于在一个成熟的集成开发环境(IDE)上进行开发工作。这些IDE存在于三个平台中,但是很显然他们是不同的:
- 进行iOS开发,使用Mac上的Xcode。
- 进行Android开发,使用各种平台上的Android Studio。
- 进行Windows开发,使用PC上的Visual Studio。
问题3:不同的编程接口
这三个平台基于具有不同API的操作系统。在很多情况下,三个平台具有相似的用户界面类型但是名字是不同的。
例如,三个平台都有一个让用户切换布尔值的控件:
- 在iPhone或iPad上,是一种叫做UISwitch的“view”。
- 在Android设备上,是一种叫做Switch的“widget”。
- 在Windows Runtime API中,是一种叫做ToggleSwitch的“control”。
当然,它们在编程接口中的差别要远大于名字上的差别。
问题4:不同的编程语言
开发者在开发这三个平台的时候有一定的灵活性去选择一种编程语言,但是,通常每个平台会非常适用于用一种特定的编程语言:
- Objective-C用来开发iPhone和iPad
- Java用来开发Android设备
- C#用来开发Windows
Objective-C,Java和C#在排序上是表亲关系,因为它们都是派生自C语言的面向对象的语言,但是它们已经变成关系相当遥远的远房表亲。
因此,一家想要面向多平台的公司可能需要雇佣三个不同的编程团队,每个团队具有一种特定语言和API方面的技能和专长。
这其中的语言问题尤其让人烦恼,但它是最有诱惑力去解决的问题:如果你能用同样的语言来开发这三个平台,你就能至少在平台之间共享一些代码。这些共享的代码可能不会涉及到用户界面,因为每个平台有不同的API,但是程序中很可能会有完全不触及用户界面的应用代码。
拥有一种适用于三个平台的语言一定会很方便。但是它将会是哪种语言呢?