Ahhhmmmm ...我不确定stackoverflow管理员是否会删除我的答案。请原谅我,我将花几分钟时间阅读这篇冗长的回复(如果您有兴趣继续阅读)。
我在 2010 年创办了自己的公司。我们只在基于 php、mysql、html、jquery 的网站上工作。随着移动平台越来越受到关注,我们开始开发基于 Sencha Touch + PhoneGap 的移动应用程序。2011 年底,我用 Sencha Touch + PhoneGap 培训了我的 12 名开发人员。您可以了解在一个新框架中学习和培训一个由 12 名开发人员组成的团队需要付出多少努力。
在开发了两打以上基于PhoneGap的专业应用程序之后,我们意识到它与原生应用程序相去甚远。只有一个例子就足够了——PhoneGap 应用程序需要更长的时间来将初始 html 页面加载到 webview 中。在启动画面之后出现一个空白的白色屏幕(在 android 上更可怕!)。在最近的 phonegap 版本中,它已修复。但是使用 phonegap 的人非常清楚它与真正的 obj-c 应用程序还有多远。我们在PhoneGap+Sencha Touch 框架中工作了一年。
我们停止了在 PhoneGap 的工作,并开始在 Titanium 中学习和培训我的 12 个人。我知道从头开始创建另一个新框架是多么艰巨的工作。我们与钛合作了 2 年,为 iOS 和 Android 开发了 30 多个成功的钛专业应用程序。我们有开发钛模块的专家。举个例子,我们在 iOS 和 Android 上都开发了 PayPal 钛模块。(你一定是在傻笑,这有什么了不起的!它已经由钛团队开发了)。不,不使用旧的 MPL 库。我们使用了最新的 Paypal sdk 2.8.0,并且没有可用的在线模块使用它。
2014 年年中,我们开始开发 Tinder/Lovoo 克隆类型的应用程序。我们为类似的动画开发了一个 ti 模块(通过实现 UIView drawRect)。一切正常。但是当它在 iPhone 上运行时,设备变得过热,并且动画页面上的电池电量急剧耗尽。我们创建了一个示例演示 Xcode 应用程序并应用了相同的动画,在 Instruments 中进行了测试,一切都很好。内存或处理器没有过载,设备保持凉爽,电池性能良好。我们尝试了一切可能的方法来使其在钛模块中变得更好,但没有运气。最后发现钛本身需要巨大的足迹来运行它自己庞大的框架,并且对于每一个动作,它都会触发大量代理事件并继续监听不必要的事件。复杂的 UIView 动画让它变得疯狂。这只是一个例子 - 在 android 上它是一个很长的故事。
为什么公司决定使用钛?第一个答案是它是跨平台的。您只需在 js 中编写代码,它就可以在 iOS 和 Android 上运行。哈哈。。开个玩笑!对于真正的专业应用程序来说并非如此。Android版本有很多差异和错误,Android版本还有很多工作要做。实际上,我们永远无法为 Android 使用相同的 iOS 代码库精确副本。因此,跨平台理论仅适用于课堂项目。如果您不相信我制作了一个简单的钛 android 项目来捕获图像,请将其上传到服务器上,然后从服务器再次显示它。拿一个 Galaxy S5,在横向模式下(右手边的主页按钮)拍照(不是纵向模式),你可以看到图像方向搞砸了。哦!我忘了,如果你在服务器上上传图片,从钛的安卓应用程序中,图片扩展名变成 .txt
在 Obj-C UINavigationController 中,popToRootViewControllerAnimated 方法是导航回主页的重要功能。这个方法在 Titanium 中是不可用的!
我们花了数百个额外的时间来解决这些尴尬的问题。我的开发团队厌倦了钛。
你现在肯定会问我,为什么我们一开始没有启动 Obj-C?所有钛金属开发人员的答案都是一样的——Javascript 很简单,Web 开发人员已经熟悉它。这是一个大错误。我们将 iPhone 应用程序视为 Web 应用程序。一个网络应用程序在网络浏览器上运行,更具体地说,它在 iPhone 上运行在 iPhone 的 Safari 中。“Safari”本身是一款移动应用,我们希望 Web 应用能够以相同的速度以类似的视觉动画形式运行,这是不可能的。CSS3 动画永远不会与基于 iOS 矢量的 UIView 动画相同。
iOS 不是一个框架或库,它是一个操作系统。Titanium 是一个用 Obj-C 编写的框架。你不能在 Titan 中使用 Xcode 的 Storyboard UI 设计工具。Xcode 开发人员知道 UI 界面设计的“约束”是多么性感。而这种使用约束的视觉吸引力在 Titanium 中是完全缺失的。虽然 ti 团队声称我们可以使用 Ti.UI.FILL/SIZE 等进行约束。但是在我们迁移到原生 Obj-C 之后,我们知道这个约束系统是多么强大!
我只是把头发拉出来,后悔为什么我害怕看到那些带有方括号的 Obj-C 语法并跳回钛合金。仅仅看着 Obj-C 的不熟悉的语法,感觉就像你回到了现代几十年。幸运的是 Swift 的存在,现在在 Xcode 中编写代码变得更加容易。尽管将现有的流行且强大的 Obj-C 库(如 AFNetworking、MBProgressHUD、OpenCV)迁移到 Swift 需要一些时间。
老实说,我真的觉得 Titanium、PhoneGap、Xamarin 等跨平台框架应该被禁止。他们的执照应该被吊销。Titan 是否为您提供原生 iOS 或 Android 中没有的任何额外功能?相反,功能少得多,错误多得多。我不明白为什么,他们如何利用这种现代尖端技术将人们拉回过去,而没有人能阻止他们!引导开发者走错方向怎么可能是合法的?如果 iOS 9 “今天”发布,Titanium 会在下周内为您提供所有新的 API 吗?绝不。他们只是让你退缩,让你不得不使用他们有限的错误 API 集,你需要为模块付费,这可以很容易地在本机代码中完成。
如果你精通javascript,逻辑感强,相信我你可以在很短的时间内学会Obj-C。当您失去调试钛问题的时间和精力时,您可以在本机 Obj-C 中变得更有效率。嗯..关于android我不会说那么高。因为 Android 永远无法与 iOS 相提并论。iOS 诞生于 Mac OS,一个成熟的桌面操作系统。你知道安卓。
不要陷入跨平台困境的陷阱。大量的 Titanium API 仅适用于 iOS,你知道为什么,Android 设备便宜,硬件便宜,不能流畅地运行动画。
最后,远离任何一种平台,坚持纯原生操作系统,不管一开始有多难,从长远来看,你会得到很好的回报,相信我!
对于 Titanium 团队,我查看了您的 Obj-C 和 Java 源代码。我很尊重你们,你们确实是 Obj-C、Java、node.js、python 和 javascript 方面的专家并且经验丰富。但为什么?你为什么把人们引向错误的方向?您非常清楚构建钛金属 android/ios 模块并对其进行测试浪费了多少时间。你为什么不把你的努力放在更好的东西上。