为什么不建议使用MonoTouch for iPhone开发?

时间:2012-06-27 11:37:04

标签: ios xamarin.ios

我们希望为iOS和Android智能手机开发应用程序。我们主要使用Microsoft技术来开发我们的应用程序。我们认为如果我们使用MonoTouch和Mono for Android,我们只需维护一个代码库,每个设备只有一个不同的UI层。

因为目前我们的小团队中没有人开发智能手机应用程序,我们很快就需要它,我们希望将其外包。我们向其他公司询问他们是否更喜欢用于iPhone开发的MonoTouch或Objective C.他们中的大多数人表示会选择目标C.他们说Objective C提供了更多的功能和可能性,它更快,对于MonoTouch来说,苹果将来不再支持它。所有这些都是正确的还是有其他理由更喜欢Objective C?我知道还有其他这样的线程,但他们没有回答我的问题,特别是有关Apple支持MonoTouch的问题。

6 个答案:

答案 0 :(得分:40)

  

应用程序。我们认为如果我们使用MonoTouch和Mono   Android我们只需要维护一个只有一个代码库   每个设备的不同UI层。

如果您正确构建应用程序,这是可能的。如果不是:不。

如果你使用Java + ObjC + C#(对于WP7 / Win8 metro等),那么这不是一个选项 AT ALL

  

因为目前我们没有人   小团队开发了智能手机应用程序,我们需要它   很快我们想把它外包出去。我们问其他公司是否   为iPhone开发提供MonoTouch或Objective C。大多数人   说,会选择目标C.

如果你要外包它,你应该决定你想要它写的是什么?如果你需要在内部支持它,并且你只有C#技能,那么MonoTouch等对你来说更有意义,人们付账单!

  

他们说目标C.   提供更多功能和可能性,

FUD,也不正确。 Monotouch提供完整的API。如果它不在那里,就像Xamarin绑定它(他们以前经常做过)

  

它更快

我很想看到基准。是的,从技术上讲,可以在某些情况下更快,但在一般情况下,MonoTouch可以相同或更快。

程序员错误是iOS应用程序性能问题的常见原因。例如,没有从UI线程中获取东西(在MonoTouch中比在ObjC中更容易做到,这些块已经帮助了很多),或者花了很长时间才能摆脱FinishedLaunching(“主要”方法,如果你愿意,那么它不是真的...)

垃圾收集和linq,xml / json解析,泛型和集合之类的东西也非常有价值,而且非常快。

  

并为   MonoTouch苹果有可能不再支持它了   未来。

是的,有机会。蒂姆库克也有机会与苹果公司的数十亿美元并购买整个夏威夷(而不是拉里·埃里森的“我只是购买这个岛屿”)。但现在机会相当渺茫。

  

这一切是真的还是有其他理由要优先考虑   目标C?我知道还有其他这样的线程,但它们   没有回答我的问题,尤其是关于Apple的问题   支持MonoTouch。

Apple不支持MonoTouch。 Xamarin确实如此,他们做得非常好。 Apple不支持XCode以外的任何产品,XCode是他们的产品。

Apple已经允许 MonoTouch应用程序(有很多)。另一种看待它的方式:通常,前100个游戏中有95%是使用Unity3D编写的,Unity3D基于相同的技术(提前编译C#代码并嵌入Mono / .NET框架的缩减版本) )。

有理由更喜欢ObjC:

  • 你已经知道ObjC和CocoaTouch并喜欢它。
  • 您的团队已经知道ObjC和CocoaTouch,或者您可以轻松雇用那些人(注意:目前,据我所知,iOS开发人员招聘的费用很高,如果可以的话)
  • 你需要在他们出来的那天使用beta版。请注意,您可以使用当前的MonoTouch并将其部署到您的iOS [已删除]设备上,并附带测试版。你不能在iOS6 YET中使用新的东西(Xamarin说“大约2周”,现在应该是......)。另请注意,即使您不使用其中的任何内容,也无法将应用程序部署到使用beta SDK构建的商店。您甚至无法在产品说明中提及iOS [已删除](我已尝试过)
  • 你爱[squareBrackets andTheOccasional:@“奇怪的语法事物”];

现在,构建一个跨平台的共享代码应用程序是一件容易的事吗?一定不行。对于非平凡的应用程序来说,这是一个非常复杂的开发。但这就是软件开发的有趣部分:如果它很简单,那就太无聊了!抓住Greg Shackles的书(http://www.amazon.com/dp/1449320236)来了解iOS + WinPhone + Android风格开发所需的内容。

答案 1 :(得分:11)

我的预感是,你谈过的公司只是习惯使用Objective-C。这就是他们技能所在的地方,而这也是他们不愿偏离自己道路的最大原因。其他原因可以两方面争论。

没有人可以预测苹果会做什么,但苹果公司将禁止第三方工具包的可能性非常小非常。 API就像他们在2010年夏天那样。那只是很短的一段时间,他们完全颠倒了这个决定。他们目前的重点是使应用程序开发更容易,这意味着保持该领域对替代开发方法开放。我认为MonoTouch是安全的。

至于速度,C#通常会产生非常快的可执行文件。它们可能与Objective-C一样快相当,但我怀疑你是否注意到了差异。我记得在某些测试中看到某个网站显示C#优于C / C ++,但那是在.NET环境中,而不是Mono ......不幸的是我无法找到引用。我一直在寻找。但速度的底线是C#速度非常好。它不像BASIC vs C.更像是Java / JIT vs C.

C#为Objective-C提供了很多,很多(!)的优势,并且已经在其他Stack Overflow答案中列举了它们,所以我不会在这里重复它们。你可以很容易地找到它们。

我是MonoTouch的明显粉丝,但我必须说一件事:我觉得公司认为这是错误的,因为他们能说流利的C#/ .NET,他们很容易就会能够使用MonoTouch开发和/或维护iOS应用程序。事实并非如此,因为MonoTouch基本上是CocoaTouch API的C#层,这意味着你必须学习Apple的做事方式。你有app代理和视图控制器以及所有UIKit的东西。那里有一个真正的学习曲线。但如果你能熟练使用C#,MonoTouch将会是一个巨大的帮助。

<强>更新
我找到了关于C#速度的文章:Head-to-head benchmark: C++ vs .NET

答案 2 :(得分:8)

我实际上已经为我开发过的每个应用程序使用过MonoTouch。性能从来就不是问题,我无法想象它会对我使用Objective-C有多糟糕。我在美国应用程序商店中有2个前十大应用程序:“画一个火柴人”和“画一个火柴人:第2集”(不要担心我们正在开展更多工作)。

如果您了解C#和.Net,那么与尝试学习Objective-C相比,您的工作效率将会大幅增加。在iOS开发之前,我是一名C#.Net开发人员(仅限Windows),过渡到MonoTouch非常棒。

如果您喜欢Linq,只需少于100行解析XML,垃圾收集,泛型,简单的多线程,并且没有奇怪的方括号,MonoTouch就适合您。

答案 3 :(得分:6)

我同时使用Objective-C和c#(MonoTouch&amp; Droid),我真的很喜欢。当我用c#编码时,有很多功能,比如我在Obj-C中喜欢的Linq,&amp;当我在Obj-C中编码时,我会喜欢在c#中提供很多东西,但是我能够快速适应我正在编码的任何东西。重新表现,我发现没有任何差别,即使是相当图形密集的东西,所以我不会将其作为不使用c#的理由。

我认为这最终取决于您编写的内容,尽管当然有一个设计良好的跨平台项目,如果您使用Mono,您可以拥有完全跨平台的核心代码,而您只需要以特定于平台的方式处理UI内容 - 当涉及到这一点时,您显然需要了解本机内容,以使UI以适合平台并且对用户熟悉的方式工作。

答案 4 :(得分:3)

我们有一系列业务应用程序,它使用MS SQL作为数据存储,并具有WinForms和Web UI。它与我们的Windows Mobile 6.5和平板电脑应用程序集成了Web服务。所有c#。

在Objective-C和HTML-5(我们有工作原型)的一些实验之后,我们完全致力于MonoTouch:我们重新使用我们的业务逻辑,我们很乐意用c#开发新代码。 / p>

我们的业务逻辑不断得到增强,移动应用程序可以立即看到这些增强功能,而无需在Objective-C或C ++中复制逻辑。

我们的主要问题是找到一位熟悉iPhone和iPad用户界面的c#程序员。

MonoTouch是稳定的,我们没有遇到任何限制(我们绑定到Objective-C绑定的相同iOS API)。在我们的学习过程中,我们遇到了问题,碰到了错误并产生了一些误解 - 但是Xamarin的支持非常棒。

性能一直不是问题 - 我们的应用程序很快,即使它在幕后做了很多。

答案 5 :(得分:-2)

没有任何机构可以告诉你苹果会支持什么以及将来不会支持什么,不过苹果过去曾有过单声道问题,而且由于历史往往会重演,所以它可能是再次发生

话虽如此,总是使用本机应用程序开发SDKS和环境,它会更灵活,并且会实时更新,并且在本机中性能总会更好