在iPhone上进行快速应用程序开发,使用Monotouch还是Titanium?

27
作为一名 .NET 开发者,我一直梦想着用现有的技能(C#)开发 iPhone 应用程序。这两个程序都需要安装 Mac 和 iPhone SDK。Appcelerator Titanium 是我尝试的第一个应用程序,它基于将一些 iPhone 原生 API 暴露给 Javascript,以便使用该语言调用。Monotouch 的起价为 $399,可以在 iPhone 上部署,而不能在 iPhone 模拟器上部署,而 Titanium 则是免费的。 Monotouch(Monodevelop)有一个当前在 Titanium 中缺少的 IDE(但您可以使用任何编辑器,如 Textmate、Aptana...)。我认为这两个程序最终都会生成本地预编译的应用程序(尽管我不确定 iPhone 上最终应用程序的大小,因为我认为 Monotouch 中的 .NET 框架调用在编译时预链接)。我也不确定所有 iPhone API 和功能的完全覆盖范围。Titanium 还具有启用 Android 应用程序开发的优势,但作为 C# 开发人员,我仍然觉得 Monotouch 的体验更像 Visual Studio。你会选择哪一个,并且对 Monotouch 和 Titanium 有何经验?

3
学习新技术有什么可怕的?毕竟那是一个新平台。 - jbrennan
2
学习一门新语言只为了一个平台毫无意义。明年可能诺基亚或Linux手机会成为下一个大热门,然后你又得重新学一门新语言。iPhone支持C和C++,现在也可以通过这些技术使用C#。我也会选择我已经掌握的语言。(虽然了解新语言永远不会有坏处……但单为了这个平台而开始工作则是另外一回事) - Toad
3
如果你宁愿花费数月时间使用二流的工具,也不愿花几天时间学习一门“新的”编程语言,那么你应该感到羞耻称自己为程序员。 - PeyloW
2
@reinier 我猜在未来2-3年内,其他任何移动平台接近iPhone的覆盖率的机会都很小。但是,如果另一款手机出现了,每2-3年学习2周并不需要太多投资。如果你想为(任何)新平台创建出色的应用程序,请不要从一开始就让自己陷入困境。 - Corey Floyd
10
我知道这是一段时间前的事情,但我想过来看看现在如何了。只是想说,当人们谈论是否聪明/愚蠢/荒唐等不想学习本地工具时,他们错失了重点。原帖作者不应因为想利用现有技能而受到批评。我使用本地工具 MonoTouch,作为一个偏爱 C# 的人,我对 MT 非常感兴趣。不确定有什么问题。如果你认为 MT 是"二流工具",那么你肯定没有认真了解过它。苹果应该感激它的存在。 - Rory Blyth
7个回答

96
任何工具、平台、语言、框架或者其他任何问题,最终应根据您自己的需求来决定。忘记所有“如果你想开发这个平台,那么你必须付出代价”的建议。如果您有兴趣学习Objective-C、Xcode和相关的苹果技术,则应该去尝试。我就是这样做的。这很有趣,但我的兴趣在于开发iPhone应用程序。学习一门新语言、框架和IDE只是额外的收获(我喜欢这些东西)。这也是当我开始时必须要做的。
自从发布以来,我一直在使用MonoTouch,并且我喜欢它。我更喜欢C#而不是Objective-C,并且我喜欢访问MonoTouch提供的.Net(Mono)框架的子集。有些事情使用.Net比Cocoa更容易(例如字符串操作、日期操作、XML等所有内容)。
我还喜欢不再需要处理引用计数。多年来,我已经被不需要跟踪资源的生活方式所熏陶。我不介意自己清理资源,但我不想手动执行每个现代开发平台都会自动为我完成的任务。此外,即使对于经验丰富的Objective-C开发人员,引用计数也不是易如反掌。请看一下OS X的控制台输出,看看有多少应用程序由于内存管理问题而崩溃(我知道 - 这可能会发生在基本上任何应用程序中,但是当过度劳累的开发人员参与其中时,犯这种导致问题的错误变得更加容易,他们的注意力已经被无数个if语句所摧毁)。
我仍然使用Objective-C/Xcode - 我真的学会喜欢苹果的工具。我诚实地觉得它们很笨拙、有点神秘,但仍然很有趣。
不过...我也喜欢这个:
public string SomeString { get; set; }
要在iPhone上使用Objective-C实现相同的操作,需要声明一个本地变量来支持属性,编写属性声明,然后使用“synthesize”指令使属性为您生成(根据您指定的属性属性,您可能会具有包装获取器和设置器的属性,这些属性将为您处理引用计数 - 总体而言,这是一个时间节省者,但C#方法在这里是明显的赢家)。MonoTouch可以使您的生活更轻松,尤其是如果您习惯于不需要涉及内存管理的.NET/Java/Python/其他语言。Titanium则不同,因为它正在尝试创建一个抽象层,让您为多个平台编写相同的应用程序,因此您将处理通常的缺点:完全不同的API,灵活性降低等。无论您选择哪种开发工具,您最终都必须学习一些关于CocoaTouch的知识。我仍强烈建议开发人员至少使用原生工具通过几个基本的iPhone应用程序。这将使您成为该平台的更好开发人员。

如果你喜欢并且比 Objective-C 更擅长 C#,那就毫无理由不选择 MonoTouch。

除非那些人亲自使用过他们所谈论的技术,否则不要听信那些唱衰者的话。例如,我了解 Titanium,但我没有实践经验- 我只是知道我不想用它,因为它与我的个人偏好不符。这并不意味着它“糟糕”- 它只是我生活中不想有的东西。

Objective-C 的开发者可以非常狂热。虽然其中有许多开放思维的开发者,但也有非常非常多的人认为 Objective-C、Cocoa 等等是开发界永远需要的最后一种工具。

别理会他们。

如果你担心支持问题,这里有一些需要考虑的事情:

Apple 很可能会保持更新,因为他们是制造这个垃圾的人。

MonoTouch 有可能会保持最新- Mono 团队已经在与 Microsoft 竞争方面做了出色的工作,我不认为他们不会同样对待 Apple。他们的表现令我惊叹。尽管 MonoTouch 只是发布了,就像五分钟前,但他们已经推出了 iPhone 3.1 版本的更新。他们非常认真地对待这个,我认为他们是神奇的。他们是开发世界里的小精灵。他们坐在自己的秘密层中,制造出每个人(好吧-不是每个人)都喜欢的东西,但其他人甚至都不敢尝试去做。

Titanium 要么成为一种笨拙的统一 API,用于编写多平台应用程序,完全是自己的东西;要么随着不同平台的功能分化,它会变得越来越分散。是啊,这是一堆典型的自命不凡的未来预测......我应该以“我认为......”作为这个项目符号的前缀。如果只有一种方法可以返回并更改它。

选择你喜欢的。MonoTouch 是 Apple 工具的“安全”替代品。我担心 Titanium 会走上相同的老路,即“糟糕”的高级平台抽象层技术,很多其他技术都走过这条路。但如果你正在做一些简单的事情,那么尝试一下也没有什么坏处,特别是在测试期间是免费的。


2
Rory,感谢你提供这样清晰深入的解释,真正为各种可能的选择定下了框架。 - Ronnie
7
该回答非常有帮助。感谢您分享您所知道的内容。 - Dan Rosenstark
1
非常好的答案。我喜欢MonoTouch,它非常有用。 - Telavian
Rory,虽然我目前与移动开发无关,但我想要为你的输入鼓掌,写得非常好,逻辑流畅超群,你应该成为一名辩手 :) - DevMania

4
这里有一些有趣而且有趣的方法可以构建iPhone应用程序。但是,要进行真正快速的本地iPhone开发,您最好使用免费的iPhone SDK和Xcode。
老实说,最难学习的是框架本身的能力,而不是语言语法。但这是您必须解决的问题,因为这些IDE /语言仍然需要您掌握Cocoa(和Cocoa Touch)的某些约定。
我并不是作为一个Cocoa/Objective-C势利小人说这话,但如果您知道C(作为C#开发人员),那么进入门槛就没有任何障碍了。
此外,您将获得大量的教程和示例代码,这些初生之犊的翻译器/ IDE /语言所没有的。
学习另一种编程语言很少是坏事,作为一名经验丰富的程序员,您的时间投资并不像您想象的那样大。

2
使用MonoTouch进行iPhone开发,因为您已经是.NET程序员,就好比一个焊工焊接一个木制书架,因为您已经是一名焊工。有时学习一些木匠技巧很有用,尤其是如果您想避免火灾。 - PeyloW
4
使用MonoTouch来“焊接一个木制书架”就像拥有一个你已经知道如何使用的焊工,但他可以神奇地将书架用钉子、螺丝和胶水粘在一起,而无需你了解细节。你可以深入研究并了解你的新魔法焊工,但你不必这样做。如果你的目标是建造或修理一个书架,并且你只知道焊接,那么......嘿——试试吧。有些人想要了解所有的工具——有些人只想建造东西。通过MonoTouch,你两者都可以实现(MT教会了我更多关于Apple的工具栈——太棒了)。在批评之前先试试吧 :) - Rory Blyth
要明确的是,我认为每个MonoTouch开发者都可以从学习苹果的技术栈中受益匪浅。但我并不觉得他们必须这样做。我知道,做了一年的iPhone开发工作让我更容易理解MonoTouch。我不会假装这不是事实。但是,说到“学习一些木匠技巧”-你不觉得学习MonoTouch就是在做这件事吗?有时候一个技术栈比另一个更合适-喜欢有这个选择。但是,回到开始:我确实建议MT开发者花几天时间学习苹果的技术栈-这很有趣,有帮助,而且不会有害。 - Rory Blyth
1
我认为在Windows平台上学习.NET或者进行Web开发绝对属于学习新的木匠技巧。许多高质量的产品都是在VS中构建的(我们现在正在使用其中之一!),但我不能这样说MonoTouch。MonoTouch是一个在Cocoa Touch之上的抽象层,专门为.NET开发人员降低进入门槛而创建的。它实际上并没有为堆栈添加任何以前不存在的功能。我无法想到有什么优势(但我可能错了)会使经验丰富的Cocoa/iPhone开发人员从专门学习MonoTouch中受益。 - Corey Floyd
顺便说一句,我并没有针对MonoTouch有什么具体的意见。我只想说方括号和@符号不应该让你害怕这门语言。实际上,它只是在C语言基础上添加了非常薄的面向对象编程层。 - Corey Floyd

3

我创建了一个开源项目http://propertycross.com,旨在帮助开发者通过展示使用Sencha、Titanium、Xamarin等框架实现的相同应用程序来选择跨平台移动框架。该项目允许您轻松比较各种框架的终端用户体验、代码、IDE、开发者体验等方面...


2

我知道这是一个老话题,但为了保持时效性,看起来MonoTouch和其他跨平台框架将在SDK 4.0中被禁止使用。编写iPhone应用程序的唯一“安全”选择是使用XCode和Objective-C,至少目前是这样。


2
我很喜欢提供快速掌握iPhone开发的方法,让技术人员更容易上手。个人而言,作为一名Java开发人员,我使用iSPectrum (http://www.flexycore.com) 。它也带有IDE、调试器等工具,使得开发变得方便。因为它受益于Eclipse Java插件的全部功能。 由于基于Java,这还允许轻松地重用其他Java应用程序中已经存在的代码,这可以非常方便,因为除了iPhone外,Java几乎存在于所有平台(桌面和移动设备)上。 此外,它对于开源项目是免费的。 我更喜欢考虑这些解决方案,因为我不想回到在emacs中开发的想法。

1
如果你是C#程序员,为什么不花点时间学习Objective C呢?说实话,这并不会占用你太多时间。但在新平台上使用新语言工作会让你感觉很好。学习新事物总是让我着迷。

0

有许多方法可以进入设备。苹果已在SDK许可证中声明,通过C、C++、ObjectiveC和Javascript是唯一批准的进入设备的方式。

目前看来,使用MonoTouch和Appcelerator Titanium构建的应用程序被接受到App Store中。由于许可证的变更,这个问题引起了很多恐惧、不确定性和疑虑。苹果吓坏了所有不使用ObjectiveC的人。

我建议你作为开发者做出最明智的选择。如果你懂C#和.NET,你应该选择MonoTouch。如果你懂ObjectiveC或Mac平台,ObjectiveC可能是最好的选择。如果你懂X并且它在iPhone上,那么我建议首先看X。


投反对票的用户至少应该向用户提供反馈。 - Austin Henley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接