我是一名网络开发人员,我想把我的网络产品搬到iPhone上。其中一个产品就像谷歌Maps:在手机屏幕上显示地图,您可以拖动或调整地图的大小,并查看我们添加到地图的一些信息。

我知道有一些技术可以让你使用HTML、CSS和Javascript来开发原生iPhone应用。我列举了一些:

Ansca移动 PhoneGap Appcelerator

还有其他类似的产品吗?它们之间有什么区别?我该选哪一个呢?


当前回答

我试过corona。它很好,直到我发现它不支持流式mp3音频。 所以,我就停在这里了。我想如果我真的想成为一名iphone应用程序开发人员,我应该学习obj c。我想做一个应用程序,它有一个电台列表,你点击它们,它就开始播放。

其他回答

你应该学习objective - c和编程原生应用程序。不要依赖这些你以为会让生活更容易的东西。苹果确保最简单的方法就是使用他们的本地工具和语言。对于你的100行javascript,我可以在3行代码中做同样的事情,或者完全不需要代码,这取决于元素。看一些教程——如果你理解javascript,那么objective - c并不难。变通办法很糟糕,苹果可以随时把你的插头拔掉。

在你提到的解决方案中,似乎没有一个能让你直接访问OS 3.0中引入的MapKit框架。

由于谷歌Maps HTML小部件远不如MapKit(参见谷歌Latitude的例子),您可能最好开发一个原生Cocoa触摸应用程序,或者选择一个可以扩展以添加MapKit集成的解决方案。PhoneGap以这种方式是可扩展的(它是开源的,所以默认是),其他一些解决方案可能也是如此。

编辑:Titanium现在支持MapKit

Corona SDK (Ansca Mobile)使用Lua作为其编码语言。有关Lua的更多信息,请参见lua.org。

虽然我们计划进一步增加网页集成和本地ui元素,但我们的重点将倾向于图形密集型应用程序,如游戏开发,而不是基于web的技术。换句话说,我们并不认为人们会完全用Javascript/HTML/CSS来编写Corona应用。

我试过corona。它很好,直到我发现它不支持流式mp3音频。 所以,我就停在这里了。我想如果我真的想成为一名iphone应用程序开发人员,我应该学习obj c。我想做一个应用程序,它有一个电台列表,你点击它们,它就开始播放。

我参加了一门关于Android/iPhone开发的课程,我们花了8周时间在Titanium上(游戏邦注:版本是Titanium 1.4.2,时间是2010年11月左右)。以下是我的经验。

iPhone Android双重目标

尽管API指南声称该功能在Android和iPhone上都可用,但事实并非如此。很多东西根本无法在某个平台上运行。有些事情是不同的。

A lot of the people in the class has done iPhone applications, and they can not make them work on Android without major rewrites. I developed a simple childrens app called Animap (see android market / Appstore in Sweden) and started developing under Windows. Once the Android target was working I opened the project on OS X. It does not show any build stuff for iPhone, just for Android. You need to start a dual target project under OS X. (Ok, I copied the relevant files to a new project). Next problem - the animations does not work on iPhone (they work on Android). The scrolling events does not work the same on the iPhone. (i.e on Android you get the untouch event when user stops scrolling and releases their finger from the screen, this does not happen on the iPhone).

因为在某些地方没有提到这一点,所以基本上需要先在一个平台上进行试错编程,然后再在另一个平台上进行试错编程。我的意思是,让像Animap这样简单的应用在另一个平台上运行需要大约两天的时间。你还需要有if (android) then…或者(iphone)…在你的代码中…

下载和设置

You must follow the instructions to the letter. Do not try to use java 64 bit. It will not compile the KitchenSink 1.4.0 demo application. (1.3 works OK!) You must put files directly on the C drive as long pathnames will make the external program not receiving all command line parameters if they get to long. (Fine for small programs though) 1/3 of the times, the toolchain simply stops and you must press 'launch' again. Then it will probably work... very unreliable. The simulator will not be found on startup and then you must simply kill of adb.exe with Ctrl+Alt+Delete and retry.

网络连接

在wi - fi网络上,有时会断开实时连接,Titanium会崩溃(编译/部署接口) 如果你没有工作的互联网连接,它将无法启动,因为它不能登录到他们的服务器。

API

与此相比,CSS, HTML和jQuery是一件轻松的事情。Titanium类似于任何其他旧的GUI API,你需要为每个按钮/字段等设置一些属性。得到一个错误的字段只是很容易,记住所有需要设置的属性?你在正确的地方用大写字母拼写了吗?(因为这不会被编译器捕获,但如果你幸运地测试了这部分,将被视为运行时错误)

在Titanium中,当你在控件上添加另一个视图或单击GUI中的其他地方时,事情就会简单地中断。

文档

有几个API页面带有Android符号,但只会在您尝试创建控件时返回null。尽管有这些符号,但它们并不只是在Android平台上可用。有时Android被提到不支持某个特定的方法,但整个API就缺失了。

KitchenSink并

演示应用程序。我是否提到过,如果您将它放在Eclipse项目文件夹中,因为路径太长而无法编译?必须放在C盘的根文件夹里。我目前使用的符号链接(mklink /J…)

无证的方法

你必须合理地使用事物作为标签。setText('Hello World')来更改一个可靠的标签,但这根本没有记录。

调试

Titanium.API.info('打印输出是调试的唯一方法');

编辑

这些api没有任何好的格式,所以你不能在Eclipse中通过帮助等方式获得普通的代码补全。Aptana,请帮帮我!

硬件

似乎编译器/工具不是多线程的,所以一个快速的计算机和一个快速的硬盘驱动器是必须的,因为你必须做大量的试验和错误。我提到过糟糕的文件吗?你必须把那里的一切都试一试,因为你不能相信它!

一些积极的事情

Open Source From previous projects I have promised myself never ever to use closed source again as you can't simply fix things just by throwing hours and manpower at it. Important when you are late in the project and need to deliver for a hard deadline. This is open source and I have been able to see why the tool chain breaks and actually fix it as well. Bugdatabase It's also open. You can simply see that your not alone and do a workaround instead of another 4 hours spent on trial&error. Community Seems to be active on their forums.

Bugs

Titanium 1.4 is not threadsafe. That means if you make use of threads (use the url: property in a createWindow call) and program like the threads are working and send events with data back and forth you run into a lot of very, very strange stuff - lost handlers, lost windows, too many events, too few events, etc. etc. This is all dependent on the timing, putting the rows of code in different order might crash or heal your application. Adding a window in another file.js breaks your app.js execution... This also trashes internal datastructures in Titanium, as they sometimes can update internal datastructures in paralell, overwriting a just changed value with something else.

我在使用Titanium时遇到的很多问题都来自于我使用实时系统的背景,比如支持数百个线程、事件和消息传递的OSE。这应该在Titanium 1.4中工作,但它并不可靠。

Javascript (which is new to me) dies silently on runtime errors. This also means that small and common bugs, like misspelling a variable name or reading in a null-pointer does not crash when it should so you can debug it. Instead parts of your program just stop working, for instance an eventhandler, because you misplaced/misstyped a character. Then we have more simple bugs in Titanium, like some parameters not working in the functions (which is quite common on the Android platform at least). Trial and Error debug cycle speed Having run Titnium Developer on several computers, I noticed that the bottleneck is the harddrive. An SSD drive on a laptop makes the build cycle about 3-5 times faster than on a 4200 rpm drive. On a desktop, having dual drives in RAID 1 (striping mode) makes the build about 25 percent faster than on a single drive with a somewhat faster CPU and it also beats the SSD drive laptop.

总结

从这个帖子里的评论来看,似乎有一场像这样的工具可以提供应用程序的平台数量之争。API的数量似乎是关键的卖点。

当你开始使用它的时候,它会非常闪亮。如果你查看打开的bug跟踪器,你会发现bug数量的增长速度一直快于已修复的bug数量。这通常是开发人员不断添加更多功能的标志,而不是专注于减少错误的数量。

作为一个为客户提供多平台应用的顾问,我不确定这是否比在两个平台上开发本地应用更快。这是因为当你达到速度时,你使用钛的速度很快,但突然你向下看,发现自己在一个如此深的洞里,你不知道必须花费多少小时来解决问题。你可以在特定的期限/时间/成本下不承诺特定的功能。

关于我自己:我已经用wxPython使用Python两年了。(GUI是不一致的,但从未像这样中断。可能是我不理解Javascript和Titanium使用的线程模型,但根据他们的开放论坛,我不是一个人,GUI对象突然使用错误的上下文/不更新..??)在此之前,我有移动设备的C和ASM编程背景。

[编辑-添加了错误的部分,不线程安全] [编辑-现在已经工作了一个多月,主要是在PC上,但也有一些在OS X上。增加了iPhone和Android的双重目标。增加了试错调试周期