Xamarin 2.0 vs Appcelerator Titanium v​​s PhoneGap [重复]

2024-02-15

在今年所有 IDE 的发展(所有相关平台都发生了变化)之后,我希望了解这些平台的技术状况。

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

我在 C# 和 Javascript 方面有很好的经验,没有任何编程语言的影响可能会偏向一边。


Overview

据报道蒂姆·安德森 http://www.theregister.co.uk/Print/2013/02/25/cross_platform_abstraction/

跨平台开发 is a big deal,并将继续如此,直到有一天每个人都使用同一个平台。安卓? HTML?网络工具包? iOS?视窗?哈马林?钛?电话间隙?电晕?等等。

有时我听到这样说本质上有两种方法跨平台移动应用程序。你可以use an 嵌入式 浏览器控制并写一个Web 应用程序包装为本机应用程序, 作为 在 Adob​​e PhoneGap/Cordova 或 Sencha 采取的类似方法中,或者 你可以use a 跨平台工具 that 创造原生 应用,例如 Xamarin Studio、Appcelerator Titanium 或 Embarcardero 火猴.

但在第二类中,存在多样性。尤其, 它们对用户的抽象程度各不相同 界面。

这是权衡。如果您设计跨平台框架, 可以让您的应用程序在每个平台上以几乎相同的方式工作。 如果你在所有平台上共享 UI 设计,那么很难 让您的设计在所有情况下都感觉同样正确。可能会更好 采用大多数游戏采用的方法,使用以下设计 使您的应用程序与众不同,并充分利用其一致性 平台,即使它没有原生的外观和感觉 任何平台。

editXamarin v3 于 2014 年开始提供以下选择Xamarin.Forms http://xamarin.com/forms以及仍然遵循此处提到的哲学的纯原生(自由进行内联编辑,因为这是一个很好的答案)

另一方面,Xamarin Studio 不尝试提供共享 GUI 框架:

我们不会尝试提供有效的用户界面抽象层 跨所有平台。我们认为这是一个糟糕的方法,会导致 最小公分母用户界面。 (纳特·弗里德曼对蒂姆·安德森说)

这是对的;但缺点是需要为应用程序维护两个或多个用户界面设计。

关于 PhoneGap 和 Titanium 的比较,有很好的报道凯文·威纳里 http://kevinwhinnery.com/post/22764624253/comparing-titanium-and-phonegap blog.

PhoneGap

PhoneGap 的目的是允许基于 HTML 的 Web 应用程序到 被部署和作为本机应用程序安装。 PhoneGap 网络 应用程序被包装在本机应用程序外壳中,并且可以 通过多个平台的本机应用程序商店安装。 此外,PhoneGap 致力于提供通用的本机 API 集 这通常不适用于 Web 应用程序,例如基本的 相机访问、设备触点和传感器尚未暴露在 浏览器。

为了开发 PhoneGap 应用程序,开发人员将创建HTML、CSS、 和 JavaScript本地目录中的文件,就像开发 静态网站。接近原生质量的 UI 性能在里面 浏览器是一项不平凡的任务 - Sencha 拥有一支庞大的网络团队 编程专家全职致力于解决这个问题。甚至 因此,在当今的大多数平台、大多数浏览器中,达到原生质量的 UI 性能响应能力很简单不可能,即使使用像 Sencha Touch 这样先进的框架。是个 浏览器已经“足够好”了吗?这取决于您的要求 和敏感性,但毫无疑问它不如原生 UI。 有时更糟,具体取决于浏览器。

PhoneGap 并不像人们想象的那样真正跨平台,并非所有功能在所有平台上都得到同等支持。

  • Javascript 不是一种应用程序规模的编程语言,有太多的全局范围交互,不同的库通常不能很好地共存。我们花了很多时间试图让 knockout.js 和 jQuery.mobile 很好地协同工作,但我们仍然遇到问题。

  • 框架和库的碎片化景观。选择太多,也有太多不够成熟。

  • 奇怪的是,对于我们应用程序的需求,可以实现不错的性能(尽管不是使用 jQuery.Mobile)。我们尝试了jqMobi(不是很成熟,但是很快)。

  • 与其他应用程序或 cdevice 功能交互的能力非常有限,而且无论如何这都不是跨平台的,因为除了地理定位、相机和本地数据库等少数标准外,HTML5 中没有任何标准。

by 卡尔·瓦克拉维克 http://forums.xamarin.com/discussion/1003/your-opinion-about-several-crossplatform-frameworks#Comment_3334

钛合金加速器

目标是Titanium移动是为了提供高水平、跨平台 JavaScript运行时和移动应用程序接口开发(今天我们支持 iOS、Android 和 Windows Phone。Titanium 实际上与 MacRuby/Hot Cocoa、PHP 或 Node.js 的共同点比与 PhoneGap、Adobe AIR、Corona 或 Rhomobile 的共同点更多。Titanium 构建于两个断言之上关于移动开发: - 有一个移动开发API的核心,可以跨平台标准化。这些领域应该成为代码重用的目标。 - 开发人员在针对该平台进行开发时应纳入特定于平台的 API、UI 约定和功能。这些用例应该存在特定于平台的代码,以提供最佳的体验。

因此,由于这些原因,Titanium 并不是“一次编写,到处运行”的尝试。与 Xamarin 相同。

Titanium 将朝着类似于 Xamarin 的方向迈出进一步的一步。在实践中,他们会做两层不同深度的层:钛层(JS),它给你一个蜜蜂 JS-of-Titanium。如果您想要更底层,请创建一个附加层(称为 Hyperloop),在其中(始终使用 JS)将您直接回调到 SO 的本机 API

Xamarin(+ MVVMCross)

AZDevelop.net http://azdevelop.azurewebsites.net/?page_id=181

Xamarin(最初是 Novell 的一个部门)在过去 18 个月中 将自己的 IDE 和 Visual Studio 管理单元推向市场。这 Mono 的强调前提是创建不同的移动应用程序 使用 C#,同时保持本机 UI 开发策略。

除了打造视觉设计平台来开发原生 应用程序,他们有集成的测试套件,合并了本机 库支持和 Nuget 风格的组件存储。最近他们 通过他们的 IDE 提供 iOS 视觉设计,解放了开发人员 从打开 XCode 开始。在 Visual Studio 中,所有三个平台现在都 支持,云测试套件即将推出。

从一开始,Xamarin 就提供了丰富的 Android 视觉设计 经验。我尚未下载或打开 Eclipse 或任何其他 IDE 除了Xamarin。真正令人惊奇的是我能够使用 LINQ 使用集合以及创建自定义委托和事件 这使我摆脱了 Objective-C 和 Java 的限制。许多 我已经被宠坏了的库,比如 Newtonsoft JSON.Net,工作 完美适应所有三种环境。

在我看来,有几个巨大的优势,包括

  • 原生性能
  • 更容易阅读代码(IMO)
  • 可测试性
  • 客户端和服务器之间共享代码
  • 支持(尽管 Xam 在 bugzilla 上可以做得更好)

对我来说升级是结合使用 Xamarin 和 MVVMCross。它仍然是一个相当新的框架,但它诞生于其他几个框架(例如 MvvmLight 和 monocross)的经验,并且现在已在多个已发布的跨平台项目中使用。

结论

了解所有这些框架后,我的选择是选择基于的开发工具产品需求。但一般来说,如果您开始使用一种让您感觉舒服的工具(即使它需要更高的初始开销),那么您将永远使用它。

I chose Xamarin + MVVMCross我必须说我对这个选择感到满意。 我不害怕使用 Native SDK 进行软件更新,也不害怕看到系统功能有限或功能图形中最琐碎的事情。编写相当结构化的代码(DDD+SOA)非常有用有一个核心项目与本机 C# 视图实现共享。

参考文献和链接

  • http://www.theregister.co.uk/Print/2013/02/25/cross_platform_abstraction/ http://www.theregister.co.uk/Print/2013/02/25/cross_platform_abstraction/
  • http://kevinwhinnery.com/post/22764624253/comparing-titanium-and-phonegap http://kevinwhinnery.com/post/22764624253/comparing-titanium-and-phonegap
  • http://forums.xamarin.com/discussion/1003/your-opinion-about-several-crossplatform-frameworks#Comment_3334 http://forums.xamarin.com/discussion/1003/your-opinion-about-several-crossplatform-frameworks#Comment_3334
  • http://azdevelop.azurewebsites.net/?page_id=181 http://azdevelop.azurewebsites.net/?page_id=181
  • https://github.com/MvvmCross/MvvmCross https://github.com/MvvmCross/MvvmCross
  • http://pierceboggan.com/post/51671827932/binding-third-party-objective-c-libraries-in http://pierceboggan.com/post/51671827932/binding-third-party-objective-c-libraries-in
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xamarin 2.0 vs Appcelerator Titanium v​​s PhoneGap [重复] 的相关文章

  • 使用 PhoneGap 使 Android 应用程序易于访问(对于残障人士)

    有人有过使用 PhoneGap 使 Android 应用程序可访问的经验吗 至少我们需要使我们的应用程序符合第 508 条规定 我尝试实现一些标准的辅助功能 文本框标签 向 div 添加标题属性等 但是 当在 Android 中使用 Tal
  • Xamarin - 错误:dsymutil 退出,代码为 72

    最近升级到 VS for Mac 8 10 21 在构建应用程序时 我得到 Xamarin Shared targets 3 3 Error dsymutil exited with code 72 这是 Xcode 13 3 的情况 完整
  • 来自 HTML5 的 Phonegap Bonjour/Zeroconf 或 Websocket IP 发现

    我正在尝试实现一个 Phonegap HTML5 应用程序 该应用程序连接到 Websocket 服务器 在嵌入式设备中运行 也有 Bonjour 服务 以在家庭网络内交换数据 我想知道使用 Phonegap 检测服务器 IP 的最佳方法
  • Xamarin.forms 长时间运行的后台工作

    我是 Xamarin 平台的新手 我正在使用 Xamarin forms 为所有三个主要平台 WP iOS Android 开发应用程序 如何在后台与我的服务器同步数据 gt 我需要类似于 Android Service 的东西 即使用户转
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • Xamarin:找不到“libmonodroid.so”模拟器错误

    我已经遇到这个问题几天了 但还没有找到解决方案 我一直在使用Android 7 0 ARM armeabi v7a 我的模拟器的图像 因为它太慢了 我一直在尝试使用Android 7 0 Intel Atom x86 64 with HAX
  • 汉堡菜单棱镜xamarin形式?

    我正在尝试在 Xamarin Forms 中使用 Prism 创建一个应用程序 Xamarin 表单版本 2 3 3 175 棱镜版本 6 2 0 汉堡菜单可以在 Android 中使用 但是当我在 UWP 上运行它时 它不会显示图标 而且
  • 显示仅允许数字和小数点的输入?

    有什么方法可以定义一个
  • 使用 PhoneGap + iPhone 上传文件

    据我所知 PhoneGap 应用程序大部分 如果不是全部 都是 HTML5 CSS JavaScript iPhone 本身不提供上传文件的控件 PhoneGap是否提供任何允许用户上传文件的机制 图片 视频 以 iPhone 为例 我知道
  • 点击当前选项卡刷新页面时的 Xamarin.Forms TabbedPage 事件

    我正在使用 Xamarin Forms 构建 iOS Android 应用程序 并有一个 TabbedPage 如果用户已经在选项卡 2 上 并且单击了选项卡 2 并且我希望刷新选项卡 2 或者运行我自己的函数 以便我可以自己刷新它 有没有
  • 如何在ListView的TextCell中换行文本?

    如何在ListView的TextCell中换行文本 我尝试设置HasUnevenRows to True但这没有帮助 您不能使用 Xamarin 的 开箱即用 TextCell 功能 但是 您应该能够创建一个 ViewCell 并利用换行模
  • 在phonegap中播放本地声音

    我有一个 wav文件在我的www文件夹 我正在使用 jQuery 和以下代码 警报响起 但声音不播放 难道我做错了什么
  • Cordova 2.7.0 PushPlugin“无法解析cordova”和“无法解析ctx”

    我做了什么 在 cordova android bin 中使用 create 创建了 cordova 项目 通过添加 PushPlugin科尔多瓦普拉曼 https github com apache cordova plugman 将 c
  • Cordova - 检查 WIFI 连接到互联网

    我使用 Cordova 开发智能手机应用程序 在此应用程序中 我需要在向服务器发送请求之前检查互联网连接 为了做到这一点 我使用了 Cordova Connection API 但在设备连接到没有互联网连接的 WIFI 网络的情况下 该 A
  • 加载图像时出现 OutOfMemoryError

    我有一个显示图像的简单页面 来源是一个 URL var img new Image var source new UriImageSource Uri new Uri string Format http xxxx com imagem 0
  • 通过 Appcelerator Cloud API 发送电子邮件

    我试图在我的 Titanium 应用程序中通过 Appcelerator Cloud Service 发送电子邮件 我使用的代码是标准代码 在文档站点上给出 但电子邮件并未发送 Cloud Emails send template welc
  • 如何在 Xamarin.iOS 中使用 @selector

    现在我想在我的 xamarin iOS 项目中实现一些功能 我找到了解决方案 但在 Objective C 中实现 它使用了关键字 selector 我发现这个问题 https stackoverflow com questions 321
  • 音隙 + Ubuntu 12.04

    我正在尝试让 Phonegap 在 Ubuntu 12 04 上工作 到目前为止 我已经使用本指南成功 很好 安装了它 http perrymitchell net article install phonegap ubuntu 12 04
  • Xamarin.Forms 中的 SignalR

    我正在尝试为 SignalR 创建 Xamarin Forms PCL 客户端 我发现的每个教程都是如何将 SignalR 添加到 Xamarin Android 或 Xamarin iOS 如何将 SignalR 添加到 Xamarin
  • 如何将 NSAppTransportSecurity 添加到 Cordova 项目

    我正在从事一个 ionic cordova 项目 该应用程序需要配置 iOS 9 版本的应用程序传输安全例外 有谁知道如何将以下配置添加到 cordova 项目配置文件中 配置 xml

随机推荐

  • 必须声明标量变量

    RowFrom int RowTo int 都是存储过程的全局输入参数 因为我正在使用 T SQL 编译存储过程中的 SQL 查询 然后使用Exec sqlstatement 在存储过程的末尾显示结果 当我尝试使用 RowFrom or R
  • 如何通过 vimeo api 获取视频统计信息

    我想通过 api 调用获取我的 vimeo 帐户中的视频统计信息 我在用着https api vimeo com me videos stats https api vimeo com me videos stats端点获取统计信息 如其文
  • KoGrid JSON 动态小部件,具有嵌套服务器调用

    我正在使用 KOGrid 开发一个仪表板 我的想法是动态创建一堆小部件并将每个小部件的数据绑定到 kogrid 中 我有两个控制器 MVC4 其中第一个返回小部件名称列表 第二个以 JSON 格式返回每个小部件的结果 数据表 我正在使用 J
  • 如何使用 Go 漂亮地打印 JSON?

    有谁知道在 Go 中漂亮打印 JSON 输出的简单方法吗 我想漂亮地打印结果json Marshal 以及格式化现有的 JSON 字符串 使其更易于阅读 MarshalIndent http golang org pkg encoding
  • 从 iOS 应用程序上的 UDP 服务器接收数据无法在 Linux 服务器上工作,但可以在 macbook pro 上工作 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 背景 我做
  • 如何在编译时检测“严格别名”?

    严格别名 https stackoverflow com questions 98650 what is the strict aliasing rule 优化需要特别注意源代码 s a 使用联合而不是指针强制转换 有没有办法使用预处理器指
  • 限制 C# 中通用子类方法可以接受的类型

    如果标题不明确或者重复 我深表歉意 我今天花了很多时间阅读有关泛型的内容 并寻找类似的情况 但无济于事 我正在写一个小游戏引擎 其中一个方面是 单元 承载资源的能力 有些单位可以携带任何资源 有些单位仅限携带某些专门资源 为此 我有以下结构
  • 使用 jQuery 读取 RSS 提要

    我正在尝试使用他们的 RSS feed 和 jquery 来显示我最新的偶然发现的项目的标题 我的功能是 function get stumbleupon get http rss stumbleupon com user fredkell
  • 来自 char 的 C++ 枚举

    好的 我是 C 新手 我拿到了 Bjarne 的书 我正在尝试遵循计算器代码 但是 编译器会吐出有关此部分的错误 token value get token char ch do skip whitespace except n if st
  • 如何表示复杂且混合的数据

    我有一个非常复杂的问题 我正在寻找一个 javascript 或 PHP 脚本 它可以获取任何数据 数组 mysql 查询 并制作表格 数据透视表 图表 简单地说 我想要一个能够获取任何数据并按照我们的要求表示它的应用程序 例如 以用户评价
  • PHP if 或语句不起作用

    我们正在尝试使用下面的代码 if GET 1 1 GET 1 2 当我们尝试这样做时 无论变量的值是什么 即使输入的数据为假 它也会评估为真 当我们使用 if GET 1 1 GET 1 2 并输入数据 使其返回 false 它可以正常工作
  • Java String.substring 方法潜在内存泄漏?

    我正在查看 String 类 API 看起来 substring 方法可能会导致潜在的内存泄漏 因为它与原始 String 共享相同的字符数组 如果原始字符串很大 那么子字符串返回的小字符串可以防止原始字符串 由大数组备份 在Java中被垃
  • 生成某个时间间隔内的时间戳范围并查询所有重叠事件

    我想在一个时间间隔内生成一系列时间戳范围 并在表中查询所有重叠事件 我是almost那里 但对 SQL 还很陌生 似乎无法克服这个困难 为了进行测试 我构建了一个包含一系列事件的表 每个事件都在某个日期时间范围内发生 CREATE TABL
  • WebGL:如何使对象的一部分透明?

    我在浏览器中有一个 3D 球 现在我想在它上面挖一个洞以查看它的背面 我怎样才能使它成为可能 例如 我希望立方体的白色三角形部分可以是透明的 我的意思是我们可以看到立方体后面的背景 我尝试更改片段着色器中的 alpha 代码中的区域是正方形
  • 如何在java中加密和解密URl参数?

    如何在java中加密和解密URl参数而无需像 这样的html字符 import java io UnsupportedEncodingException import java security spec AlgorithmParamete
  • 如何在 Katalon Studio 中执行基本 Java 代码

    我正在尝试在 Katalon Studio 和 Java 中执行这个基本程序 但 O P 显示 if i lt 12 您能帮助我了解如何在 Katalon Studio 中像 IntelliJ 或 Eclipse 一样执行或使用 Java
  • int * 和 int a[size] 有什么区别

    Case I int a 12 printf d sizeof a Case II int a int malloc 12 sizeof int printf d sizeof a 上面的两个代码片段返回不同的输出 48在第一种情况下 4在
  • 如何将 readAsDataURL() 的值分配给变量?

    好吧 我已经看到了很多有关使用 readAsDataURL 的示例和问题 但它们似乎都不能解决我的问题 以下是我的代码 document ready function var fileReader new FileReader form s
  • R 中的 Caret 和 KNN:预测函数给出错误

    我尝试使用 R 中的 caret 包使用简化的 KNN 模型进行预测 它总是给出相同的错误 即使在此处非常简单的可重现示例中也是如此 library caret set seed 1 generate training dataset a
  • Xamarin 2.0 vs Appcelerator Titanium v​​s PhoneGap [重复]

    这个问题在这里已经有答案了 在今年所有 IDE 的发展 所有相关平台都发生了变化 之后 我希望了解这些平台的技术状况 每个人的优点和缺点是什么 其中一种方法有一些限制吗 我在 C 和 Javascript 方面有很好的经验 没有任何编程语言