264

在今年的所有 IDE 演变(主题上的所有平台都发生了变化)之后,我希望了解这些平台的技术状态。

每个人的优点和缺点是什么?其中一种方法有一些限制吗?

我在 C# 和 Javascript 方面有很好的经验,而不是没有可能倾向于一侧的编程语言影响。

4

6 回答 6

350
于 2013-10-18T13:11:16.827 回答
105

我对 Appcelerator Titanium 的工作并不多,但我会将我对它的理解放在最后。

我可以更多地谈谈 PhoneGap 和 Xamarin 之间的区别,因为我每周工作 5 天(或更多天)。

如果您已经熟悉 C# 和 JavaScript,那么我想的问题是,业务逻辑是否位于更适合 JavaScript 或 C# 的领域?

电话间隙

PhoneGap 旨在允许您使用JavaScript 和 HTML编写应用程序,并且它们提供的许多功能旨在模仿当前提议的功能规范,这些规范最终将在 HTML5 中可用。在我看来,PhoneGap 的一大好处是,由于你是用 HTML 来做 UI,它可以很容易地在平台之间移植。不利的一面是,因为您在平台之间移植相同的 UI,所以在其中任何一个平台上都不会感觉像在家一样。这意味着,如果不进行进一步的调整,您将无法在 iOS 和 Android 中拥有一个完全自在的应用程序,这意味着它具有 iOS 和 Android 样式。您的大部分逻辑都可以使用 JavaScript 编写,这意味着它也可以在平台之间移植。如果当前的PhoneGap API 可以满足您的大部分需求,那么启动和运行起来非常容易。但是,如果您需要设备提供的 API 中没有的东西,那么您就会享受到Plugin Development的乐趣,这将使用本机设备选择的开发语言(有一个警告,但我会谈到那),这意味着您可能需要在 Objective-C、Java 等方面快速上手。这个模型的好处是,您通常可以调整许多不同的本机库来满足您的目的,而且许多库已经有了PhoneGap 插件。尽管您可能对这些语言没有太多经验,但至少会有大量的例子可供参考。

赛马林

Xamarin.iOS 和 Xamarin.Android(也称为 MonoTouch 和 MonoDroid)旨在让您拥有一个业务逻辑库,并在您的应用程序中使用它,并将其连接到您的 UI 中。因为它基于 .NET 4.5,所以您会获得一些很棒的 lambda 表示法LINQ和一大堆其他 C# 令人敬畏的东西,这可以减少编写业务逻辑的痛苦。这里的缺点是 Xamarin 期望您希望您的应用程序在设备上真正具有原生的感觉,这意味着您可能最终会为每个平台重写您的 UI,然后再将其与业务逻辑挂钩。我听说过MvvmCross,它旨在让您更轻松,但我还没有真正有机会研究它。如果你熟悉 C# 中的MVVM系统,你可能想看看这个。说到原生库,MonoTouch 就变得有趣了。MonoTouch 需要一个绑定来告诉您的 C# 代码如何链接到底层的 Objective-C 和 Java 代码。其中一些库已经有绑定,但如果你的没有,创建一个可能会很有趣。Xamarin 制作了一个名为Objective Sharpie的工具来帮助完成此过程,并且在大多数情况下,它可以帮助您完成95% 的工作。剩下的 5% 可能会花费您 80% 的时间来尝试绑定库。

更新

如以下评论中所述,Xamarin 已发布Xamarin Forms,它是围绕平台特定 UI 组件的跨平台抽象。绝对值得一看。

PhoneGap / Xamarin 混合

现在因为我说过我会解决它,所以上面 PhoneGap 中提到的警告是一种混合方法,您可以在其中使用 PhoneGap 部分,而 Xamarin 部分。我对此有相当多的经验,我会提醒你不要这样做高度。问题在于,这是一片无人区,如果你遇到问题,几乎没有人会接近你正在做的事情,并且会质疑你正在努力做的事情。这是可行的,但绝对不好玩

加速器钛

正如我之前提到的,我对 Appcelerator Titanium 的工作并不多,因此对于它们之间的差异,我建议您查看Comparing Titanium 和 Phonegap或Comparing between Corona、Phonegap、Titanium,因为它对差异有非常详尽的描述. 基本上,尽管它们都使用 JavaScript,但 JavaScript 的解释方式似乎略有不同。使用 Titanium,您将编写 JavaScript 到Titanium SDK ,而使用 PhoneGap,您将使用PhoneGap API编写应用程序. 由于 PhoneGap 非常符合 HTML5 和 JavaScript 标准,因此您可以使用几乎任何您想要的 JavaScript 库,例如 JQuery。使用 PhoneGap,您的用户界面将由 HTML 和 CSS 组成。使用 Titanium,您将受益于他们的跨平台 XML,该 XML 似乎生成了本机组件。这意味着它肯定会有更好的原生外观和感觉。

于 2013-06-23T18:08:45.193 回答
38

我曾与 Xamarin 合作过。以下是我发现的积极和消极的方面:

正面的

  1. 易于编码,C# 使工作更轻松
  2. 性能不会成为问题
  3. 原生用户界面
  4. 很好的 IDE,很像 Xcode 和 Visual Studio。
  5. Xamarin 调试器
  6. Xamarin SDK 是免费和开源的。维基

负面的

  1. 您需要了解您想要定位的每个平台(iOS、Android、WP8)的 API。但是,您不需要了解 Objective-C 或 Java。
  2. Xamarin 仅在平台之间共享一些东西(例如数据库和 Web 服务)。
  3. 您必须分别设计每个平台的 UI(这可能是福也可能是祸)。
于 2013-11-29T04:40:04.383 回答
11

Phonegap 非常慢:单击一个按钮可能需要 3 秒才能显示下一个屏幕。iscroll 缓慢而跳跃。

还有其他有趣的错误和问题我能够克服,但总的来说 - 还没有完全成熟。

编辑:根据 Grumpy 的评论,实际上慢的不是 Phonegap,而是 JS/浏览器本机引擎

于 2013-08-12T09:51:40.640 回答
8

还有AppGyver Steroids将 PhoneGap 和 Native UI 很好地结合在一起。

使用 Steroids,您可以将本机选项卡、本机导航栏、本机动画和过渡、本机模式窗口、本机抽屉/面板(facebook 侧菜单)等内容添加到您的 PhoneGap 应用程序。

这是一个演示:http: //youtu.be/oXWwDMdoTCk?t= 20m17s

于 2014-08-01T09:52:09.190 回答
4

作为替代方案,您可能想在 bridgeit.mobi 上查看 BridgeIt。开源,它解决了上面讨论的浏览器性能/一致性问题,因为它利用了设备上的标准浏览器与 web 视图浏览器。它还允许您访问本机功能,而不必担心应用商店部署和/或本机容器。

我已经将 if 用于简单的基于相机的访问和扫描仪访问,它适用于简单的应用程序。文档有点轻。不确定它在更复杂的应用程序上会如何做。

于 2014-05-12T17:13:58.627 回答