Javascript程序员也可以开发iOS原生应用
主要方向是前端的我曾经也想过学学iOS的Object-C或者Android的Java。但是写习惯Javascript这种弱类型的脚本语言,突然去写严谨的C和繁琐的Java变成一件很煎熬的事情。所以这个学习过程就逐渐被搁浅了。
HTML5在移动设备上的普及使得前端程序员开心了。自己的网站稍微改改,使之能够适应移动设备上较小的屏幕,然后再加上几个meta信息,就可以通过iOS上Safari的“添加至主屏幕”功能在桌面上添加一个叫做"Home screen app"的App了。这比学习Object-C => 用XCode开发app => 提交到app store => 等待苹果通过 => 从app store下载应用 这个漫长的过程要来的简单许许多多。而且完全不用看苹果的脸色。我认为这种方式在以后将会越来越流行。
但是HTML5创建的Home screen app有几个不足之处:
- 无法调用很多系统资源 (虽然现在某些接口可以提供地理位置调用,重力传感器信息调用,但比起原生程序来说还是太少了)
- 无法控制设备旋转,所以必须要让网站适合设备竖看和横看
- 虽然HTML5可以实现离线浏览,但是操作起来比较复杂
- 无法通过app store来推广
我认为HTML和Javascript这些技术在未来很长一段时间里面都是很主流的语言,而且应该会得到越来越多的应用(btw,很期待webOS发展壮大啊)。所以国外很多公司就瞄准了这块市场,纷纷开发出使用Javascript技术来写Native App的解决方案。其中比较流行的有 Phonegap和 Titanium。
Phonegap是提供一个webview(浏览器界面),使得你可以在里面载入自己的HTML文件,执行JS程序等。然后Phonegap提供比Safari更多的接口,让你可以调用更多的系统资源。这样,Phonegap就有非常优秀的跨平台性。但是由于界面是用HTML绘制的,所以运行效率上会稍微差点(我本人无法接受)。我就不多讲了,因为我也没仔细研究过。
而Titanium声称的Native,指的是用Javascript调用接口来生成原生的界面。程序具体的运行逻辑还是使用Javascript来实现。因为有太多的Native things,所以Titanium的某些接口只能在iOS上用,另外有一些只能在Android上用。有点违背“write once, run anywhere"的思想。不过如果写好一个平台的app,再迁移到其他平台还是比较容易的。
我本人比较认同Titanium的思路。界面用Object-C调用系统UI来创建,保证了界面的流畅程度。我在iPhone上安装了Titanium的Kichensink (Titanium的各种接口演示程序) 。其流畅程度的确跟Object-C开发出来的程序在一个等级上。各种动画十分流畅。然后其他部分用我们熟悉的Javascript来实现。官方提供的接口足以满足绝大部分需求(当然开发大型的游戏是比较不现实的)。
我尝试的第一个应用是做一个匿名随机聊天的app(对,EndTalk的iOS客户端)。界面用的是类似iOS上短信对话框的界面。然后通过Socket.IO与服务端的NodeJS通信。支持文字与图片。 这个需求对一个Object-C程序员来说还是挺多工作量的,但是在Titanium的帮助下,我用了一个晚上了解Titanium,另一个晚上来写app。就已经实现了主要功能。而且在真机和模拟器之间测试通过。
另外,虽然用TItanium来绘制界面是件挺简单的事情。但是要绘制一些复杂一点的界面就有点力不从心了。不过还好Titanium推出了一个Marketplace,允许Object-C开发者为Titanium开发各种模块,提供给Javascript来调用。比如我用的那个短信界面就是一个免费的模块。哈哈,这样就可以跟其他Object-C开发者合作,开发一些应用了。大部分事情用Javascript来做,JS做不了的,就开发一个Object-C写的模块,JS调用就是了。
虽然以前那种随便开发个app就可以在app store上赚很多钱的时代已经过去。但是越来越多的iOS客户端需求仍然得不到满足,所以目前Object-C开发者的工资都很高,很高。但是绝大部分的各种客户端都可以使用Titanium来做。比如微博客户端、B2C网站客户端、淘宝客户端、聊天软件客户端、电子图书、电子阅读器等等。
所以,前端开发者们也可以很快速的入手iOS App开发,而且开发效率绝对比Object-C开发者快! 人力成本降低,在当前的市场中会很有竞争力。
Javascript的应用环境其实非常多。稍微列举一下吧:网页、WebOS App、Titanium开发、Asp.NET中的JScript也算是吧、Windows的JScript脚本、Mac的Dashboard Widget、Windows的桌面小工具、最重要的:服务端的NodeJS! 欢迎补充。
0条评论 到PHP.JS.CN上围观原文