Monotouch 或 Titanium 用于在 iPhone 上进行快速应用程序开发?

Posted

技术标签:

【中文标题】Monotouch 或 Titanium 用于在 iPhone 上进行快速应用程序开发?【英文标题】:Monotouch or Titanium for rapid application development on IPhone? 【发布时间】:2010-12-02 02:00:58 【问题描述】:

作为 .Net 开发人员,我一直梦想着能够利用我现有的技能 (c#) 为 Iphone 开发应用程序。

这两个程序都需要安装 Mac 和 Iphone Sdk。

Appcelerator Titanium 是我尝试的第一个应用程序,它基于将一些 Iphone 原生 api 暴露给 javascript,以便可以使用该语言调用它们。

Monotouch 起价为 399 美元,因为它可以部署在 Iphone 上而不是 Iphone 模拟器上,而 Titanium 是免费的。

Monotouch (Monodevelop) 有一个 Titanium 目前缺少的 Ide(但您可以使用任何编辑器,如 Textmate、Aptana...)

我认为这两个程序最终都会生成一个本地预编译应用程序(如果我不确定 Iphone 上最终应用程序的大小,因为我认为 .Net 框架调用在 Monotouch 中的编译时预先连接)。

我也不确定是否全面覆盖了所有 Iphone api 和功能。

Titanium 还具有支持 android 应用开发的优势,但作为一名 c# 开发人员,我仍然发现 Monotouch 体验更像 Visual Studio 体验。

你会选择哪一个?你对 Monotouch 和 Titanium 有什么体验?

【问题讨论】:

学习新技术有什么可怕的?毕竟,这是一个新平台。 为一个平台学习一门新语言是没有意义的。明年诺基亚或 Linux 手机将成为下一件大事,你必须再次一起学习一门新语言。 Iphone 支持 c 和 c++,现在通过这些技术 c#。我也会选择我所知道的。 (虽然研究新语言从来都不是一件坏事……但开始为这个平台工作是另一回事) 如果您宁愿花几个月时间在二流工具上浪费时间,也不愿花几天时间学习编程语言;那么你应该羞于称自己为程序员 @reinier 我猜任何其他移动平台在未来 2-3 年内接近 iPhone 的可能性很小。但是,如果确实出现了另一部手机,那么每 2-3 年再学习 2 周并不是真正的投资。如果您想为(任何)新平台创建出色的应用程序,请不要从削弱自己开始。 我知道这是很久以前的事了,但我想我会进去看看在做什么。只是想说人们在谈论它是否聪明/愚蠢/愚蠢/等时没有抓住重点。不想学习原生工具。 OP 不应该因为想要利用现有技能而受到抨击。我使用原生工具 MonoTouch,作为一个喜欢C#的人,我对机器翻译很感兴趣。不知道那有什么问题。而且,如果您认为 MT 是“二流工具”,那么您根本没有认真检查过它。苹果应该感谢它的存在。 【参考方案1】:

就像任何工具或平台或语言或框架或任何问题一样,它应该真正归结为想要什么。

忘记所有如果你想为此平台开发,那么你必须支付你的会费的建议。如果你有兴趣学习 Objective-C、Xcode 和相关的 Apple 位,那么 goferit。我做到了。这很有趣,但我的兴趣在于开发 iPhone 应用程序。学习一门新的语言、框架和 IDE 只是一种奖励(我喜欢这些东西)。刚开始的时候也是必要的。

自从 MonoTouch 发布以来,我一直在使用它,我喜欢它。 更喜欢 C# 而不是 Objective-C,而且我喜欢访问 MonoTouch 提供的 .Net (Mono) 框架的子集。有些事情用 .Net 比 Cocoa 更简单(字符串操作、日期操作、anything XML 等)。

我也喜欢不必再处理引用计数。我被多年来不必跟踪该级别的资源所宠坏。我不介意必须自己清理,但我不想手动执行我使用过的所有其他现代开发平台自动为我执行的操作。另外,即使对于经验丰富的 Objective-C 开发人员来说,引用计数也不是一件容易的事。有时滚动浏览 OS X 的控制台输出,以查看有多少应用程序由于内存管理问题而崩溃(我知道 - 基本上任何应用程序都可能发生这种情况,但是当你让开发人员过度劳累时,更容易犯下导致这种情况的错误12 个小时的 if this and if that and else this and else that and blah blah blah) 摧毁了他们的注意力。

我仍然使用 Objective-C/Xcode - 我真的学会了喜欢 Apple 的工具。老实说,我觉得它们很尴尬,有点神秘,但仍然很有趣。

但是……那我也喜欢这样:

public string SomeString  get; set; 

要使用 Objective-C(无论如何在 iPhone 上)做同样的事情,需要声明一个局部变量来支持属性,编写属性声明,然后使用“synthesize”指令生成属性您(取决于您指定的属性属性,您可能有一个包含 getter 和 setter 的属性,它们为您处理引用计数 - 总体而言,这 可以节省时间,但 C# 方式是这里的明显赢家)。

这只是 MonoTouch 如何让您的生活更轻松的一个示例,特别是如果您习惯于 .Net/Java/Python/其他不需要您弄脏内存管理的语言(除非您想要)。

就 iPhone 特性而言,除了将 .Net 的一部分引入 iPhone 世界之外,MonoTouch 命名空间映射到 CocoaTouch,所以如果你对 MonoTouch UIViewController 感到困惑,你可以跳过到 Apple 在 UIViewController 上的文档。 MonoTouch .Net-izes CocoaTouch,但它足够接近,您不太可能撞到墙(如果您使用 Xcode/Objective-C,也不会撞到墙)。很流畅。

钛是不同的。由于他们正在尝试(trying)创建一个抽象层,让您可以为多个平台编写相同的应用程序,因此您将面临常见的缺点:完全不同的 API、失去灵活性( MonoTouch 也可以这样说,但程度不同),并且基本上必须学习一个全新的平台(这是你试图通过绕过 Xcode/Objective-C/CocoaTouch 来避免的,对吧?) .

我也讨厌 JavaScript,所以我会偏向于 Titanium。但即使不是这样——即使我可以使用我喜欢的语言——API 也不会满足我的想象。或者我的任何东西。

无论您选择哪种开发工具,您最终不得不学习一些有关 CocoaTouch 的知识。无论是 Xcode/Objective-C、MonoTouch 还是 Titanium,某些东西都会对你造成破坏或完全不稳​​定,你最终将不得不参考 CocoaTouch 文档。

如果我要发表关于 iPhone 开发的演讲(我已经做过,而且我将再次做),如果我要讨论 Apple 开发工具的替代品(我会这样做),我仍然强烈鼓励开发人员至少使用本机工具通过一些基本的 iPhone 应用程序工作。这将使您成为该平台的更好的开发人员 - 期间。您可以使用这个开始阶段来确定您是否想要使用 Apple 提供的免费位以外的任何东西。你可能不会。我一直在使用 MonoTouch,因为它让我满意 - 而不是因为它是必要的。

所以,总结几个基本标准:

偏好(语言/框架)

设备(您是否关心非 iPhone 平台或认为有一天您可能会关心?)

舒适(如果您喜欢并且比 Objective-C 更了解 C#,那么没有理由不使用 MonoTouch)

除非他们真正使用他们谈论的技术,否则不要听反对者的意见。例如,我读过关于 Titanium 的文章,但我没有使用它的经验——我只知道由于我的喜好,我不想与它有任何关系。这并没有让它变得“坏”——只是我生活中不想要的东西。

Objective-C 人群的热情令人印象深刻。虽然其中有很多思想开放的开发人员,但也有很多人认为 Objective-C 和 Cocoa 以及等等等等这些开发人员将永远需要的最后一个开发工具。 p>

忽略它们。

如果您担心支持,请考虑以下几点:

Apple 可能会保持最新状态,因为它们是制造这种垃圾的人。

MonoTouch 很可能会保持最新状态 - Mono 窥视者在跟上 Microsoft 方面做得非常出色,我认为他们没有理由不与 Apple 做同样的事情。我对他们的所作所为感到震惊。尽管 MonoTouch 已经发布,就像五分钟前一样,他们已经为 iPhone 3.1 发布了更新。他们对此很认真,我认为他们很神奇。他们是开发世界的基布勒精灵。他们坐在他们的秘密层中,制作每个人(好吧 - 不是每个人)都喜欢的东西,但其他人甚至都不会尝试这样做。

Titanium 要么会成为一个尴尬的统一 API,用于为多个平台编写应用程序,这完全是它自己的事情,要么会随着不同平台的功能分歧而变得越来越分裂。是的,那是一群典型的扶手椅书呆子式的未来凝视……我应该在这个项目符号的开头加上“我认为……”如果有办法回去改变它。

我现在就闭嘴。

随心所欲。 MonoTouch 是 Apple 产品的“安全”替代品。恐怕 Titanium 会走上与许多其他技术一样的老路——这个超高级平台——抽象层——东西并不真正可行。但是,如果您正在做一些简单的事情,试一试并没有什么坏处,尤其是考虑到它在测试期间是免费的。

好的。

现在真的闭嘴了……我希望这会有所帮助。

【讨论】:

Rory,感谢您清晰而深入的解释,真正形成了各种可能的选择。 该死的,这是一个非常有用的答案。感谢您分享您的知识。 非常好的答案。我喜欢 MonoTouch,它非常有用。 Rory,暂时不是和Mobile Dev有任何关系,只是想为你的Input man鼓掌,写得很好,逻辑流程也很棒,你应该是个辩手:)【参考方案2】:

这些是构建 iPhone 应用程序的有趣和有趣的方式。但是,对于真正快速的原生 iPhone 开发,最好的选择是免费的 iPhone SDK 和 Xcode。

说实话,最难学习的是框架本身的功能,而不是语言语法。但这是您必须以任何一种方式解决的问题,因为这些 IDE/语言仍然需要您掌握 Cocoa(和 Cocoa Touch)的一些约定。

我并不是说这是一个 Cocoa / Objective-C 势利小人,但如果你了解 C(作为 C# 开发人员你会这样做),那么进入真的没有任何障碍。

此外,您还可以访问大量教程和示例代码,这些对于这些初出茅庐的翻译器/IDE/语言来说是不可用的。

学习另一种编程语言很少是坏事,作为一名经验丰富的程序员,您的时间投入不会像您想象的那么大。

【讨论】:

因为你已经是一名.NET程序员,所以使用MonoTouch进行iPhone开发,就等于因为你已经是一名焊工,所以焊接一个木制书柜。有时学习一些木匠技巧是件好事,尤其是当你想避免火灾时。 使用 MonoTouch 来“焊接木制书柜”就像拥有一个您已经知道会使用的焊机,但它神奇地用锤子、螺丝钉和胶水将书柜粘合在一起,而您无需了解细节。您可以挖掘并找出您的新魔术焊机,但您不必这样做。如果您的目标是建造或修理书柜,并且您所知道的只是焊接,那么......嘿 - 去做吧。有些人想了解所有关于装备的知识——有些人只是想制造一些东西。使用 MonoTouch,您可以同时做到这两点(MT 教了我更多关于 Apple 工具堆栈的知识 - 这太棒了)。在敲门之前先试一下:) 需要明确的是,我认为每个 MonoTouch 开发人员都可以从学习 Apple 的堆栈中受益匪浅。我只是不觉得他们必须。我知道,做了一年的 iPhone 开发工作让我更容易理解 MonoTouch。不会假装不是这样的。但是,说到“学习一些木匠技巧”——你不会说学习 MonoTouch 就是这样做的吗?有时一个堆栈比另一个更有意义 - 喜欢有这样的选择。但是,回到开头:我确实建议 MT 开发人员花几天时间使用 Apple 的堆栈 - 这很有趣、很有帮助并且不会受到伤害。 我想说,在 Windows 机器上学习 .NET 或进行 Web 开发肯定属于学习新的木匠技巧。 VS 中内置了许多优质产品(我们现在正在使用一个!)但我不会说 MonoTouch。 MonoTouch 是 Cocoa Touch 之上的一个抽象层,专为降低 .NET 开发人员的入门门槛而创建。它实际上并没有向堆栈添加以前没有的任何功能。我想不出有经验的 Cocoa/iPhone 开发人员会从专门学习 MonoTouch 中获得什么优势(但我可能错了)。 顺便说一句,我对 MonoTouch 没有任何特别的看法。我只会说方括号和@ 符号不应该让你远离语言。它实际上只是添加了非常薄的层或 OOP 的 C。【参考方案3】:

我创建了一个开源项目http://propertycross.com,它通过展示使用 Sencha、Titanium、Xamarin 等实现的相同应用程序来帮助开发人员选择跨平台移动框架。该项目让您可以轻松地比较各种框架,包括最终用户体验、代码、IDE、开发者体验等......

【讨论】:

【参考方案4】:

我有点喜欢这样的想法,即通过技术人员已经知道的技术快速掌握 iPhone 开发。 作为一名 Java 开发人员,我个人使用 iSPectrum (http://www.flexycore.com)。它还带有一个 IDE、调试器和其他东西,这使得开发非常方便,因为它受益于 Eclipse Java 插件的所有功能。 基于 Java,这还允许轻松重用来自其他 Java 应用程序的现有代码,如果 Java 存在于除 iPhone 之外的几乎所有平台(桌面和移动设备)上,这将非常方便。 此外,它对开源项目是免费的。

我宁愿考虑这种解决方案,因为我不喜欢回到使用 emacs 进行开发的想法 :)。

【讨论】:

【参考方案5】:

我知道这是一个老话题,但为了保持最新,看起来 MonoTouch 和其他跨平台框架是going to be banned in SDK 4.0。编写 iPhone 应用程序的唯一“安全”赌注是使用 XCode 和 Objective-C,至少目前是这样。

【讨论】:

【参考方案6】:

如果您是 C# 程序员,为什么不应该花一些时间来学习 Objective C。老实说,这不会占用您太多时间。但是,在新平台上使用新语言工作感觉很好。学习新事物总是让我着迷。

【讨论】:

【参考方案7】:

可以通过多种方式登录该设备。 Apple 在 SDK 许可证中声明,唯一获准进入设备的方式是通过 C、C++、ObjectiveC 和 Javascript。

目前看来,基于 MonoTouch 和 Appcelerator Titanium 构建的应用程序正在被 App Store 接受。由于许可证变更,人们对这个主题有很多恐惧、不确定性和怀疑。 Apple 吓坏了所有人不做 ObjectiveC。

我建议您做任何对您作为开发人员最有意义的事情。如果您了解 C# 和 .NET,则应该使用 MonoTouch。如果您了解 ObjectiveC 或 Mac 平台,ObjectiveC 可能是您要走的路。如果您知道 X 并且它在 iPhone 上,那么我建议您首先查看 X。

【讨论】:

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

以上是关于Monotouch 或 Titanium 用于在 iPhone 上进行快速应用程序开发?的主要内容,如果未能解决你的问题,请参考以下文章

Titanium.Network.online 不适用于 android 模拟器

MonoTouch 中的自定义标签栏项目

如何使用 Titanium 重新安装所有用于 iOS 开发的旧 SDK(软件)?

Titanium - 只有 webview 的应用程序被拒绝?

Phonegap、Corona 或 Monotouch 是不是可以在 iOS 上进行位置感知通知?

MonoTouch - 上传/保存图像(或访问图库图像)