8

基本上我需要你的建议,我的好朋友:D

在过去的六个月里,我正在使用Titanium Appcelerator移动框架探索/学习/开发 iOS 应用程序。我的经历大多是好的或非常好的。

Titanium 的一些负面影响会浪费时间,尤其是在设备上进行测试时。仅使用 Xcode(本机)时,您的应用程序会立即在设备上启动,而使用 Titanium 您必须等待一段时间(1-2 分钟)才能构建应用程序,然后将其安装到设备上(iTunes 或 iPhone 配置)效用)。

基本上你可以在本地做的所有事情都可以用 Javascript + Titanium 来做。如果 Titanium 不支持 iOS 框架的某些部分,您可以构建一个原生 Objective-C 模块并在您的 Javascript 代码中包含这些功能。

我现在使用 Titanium Appcelerator 并使用 Javascript 构建应用程序感到非常自在。我还在为 iOS 构建一些模块时学习了一些 Objective-C。例如。我在我的第一个 iOS 应用Spellery中使用的DeviceMotion

现在的问题

大多数公司只想要本地开发人员并且对 Titanium 持怀疑态度。Titanium 与其他跨平台 SDK(例如 PhoneGap)不同,因为在这里您实际上使用了本机组件(按钮、标签等)并且您的应用程序没有在 WebView 中运行。但如果公司想要原生,那么你不能强迫他们使用 Titanium。

由于我想将开发移动应用程序作为工作,我是否应该放弃过去六个月对 Titanium 的深入探索并学习本地编程这些应用程序?

你对此有什么想法,因为我认为学习/完善它们没有任何意义?

我现在是 Appcelerator Titanium 的忠实粉丝,所以这是一个非常沉重的决定。

4

7 回答 7

11

坦率地说,我仍然建议学习更多的 Objective-C。它是一种非常强大的语言,它旨在让您更轻松地处理 Apple 认为必需的许多事情(例如,动画、持久性、数据库、MVC)。Apple 非常紧密地围绕 Objective-C 设计了他们的框架,要真正很好地使用它们,你必须从他们的语言中使用它们。另外,您还知道哪些其他语言?一方面,我发现 Objective-C 在来自 C/C++ 和脚本语言 (Ruby) 之后要容易得多。这完全取决于你想要在你的应用中有多少 iOSness。即使它 Titanium 可以让用户端感受到 iOSy,iOSy 代码实际上编写和维护真的很有趣。它可以是一个非常漂亮的框架。

于 2012-06-27T14:12:53.293 回答
6

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 模块并对其进行测试浪费了多少时间。你为什么不把你的努力放在更好的东西上。

于 2014-12-29T10:11:31.637 回答
6

我同意之前答案中所说的一切,您似乎已经接受回到光明的一面——不错的选择!

我只想补充一点:不要将这六个月视为浪费。在您使用 Titanium 期间,您了解了很多技术细节,以及 iOS 的可能性和局限性,当您切换到 Objective-C 时,这些应该会很有用。

于 2012-06-27T14:58:55.230 回答
4

我敢打赌,很多其他人会加入其他“重复”问题的帖子,以及他们自己的激烈意见。所以我会把它留给他们,并提供我自己的经验。

我认为有充分的理由深入了解两者。原因如下:

Titanium 可让您真正快速地构建应用程序,而且它每天都在变得越来越可靠。我最近构建了一个应用程序来直接比较 Titanium、本机和几个竞争对手框架之间的开发时间。Native大约是一个半星期。竞争对手大约是 2 周。钛是3天。这给了我很多时间来玩这个应用程序,并使产品比竞争对手好得多。我还能够让它在 Android 和移动 Web 上运行得一样好。我有大约 5 个基于平台的条件,所以代码有很好的奇偶性。

Native 有你提到的优势。我要补充一点,您还可以访问平台提供的任何内容。了解原生将告诉您如何构建应用程序(即使使用 JavaScript),以及如何为这些应用程序构建模块。您也可以尝试打开 Titanium 生成的 Xcode 项目,并通过它直接在设备上运行。您可能需要进行干净的构建(在 Xcode 中),但它比通过 iTunes 运行更快。

另外,我认为 Objective-C 本身就是一门优美的语言。它与我“长大”时使用的代码(Java、C#、PHP、VB 等)非常不同。花了一段时间才习惯它,但我很高兴我投入的时间。

免责声明:我为 Appcelerator 工作。希望你能在上面区分观点和事实。

于 2012-06-27T14:24:04.687 回答
3

要添加到@Linuxios 的出色答案:

既然你说你想进入移动开发作为职业,那么绝对要学习 Objective-C、XCode 和 iOS SDK。最后,这将取决于您、您的雇主以及在某种程度上您的客户的需求。但了解 iOS 是必不可少的。

此外,根据我的经验,如果应用程序很复杂,那么原生将是可行的方法,如果仅仅是为了便于调试,并且正如您所说,构建时间更短。

更新:要补充的另一件事是,如果性能是关键(即游戏),那么本机(C/C++/Objective-C)是要走的路。

于 2012-06-27T14:21:35.467 回答
3

查看您感兴趣的职位发布,这应该可以回答您的问题。如果雇主正在寻找 XCode 专业知识并且对 Titanium 不感兴趣,那么请关注 XCode...

于 2012-06-27T14:12:57.127 回答
1

从我的角度来看,学习原生应用程序开发、iOS 和 Android 总是非常有用的。正如您已经提到的,大多数公司都在寻找原生应用程序开发人员,因为他们不想过多地依赖外部公司或框架,而不是平台的实际开发人员(Android、iOS 等)。我还认为,一旦你能够开发原生应用程序,这比使用 Titanium 或 PhoneGap 等框架要容易得多。此外,提高自己的技能总是好的,尤其是原生应用程序开发是一个可以学到很多东西的领域。不仅仅是语言,还有底层移动操作系统的架构。特别是对于苹果来说,我认为学习原生开发是至关重要的。

最后但同样重要的是,我建议您继续使用 Swift。它是一种伟大而强大的语言,修复了 Objective-C 的许多弱点。您基本上可以使用 Swift 从头开始​​,而不需要 Objective-C。完整的 Cocoa-API 可以通过 Swift 访问。但如果你愿意,你仍然可以结合 Objective-C 和 Swift。例如,如果您需要使用尚未在 Swift 中实现的外部库。

希望我能帮到你一点。

于 2014-12-29T10:26:04.273 回答