12

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

因为目前我们的小团队中没有人开发过智能手机应用程序,我们很快就需要它,我们想外包它。我们询问了其他公司是否更喜欢 MonoTouch 或 Objective C 进行 iPhone 开发。他们中的大多数人说,他们会选择Objective C。他们说Objective C提供了更多的功能和可能性,它更快,对于MonoTouch,Apple将来有可能不再支持它。所有这些都是真的还是有其他理由更喜欢Objective C?我知道周围还有其他类似的话题,但他们没有回答我的问题,尤其是关于 Apple 对 MonoTouch 的支持的问题。

4

6 回答 6

40

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

如果您正确构建应用程序,这是一种可能性。如果没有:没有。

如果您使用 Java+ ObjC +C#(用于 WP7/Win8 Metro 等),那么这根本不是一个选项

因为目前我们的小团队中没有人开发过智能手机应用程序,我们很快就需要它,我们想外包它。我们询问了其他公司是否更喜欢 MonoTouch 或 Objective C 进行 iPhone 开发。他们中的大多数人说,他们会选择Objective C。

如果您将其外包,您当然应该指定您想要写的内容吗?如果您需要在内部支持它,并且您只有 C# 技能,那么 MonoTouch 等对您(支付账单的人)更有意义!

他们说Objective C提供了更多的功能和可能性,

FUD,也不对。Monotouch 提供完整的 API。如果它不存在,作为 Xamarin 绑定它(他们以前经常这样做)

它更快

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

程序员错误是 iOS 应用程序性能问题的更常见原因。例如,不让事情脱离 UI 线程(这在 MonoTouch 中比在 ObjC 中更容易做到,这些块有很大帮助),或者花费太长时间才能退出 FinishedLaunching(如果你愿意,可以使用“main”方法)真的不是……)

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

而对于 MonoTouch,Apple 将来可能不再支持它。

是的,有机会。蒂姆库克也有可能用苹果的数十亿美元跑掉并购买整个夏威夷(而不是拉里埃里森的“我将拥有这个岛”购买)。但现在机会相当渺茫。

所有这些都是真的还是有其他理由更喜欢Objective C?我知道周围还有其他类似的话题,但他们没有回答我的问题,尤其是关于 Apple 对 MonoTouch 的支持的问题。

Apple 不支持 MonoTouch。Xamarin 做到了,而且他们做得非常好。除了他们的产品 XCode,Apple 不支持任何东西。

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

有理由更喜欢 ObjC,这将是:

  • 你已经知道 ObjC 和 CocoaTouch 并且喜欢它。
  • 你的团队已经知道 ObjC 和 CocoaTouch,或者你可以轻松雇佣懂的人(注意:目前,据我所知,iOS 开发人员的招聘成本非常高,如果你能找到他们的话)
  • 您需要在测试版发布之日使用它们。请记住,您可以使用当前的 MonoTouch 并将其部署到您的 iOS[已编辑] 设备上并安装测试版。你只是不能使用 iOS6 YET 中的新东西(Xamarin 说“大约 2 周”,现在应该是……)。另外请记住,您不能将应用程序部署到使用 beta SDK 构建的商店,即使您不使用其中的任何东西。您甚至不能在产品描述中提及 iOS[已编辑](我已经尝试过)
  • 你喜欢 [squareBrackets andTheOccasional:@"strange syntax things"];

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

于 2012-06-27T15:11:24.713 回答
11

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

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

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

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

我显然是 MonoTouch 的粉丝,但我必须说一件事:我认为公司认为因为他们精通 C#/.NET 就可以轻松开发和/或维护 iOS 是错误的使用 MonoTouch 的应用程序。这不是真的,因为 MonoTouch 基本上是 CocoaTouch API 之上的 C# 层,这意味着您必须学习 Apple 的做事方式。你有应用程序委托和视图控制器以及所有 UIKit 的东西。那里有一个真正的学习曲线。但是,如果您精通 C#,MonoTouch 将是一个巨大的帮助。

更新:
我找到了关于 C# 速度的文章:头对头基准测试:C++ vs .NET

于 2012-06-27T12:13:08.680 回答
8

实际上,我已经为我开发过的每一个应用程序都使用了 MonoTouch。性能从来都不是问题,我无法想象使用 Objective-C 对我来说会有多糟糕。我在美国应用商店中拥有 2 个排名前 10 的应用:“Draw A Stickman”和“Draw A Stickman: Episode 2”(别担心,我们正在开发更多)。

如果您了解 C# 和 .Net,那么与尝试学习 Objective-C 相比,您在生产力方面的收获将是巨大的。在进行 iOS 开发之前,我是一名 C# .Net 开发人员(仅限 Windows),向 MonoTouch 的过渡非常棒。

如果您喜欢 Linq、不到 100 行解析 XML、垃圾收集、泛型、简单的多线程以及没有奇怪的方括号,那么 MonoTouch 适合您。

于 2012-06-27T12:02:23.843 回答
6

我同时使用 Objective-C 和 c# (MonoTouch & Droid),我都非常喜欢。当我在 c# 中编码时,有很多我喜欢在 Obj-C 中使用的功能,例如 Linq,而当我在 Obj-C 中编码时,我希望在 c# 中拥有很多东西,但我很快就适应了我正在编码的任何东西。关于性能,我根本没有发现任何差异,即使是相当图形密集的东西,所以我不会用它作为不使用 c# 的理由。

我认为这最终取决于你对编码的习惯,当然,如果你有一个设计良好的跨平台项目,如果你使用 Mono,你可以拥有完全跨平台的核心代码,你只需要做 UI以特定于平台的方式的东西——当涉及到这一点时,显然你需要了解本机的东西才能让你的 UI 以适合平台和用户熟悉的方式工作。

于 2012-10-12T08:48:34.577 回答
3

我们有一个使用 MS SQL 作为数据存储的业务线应用程序,并且有 WinForms 和 Web UI。它与我们的 windows mobile 6.5 和带有网络服务的平板电脑应用程序集成。所有c#。

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

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

我们的主要问题是找到熟悉 iPhone 和 iPad UI 的 ac# 程序员。

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

性能一直不是问题——我们的应用程序很活泼,尽管它在幕后做了很多事情。

于 2012-06-30T21:20:15.577 回答
-2

没有人可以肯定地告诉你苹果会支持什么,将来不会支持什么,但是苹果过去在单声道方面存在一些问题,而且由于历史往往会重演,那么这种情况可能会发生再次

话虽如此,始终配合原生应用开发SDKS和环境,会更加灵活,并且会实时更新,性能总是在原生更好

于 2012-06-27T11:39:56.117 回答