【问题标题】:Why is using MonoTouch for iPhone development not recommended? [closed]为什么不推荐使用 MonoTouch 进​​行 iPhone 开发? [关闭]
【发布时间】:2012-06-27 11:37:03
【问题描述】:

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

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

【问题讨论】:

标签: ios xamarin.ios


【解决方案1】:

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

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

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

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

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

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

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

更快

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

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

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

为了 MonoTouch 有可能 Apple 将不再支持它 未来。

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

所有这些都是真的还是有其他理由更喜欢 目标C?我知道周围还有其他类似的线程,但他们 没有回答我的问题,尤其是关于苹果的问题 支持 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 风格开发需要什么。

【讨论】:

  • 感谢您的详细解答。我也开始阅读你提到的这本书,到目前为止,获得一个概述非常酷。
  • 太好了,很高兴你发现它很有趣 - 我现在已经完成了大约 75%,这也有助于了解三个平台之间的术语差异。
【解决方案2】:

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

确实没有人能预测 Apple 会做什么,但 Apple 会像 2010 年夏天那样禁止第三方工具包和 API 的可能性很小。那只是短短的时间,他们就彻底推翻了这个决定。他们目前的重点是使应用程序开发更容易,这意味着该领域对替代开发方法保持开放。我认为 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 delegates 和 view controllers 以及所有 UIKit 的东西。那里有一个真正的学习曲线。但是,如果您精通 C#,MonoTouch 将是一个巨大的帮助。

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

【讨论】:

  • MonoTouch 使用提前编译,所以Java(通常适用)之间的比较不在这种情况下。它运行本地 ARM 程序集,来自 mono 代码生成器,使用 gcc 或 llvm 链接和构建(与所有 xcode/objc 应用程序相同)
  • 没错,但我是在比较整体执行速度,而不是底层架构。不过,谢谢,很好的澄清。 (TBH,我的 Java 比较也可能存在缺陷:C# 可能更快。但无论如何,它在同一数量级内。)
【解决方案3】:

我实际上在我开发的每个应用程序中都使用了 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 适合您。

【讨论】:

    【解决方案4】:

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

    我认为这最终取决于您对编码感到满意,当然,对于一个设计良好的跨平台项目,如果您使用 Mono,您可以拥有完全跨平台的核心代码,而且您只需要以特定于平台的方式执行 UI 工作 - 显然,您需要了解原生内容才能让您的 UI 以适合平台且用户熟悉的方式工作。

    【讨论】:

    • 我对你在 C# 中错过的 Objective-C 特性很感兴趣。需要详细说明吗?
    【解决方案5】:

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

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

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

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

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

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

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

      • 在他们试图杀死 Flash 时,除了“除了 ObjC 什么都没有”之外,Apple 从来没有遇到过 Mono 应用程序的问题。即使他们正式拒绝“非 ObjC 应用程序”,他们仍然在批准 MonoTouch 应用程序(包括我的)
      猜你喜欢
      • 2010-09-06
      • 2018-12-21
      • 2014-02-13
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多