我应该学习原生iOS开发(Objective-C)还是使用Javascript和Titanium Appcelerator完善我的知识?

基本上我需要你的build议我的好朋友堆栈:D

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

titanium的一些负面部分将会造成时间,特别是在设备上testing时。 当仅使用Xcode(native)时,您的应用程序立即在设备上启动,而在使用Titanium时,您必须等待一段时间(1-2分钟)才能生成应用程序,然后将其安装到设备上(iTunes或iPhoneconfiguration效用)。

基本上,您可以使用Javascript + Titanium进行本地化。 如果Titanium不支持iOS框架的某些部分,则可以构build本机Objective-C模块,并在Javascript代码中使用这些function。

现在使用Titanium Appcelerator和使用Javascript构build应用程序让我感觉非常舒适。 另外我学习了一些Objective-C,同时为iOS构build了一些模块。 例如。 我在第一个iOS应用程序中使用了DeviceMotion 。

现在的问题是

大多数公司只想要本地开发人员,并怀疑Titanium。 titanium是不同于其他跨平台的SDK(例如PhoneGap),因为在这里你实际上使用本地组件(button,标签等),你的应用程序不在WebView中运行。 但是,如果公司想要本土,那么你不能强迫他们使用titanium。

既然我想开发移动应用程序作为一项工作,我应该抛开我过去六个月对Titanium的深入探索,并在本地学习编程这些应用程序?

你对此有什么想法,因为我认为没有必要学习/完善两者。

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

坦率地说,我仍然build议学习一些Objective-C。 这是一个非常强大的语言,它的目的是让你可以更容易地认识苹果认为必要的许多东西(例如,animation,持久性,数据库,MVC)。 苹果已经非常紧密地围绕Objective-Cdevise了他们的框架,要真正使用它们,你必须从他们的语言中使用它们。 另外,你还知道哪些其他的语言? 例如,我从C / C ++和脚本语言(Ruby)中发现Objective-C更容易。 这一切都取决于你的应用程序需要多lessiOS。 即使Titanium可以让用户感觉iOSy,iOSy代码实际上是非常有趣的编写和维护。 它可以是一个相当漂亮的框架。

我同意在以前的答案中所说的一切,你似乎已经接受了回到光明面 – 不错的select!

我只想补充一点:不要把这六个月看成浪费。 在使用Titanium的过程中,您已经学习了很多技术细节,以及iOS的可能性和局限性,并且在切换到Objective-C时应该certificate是有用的。

Ahhhmmmm …我不知道我的答案是否将被删除通过stackoverflowpipe理员。 对不起,我要花几分钟时间阅读这份长时间的回复(如果你有兴趣继续阅读)。

我在2010年创build了自己的公司。我们只在php,mysql,html,jquery网站上工作。 随着移动平台越来越受到重视,我们开始研究基于Sencha Touch + PhoneGap的移动应用程序。 在2011年底,我培养了Sencha Touch + PhoneGap中的12位开发人员。 您可以了解在一个新的框架中学习和培养一个由12名开发人员组成的团队付出了多less努力。

在开发了两套以上专业的基于PhoneGap的应用程序之后,我们意识到它远离本地应用程序。 只有一个例子就足够了 – PhoneGap应用程序需要较长时间才能将最初的html页面加载到webview中。 屏幕上出现一个空白的白色屏幕(在Android上它更可怕!)。 在最近的电话版本中,它是固定的。 但是,谁正在使用phonegap非常清楚从真正的obj-c应用程序。 我们在PhoneGap + Sencha Touch框架中工作了一年。

我们停止了在PhoneGap的工作,并开始学习和训练我的12个titanium家伙。 我知道要从头开始另一个新的框架是多么艰辛的工作。 我们继续与titanium工作了2年,为iOS和Android开发了30多个成功的titanium专业应用程序。 我们获得了开发titanium模块的专家。 例如,我们在iOS和Android上开发了PayPaltitanium模块。 (你一定是傻傻的,那么这么棒!这已经是titanium队的发展了)。 不,不使用旧的MPL库。 我们使用最新的Paypal sdk 2.8.0,并且没有在线使用它的模块。

在2014年年中,我们开始了一个Tinder / Lovoo克隆types的应用程序的工作。 我们为类似的animation开发了一个ti模块(通过实现UIView drawRect)。 一切工作正常。 但是当它在iPhone上运行时,设备变得过热,并且在animation页面上显着地耗尽电池。 我们创build了一个示例演示Xcode应用程序,并应用相同的animation,在乐器中testing,一切都很好。 内存或处理器没有超载,设备保持冷静,电池性能很好。 我们尽一切可能使titanium模块更好,没有运气。 最后发现,titanium金属本身需要占用大量的资源才能运行它自己庞大的框架,而且对于每一个行动,它都会引发大量代理事件,并不断收听不必要的事件。 复杂的UIViewanimation使它变得疯狂。 这只是一个例子 – 在Android上,这是一个漫长的故事。

为什么公司决定使用titanium? 第一个答案是它是跨平台的。 您只需在js中编写代码,它就可以在iOS和Android上运行。 哈哈..这样的笑话! 一个真正的专业应用程序是不正确的。 在Android版本上有很多的差异和错误,这是Android版本的更多工作的负载。 实际上,我们永远无法使用Android的相同iOS代码库精确副本。 所以跨平台理论只适用于阶级项目。 如果你不相信我做一个简单的titanium的android项目捕捉图像,上传到服务器,然后再显示它从服务器。 拍摄一张银河S5,在横向模式(右侧的主页button)下拍摄一张照片(不是纵向模式),您可以看到图像方向被搞乱。 哦! 我忘了,从titaniumandroid应用程序,如果你上传图像在服务器上,图像扩展名变成.txt

在Obj-C中,UINavigationController popToRootViewControllerAnimated方法是导航回主页的重要function。 这种方法在Titanium中不可用!

我们花了数百个小时来解决这些尴尬的问题。 我的开发团队厌倦了titanium。

现在肯定会问我,为什么我们一开始并没有启动Obj-C呢? 所有titanium开发人员的答案都是一样的 – Javascript很简单,Web开发人员已经熟悉它了。 这是一个大错误。 我们把iPhone应用程序作为一个Web应用程序。 一个Web应用程序运行在Web浏览器上,更特别的是它在iPhone的Safari内运行。 “Safari”本身就是一个移动应用程序,我们预计Web应用程序应该以相同的速度运行,类似的视觉animation是不可能的。 CSS3animation永远不会像基于iOSvector的UIViewanimation一样。

iOS不是一个框架或一个库,它是一个操作系统。 titanium是用Obj-C编写的框架。 您不能在titanium中使用Xcode的Storyboard UIdevise工具。 Xcode开发人员知道UI界面devise的“约束”是多么的性感。 而这种使用约束的视觉吸引力在Titanium中完全没有。 虽然ti团队声称我们可以使用Ti.UI.FILL / SIZE等来做约束。但是在我们移植到本地的Obj-C之后,我们知道这个约束系统是多么强大!

我只是把我的头发拉出来,后悔为什么我用方括号害怕地看着那些Obj-C语法并跳回到titanium。 感觉就像你现在正在几十年前一样,只是看着Obj-C的陌生语法。 幸运的是,Swift在那里,现在在Xcode中编码变得更容易了。 虽然它需要一些时间来获得像AFNetworking,MBProgressHUD,OpenCV现有的stream行和强大的Obj-C库迁移到Swift。

说实话,我真的觉得应该禁止Titanium,PhoneGap,Xamarin等跨平台的框架。 他们的执照应该停止。 titanium是否给你任何额外的function,不是本机的iOS或Android? 相反,有更less的function和更多的错误。 我不明白为什么,在这个现代的尖端技术上,他们如何将人们拉回到昔日,没有人阻止他们! 如何指导开发者走向错误是合法的? 如果iOS 9发布“今天”,Titanium会在下周内给你所有新的API吗? 决不。 他们只是阻止你,使你必须使用他们有限的一套错误的API,你需要支付模块,这可以很容易地在本地代码中完成。

如果你懂javascript,在逻辑意义上是好的,相信我你可以在很短的时间内学习Obj-C。 通过时间和精力,你将失去debuggingtitanium的问题,你可以变得更有效的本地Obj-C。 嗯..关于Android我不会说这么高。 因为Android不可与iOS进行比较。 iOS诞生于Mac OS,一个成熟的桌面操作系统。 而你了解android。

不要陷入跨平台困境的陷阱。 titaniumAPI的负载只为iOS,你知道为什么,Android设备便宜,硬件便宜,不能顺利运行animation。

最后,远离任何一种平台,坚持纯粹的本地操作系统,不pipe一开始多么艰难,长远来看,您将获得高回报,相信我!

对于Titanium团队,我回顾了你的Obj-C和Java源代码。 我尊敬你们,你们确实在Obj-C,Java,node.js,python和javascript方面都非常有经验和经验。 但为什么? 你为什么把人们引向错误的方向? 您非常清楚构buildtitaniumandroid / ios模块浪费了多less时间并进行testing。 你为什么不把自己的努力做得更好?

我敢打赌,其他许多人将与其他“重复”的问题,以及他们自己的愤怒的意见帖在一起。 所以我会把它留给他们,只是提供我自己的经验。

我认为有很深的理解。 原因如下:

Titanium可以让您快速构build应用程序,并且每天都变得越来越坚实。 我最近build立了一个应用程序,直接比较titanium,本地和一些竞争对手的框架之间的开发时间。 土着大约一个半星期。 竞争对手约2周。 titanium是3天。 这给了我很多时间来玩这个应用程序,使产品比竞争对手好很多。 在Android和Mobile Web上,我也能够很好的工作。 我有5个基于平台的条件,所以代码具有良好的平等性。

本土有你带来的优势。 我想补充一点,你也可以访问任何平台所提供的。 了解本机会告诉你如何构build应用程序(即使使用JavaScript),以及如何为这些应用程序构build模块。 您也可以尝试打开Titanium生成的Xcode项目,并通过它直接在设备上运行。 你可能需要做一个干净的构build(在Xcode中),但比通过iTunes运行更快。

另外,我认为Objective-C本身就是一种美丽的语言。 (与Java,C#,PHP,VB以及其他一些)成长起来的代码是截然不同的。 过了一段时间才习惯了,但我为自己投资的时间感到高兴。

免责声明:我为Appcelerator工作。 希望你能区分上面的意见和事实。

看看你感兴趣的招聘信息,这应该回答你的问题。 如果雇主正在寻找XCode的专业知识,而不是对Titanium感兴趣,那么请关注XCode …

添加到@ Linuxios的优秀答案:

既然你声明你想把移动开发作为一个职业,那么绝对要学习Objective-C,XCode和iOS SDK。 最后,这将取决于你,你的雇主,在一定程度上你的客户需要。 但了解iOS是必不可less的。

另外,根据我的经验,如果应用程序很复杂,那么本地应该是要走的路,如果不是因为debugging的方便,而且还说明了更短的构build时间。

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

从我的angular度来看,学习原生应用程序开发,iOS和Android都是非常有用的。 正如你已经提到的,大多数公司都在寻找原生应用程序开发人员,因为他们不想太依赖于外部公司或框架,除了平台的实际开发人员(Android,iOS等)。 我也认为,一旦你有能力开发本地应用程序,这比使用像titanium或PhoneGap框架更容易。 此外,提高自己的技能总是很好,特别是本地应用程序开发是一个领域,在这里你可以学到很多东西。 不仅仅是语言,还涉及底层移动操作系统的体系结构。 特别是对于苹果来说,我认为学习开发本地化至关重要。 他们在他们的开发者门户上拥有非常好的资源,在那里你也学到了很多有关用户交互devise的内容。

最后但并非最不重要的,我build议你继续与斯威夫特。 这是一个伟大而强大的语言,修复了很多Objective-C的弱点。 你基本上可以用Swift从头开始,而不需要Objective-C。 完整的Cocoa-API可以通过Swift访问。 但是如果你愿意的话,你仍然可以把Objective-C和Swift结合起来。 例如,如果你需要使用一个尚未在Swift中实现的外部库。

希望我能帮你一点。