PhoneGap与MonoTouch在数据密集型应用中的比较

45

我们希望开发一个数据密集型的移动设备应用程序。我们面临的主要问题是:

  1. 我们将不得不在客户端存储大量数据
  2. 客户端希望应用程序能够离线使用
  3. 我们的技能集非常偏向于Web开发C# ASP.Net,而不是Objective C

我们考虑了三种可能性:

  1. 使用HTML5本地存储的Web应用程序,利用离线应用程序缓存。 我们的本地存储限制为5MB,但某些浏览器可能降至2.5MB。

  2. 通过PhoneGap创建本地应用程序的Web应用程序。 这里的一个巨大优势是我们可以使用文件系统进行存储。缺点是它将不得不通过应用商店(尤其是iOS)- Apple对订阅应用程序的30%收入抽成。

  3. 使用MonoTouch构建Android和iOS的应用程序。 好的一面是,我们可以使用C#和.Net来完成。坏的方面是没有Blackberry支持。

问题

我很难看出在这种情况下使用MonoTouch相比PhoneGap有任何真正的优势。它们是什么?是否存在这样的优势?

在这种情况下,例如将数据保存到文件系统中将非常有用,但我相信phone gap可以通过File对象实现此功能。显然,MonoTouch将利用System.IO。

是否存在一些情况下,MonoTouch具有明确的附加功能,特别适用于移动设备开发,例如地理位置或相机类型函数?还是PhoneGap几乎覆盖了所有这些内容。

额外问题

是否有其他我忽略的选项或者三种方法的其他主要优势/劣势?

感谢大家的专业知识。


2
你可以看一下AdobeFlex(https://www.adobe.com/de/products/flex.html)。它声称能够编译成本地的iOS二进制文件。 - basti
@chiffre。谢谢 - 但是这是什么编程语言?它看起来像ActionScript,所以它是一种Flash变体吗?是这样的吗? - Crab Bucket
这是ActionScript和MXML。只要您只使用预先提供的控件,一切都相当容易。FlashBuilder有60天的试用期,所以您可以试用一下。我在尝试创建自己的用户控件/组件时遇到了一些困难。 - basti
我认为MobileAIR不会编译成本地的iOS应用,而是在现在可用于iOS的AIR运行时中运行。无论如何,您仍然需要使用ActionScript和Flex API进行编程。 - ColinE
@ColinE 你可以看一下http://flex.org/flexgame/ 我试过了,在我的iPad上没有安装其他任何东西。也许AIR被打包到应用程序中,但用户不知道/看不到它 :) - basti
显示剩余2条评论
3个回答

40
我们刚刚完成了一个使用MonoTouch编写的数据密集型应用程序。该应用程序通过中间层访问SAP数据,并在应用程序上公开这些数据。它还允许应用程序直接向SAP进行更新,同样是通过同一中间层。
我们正在使用MonoDroid将其移植到Windows Phone和Android平台。
我花费了一些时间说服老板,MonoTouch是前进的方向,我们之前尝试过一些不同的产品,包括jQuery mobile、ExtJS和Obj C。
当我试图说服他的时候,正值Attachmate收购的时期,看起来,有时候,MonoTouch注定要失败。幸运的是(对我来说),Xamarin像传说中的凤凰一样从火焰中崛起,并继续开发Mono*成为今天的样子。
作为C#开发人员(和Mono爱好者),与Obj C或任何HTML/JavaScript相比,主要优势是我可以使用C#完成工作。文档非常好,当文档不太完善(最近已经更新)时,社区做出了补充。
IRC频道非常活跃,Xamarin员工和社区布道者总是乐意帮助或为问题提供见解。邮件列表也是如此。
另一个优势是围绕MT增长的生态系统。与XCode等价物相比,MT.Dialog使开发基于表的UI变得轻而易举。再加上.Net BCL,它虽然是基于Silverlight的子集,但具有序列化、电子邮件和密码学等所有功能...如果.Net不涵盖它,或者没有特定的Mono*项目,您仍然可以使用ObjC插件与MT代码一起使用。
我不同意MT还需要证明自己作为一个可靠的平台。我们正在使用它,虽然我们是一家相对较小的公司,但仍有许多大公司也在使用它。据报道,Apple在澳大利亚的电视广告中展示的一些应用程序是使用MT编写的。

为了保持客观,对我来说MonoTouch的两个问题是你仍然需要能够阅读ObjC(虽然,老实说,我不认为这是一个问题......作为一名“C#开发人员”,我必须能够阅读和编写各种语言)以及历史上MonoDevelop有点buggy。主要的错误似乎已经被解决了,并且由于它是一个开源项目,您可以随时修复它们并帮助我们其余的人!

回答您的关注:

  1. 我们将不得不在客户端存储大量数据

在C#中使用.Net的System.IO类。如果您不确定这些内容,MSDN有很多示例(MT隐藏了文件存储的iOS实现)。

  1. 客户想让应用在离线状态下工作

它们都可以做到,但在我看来,本机应用程序总是会感觉更好。

  1. 我们的技能集非常适合Web开发C# ASP.Net,绝对不是Objective C

MonoTouch是C# - 充分利用您的优势,几周内就可拥有一个应用程序,而不是数月时间!

我的两分钱!我不会犹豫再次选择同样的路线。


不错的回答。我有一个问题,当移植到MonoDroid时,我猜您必须重新开始编写UI代码?但是您可以共享业务逻辑吗? - ColinE
如果您在设计解决方案时有足够的远见,您将能够在应用程序之间重复使用所有业务逻辑。在MonoDroid和MonoTouch之间,有一些名为MD.Dialog和MT.Dialog的开源项目 - 这两个库之间存在相当大的重用,因此您可以重复使用UI的某些部分 - 不是全部,但是使用M * .Dialog,您可以编写自己的元素。 - Darbio
@JD 这是一个很好的答案。谢谢你,这真的很有用,可以钩入某人的实际经验。通过文件系统和System.IO的示例 - PhoneGap是否为您提供了相同的文件对象?与monoTouch相比,PhoneGap存在显着的功能差距吗?会产生实际的区别吗?还是优势在于使用C#而不是JavaScript进行开发,这将更容易(至少对我们来说)。当然,您获得了一个真正的本地应用程序,而不是包装在Web应用程序中。 - Crab Bucket
谢谢。我还没有尝试在PhoneGap中访问文件系统,但你们作为.NET开发人员的优势是,你们已经知道如何操作文件系统、发送电子邮件、使用Web服务、创建/消费iOS上的对象等等。 - Darbio

14

我已经使用PhoneGap一段时间了(在WP7上),但没有使用MonoTouch,不过我是一名有经验的C# / Silverlight开发人员。

MonoTouch的几个优点:

  • 您编写的代码会产生本地UI,在所有平台上提供最佳体验
  • C#是一种“企业级”编程语言。它非常适合于开发数据密集型应用程序
  • 你当前的技能将在这里发挥作用
  • 通过应用商店提供numerous applications written with MonoTouch的应用程序。

MonoTouch的一些缺点:

  • 您需要针对iPhone API编写C#代码,因此要想移植到Android,您需要为MonoDroid拥有单独的UI层。

PhoneGap的优点:

  • 看起来PhoneGap框架已经相当成熟,许多应用程序都使用PhoneGap编写,支持的操作系统范围广泛。
  • PhoneGap有很好的社区支持。
  • 它使用HTML5,这被许多人视为未来的技术。这是一个相当广泛的声明,然而大多数主要厂商(微软、Adobe等)都在支持它。

PhoneGap的缺点:

  • 它使用JavaScript,可能是最被误解的广泛使用语言
  • UI是用HTML编写的。尽管像jQuery Mobile这样的框架做出了最大的努力,但它永远不会感觉到本地。
  • 因为它有平台特定的“shim”代码来提供一致的API,所以你会发现平台特定的问题。然而,我发现PhoneGap团队很快就修复了这些问题。

总之,这是一个艰难的选择!

个人而言,我会选择使用PhoneGap,但不会试图模拟任何特定操作系统的外观和感觉,相反,创建适合您的应用程序的自己的用户界面,并在所有平台上使用它。

谢谢你的回答。非常有启发性。我在问关于MonoTouch http://xamarin.com/monotouch 而不是 monCross - 你是指 MonoTouch - 这只是一个打字错误吗? - Crab Bucket
@ColinE:你见过使用PhoneGap开发的数据密集型应用吗?我也对这个话题很感兴趣,但是我只能找到一些相对“简单”的应用。 - basti
4
你没有在AppStore上搜寻PhoneGap应用程序,而是去了PhoneGap的网站。 如果你给MonoTouch同样的待遇,你会很快发现这个链接:http://xamarin.com/apps - 上面有数百个使用MonoTouch和Mono for Android构建的应用程序。 - Rolf Bjarne Kvinge
很棒的答案。关于PhoneGap的UI“它永远不会感觉像本地应用程序”。Kendo UI与PhoneGap结合使用可以解决这个问题。 - Adam Caviness
@ColinE 这篇文章真的帮了我很多。但是我仍然不确定你会更喜欢哪种应用程序:在iTunes上的Pose。它似乎是用HTML5开发的,但是哪种工具和技术会更好呢?请帮帮我。 - Ajay Sharma

2
昨天(2012年2月8日)发布了MonoTouch的新版本5.2,有许多新功能使开发iOS应用程序更加容易和快速。可以从这里访问有关它的详细信息:http://blog.xamarin.com/
使MonoTouch成为一种特别有趣的技术的一件事是能够开发一些非常复杂的应用程序,而不需要互联网连接。这可能是一个重要的优点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接