Xamarin 2.0

之前几个礼拜就收到邀请参与private beta的测试,今天,Xamarin终于发布了他们移动跨平台工具的新版本:Xamarin 2.0。这里略微的介绍下我比较感兴趣的新功能。

  1. 新的IDE:Xamarin Studio 
    Xamarin Studio的前身是MonoDevelop,一款用于在Linux/MacOS/Windows下写C#应用程序的IDE。新版本主要重新设计了UI,之前时不时会有问题的代码完成也有了巨大的改进以及全局搜索等等。官方blog里详细地介绍了这些改进是怎么来的。

    Xamarin Studio
    Xamarin Studio
  2. 在Visual Studio里开发iOS应用
    以前,这也是可行的,但是需要很多的弯路要走,也不是很稳定。这次官方总算加入了这个功能。他们的办法是通过网络与另一台Mac来传输编译调试所需要的信息。这个功能非常实用,因为Visual Studio是套非常强大而且完善的IDE,而且也还有另外一个杀手锏:ReShaper,能极大地增加开发效率。
  3. 新的价格
    新的版本也带来价格的变化。这次加入了有app体积限制的免费版本,降低了独立开发者和企业级的价格。不过对我来说,独立开发者这一档没有Visual Studio支持还是蛮令人扫兴的,毕竟VS上有ReShaper这个神器。

    Xamarin Pricing
    Xamarin Pricing

别的改进还有很多,比如多了个组件商店,可以下载(有的收费)一些组件拿来直接用,避免时间浪费在重复造轮子上。这里有篇非常详细的上手体验介绍,感兴趣的可以去看。

关于跨平台开发,势必会带来的一个问题就是,许多功能其实只是在不同环境/语言下的再实现,那这样的重复造轮子是否值得?或者说有没有这样一种工具或者语言能简化这部分的开发过程?

答案是有的。比如像PhoneGap这样,用你最喜欢的框架写个适合移动设备的web app,然后用各平台自带的浏览器控件包装一下。这样的好处就是只需要写一个web app就能在各个平台上跑,效果也都一样,开发时间又短,但显而易见的主要问题就是性能不好、依赖于当前平台浏览器控件所能支持的系统API以及需要实时在线。

为了解决这些问题,又有了类似像Titanium这类叫做hybrid app的新办法。就是提取出各个平台公共的UI控件以及API,再配合上web app,整合成一个app。好处就是相比之下性能会好一些,应用合适的数据存储方式后并不需要实时在线,但仍然运行起来不是很流畅,不能方便地调用系统API,所能提供的API也不全。

而Xamarin则走了一条不一样的路。上述两种方案的首要问题就是一个移动应用是否真的必须在每个平台上的设计和操作一模一样?他们认为,不需要,每个平台都有其独特的UI,比如像他们CTO Miguel在MIX11会上所示范的:Mono UI

既然如此,那不如在UI层上使用各个平台原生的控件,而业务逻辑层数据层则共用一套代码。这样既做到了拥抱各个平台原生UI的独特之处,又最大程度地共享代码加快开发效率。

此外,他们选择了C#这个非常强大又高效的语言,比如这些杀手级feature:LINQ, Lamda表达式,var匿名类型等(JAVA?!)。再通过P/Invoke实现每个平台上所有API的绑定。由于C#及其虚拟机CLI(Common Language Infrastructure,即.Net的核心部分)加入了ECMA标准,于是他们脱离微软自己实现了这些。当然也不用担心版权纠纷

那最后的性能到底如何呢?试试看像Bastion这样的游戏,或者iCircuit这样的跨平台应用,以及我最爱的云音乐软件Rdio就知道了。:)

所以,如果想要每个平台达到最好的用户体验又要最大程度地共享代码,Xamarin的这套移动开发平台可能是最好的选择。