I did some research but couldn't really pin-point and couldn't really come to a conclusion on which one to use and why? Would appreciate some helpful links and differences that can help me reach on a conclusion.
Ionic uses web-based technology. You're basically building a website in a native wrapper. You're still building the app in html/css/js and it will be shipped as such. You might have access to a couple of the native functionalities but that doesn't make an Ionic app a native one.
Titanium is a hybrid technology. You write your code in javascript. Through a layer this javascript talks to native components. So if you make a "Window" in javascript it natively is translated to a window object in Android/iOS. It then also behaves completely native because it actually is. It is as performant as native, as it is native. You just control it with javascript in the background. A well made Titanium app is indistinguishable from a truly native app.
In core, thats the difference.
Titanium uses (like RN) the proxy pattern. The app is in runtime a real native app without limitations. Ionic uses phonegap/cordova under the hood. This is web technology. The webview and especially the used framework consumes a lot of battery and traffic. the performance is suboptimal because web is a universal machine.
Related
I have to develop a simple application for Android and IOS (Gui with use standard android/ ios components - both have equivalent components for what I want use). So I'm looking for a cross-platform solution that can make it easier. I found nativescript with angular and react native. Both look cool and I read a lot of positives and differences between them. Now I prefer nativescript with angular because of pieces of code in angular which I can use in web.
Here is but:
But I need be able to send some bytes via wifi (not to web or via http). And I can not find a solution for it. It's easy to do it in native app development. So is it some option to call java code from native script or how can it be done?
Or is in this case is better / only way to achieve it use native app development?
Thank you for any answer.
EDIT: I found manual to create native plugin and it works:
https://www.nativescript.org/blog/plugins-and-jars
For react it is pretty easy, you can wrap any native code within a react module. Have a look at this documentation page: https://facebook.github.io/react-native/docs/native-modules-android
For native script you access native APIs via JS code, see here: https://docs.nativescript.org/core-concepts/accessing-native-apis-with-javascript
I know Cordova isn't in question, but having a big chunk of work done in Angular for web, you could take it into consideration too. Integrating any native functionality/sdk is super easy with Cordova.
I'm maintaining a plethora of apps for one of my clients all of which have native projects for each of the three main platforms. The apps are relatively simple in functionality. My client wants to always take advantage of the latest features in each platform for marketing opportunities. They also want to appear to be a native app (responsive, not laggy). I haven't followed cross-platform development very much lately, so that's why I'm reaching out to SO.
My initial idea is to write a C++ library that has all the functionality shared by the three platforms. Then, for each platform, I'll write some network, file access, and UI-code that connects the abstract library code to the concrete platform.
Of course, this is exactly what cross-platform systems aim to do. Would it be a waste of my time to write the above myself when this has already been done by platforms like PhoneGap? My concern is that I would be dependent on a third-party. If I write the code myself, I have full control, and I will always have access to the latest features.
Hope to get some pro's and con's.
Thanks!
Yet a third option (after Facebook's React Native and Microsoft's Xamarin) is Google's new Flutter and as the other answers suggests "then writing the Windows app purely natively". BTW, React Native does have Windows support the lack of which in Flutter could be a plus or a minus depending on how you look at it.
Have you considered using React Native for iOS and Android, then writing the Windows app purely natively?
There are tons of articles out there about pros and cons for React Native.
PhoneGap is just a web, written in HTML, CSS and JavaScript. React Native actually renders native components for iOS/Android.
There is also Xamarin. It supports multiple platforms and uses c#. The new features from the native languages all work great.
I've to do a quick development for a prototype app and I've decided to go for a cross-platform HTML5 tool/platform.
I've shortlisted Intel XDK for its developer-friendly IDE, React native for its performance as a native build compared to others and Ionic for the nice UI with Angular and available themes.
I need native like performance and nice UI with some responsive themes, which would be better recommended?
Currently? Cordova + Intel XDK has more support and a larger feature set. There are even examples that come with the XDK of video games that perform at near native speeds. Cordova uses JS APIs to hook into native functionality, but at the end of the day, you're still running web code.
React Native is different in that you're building an application using native components, but expressed using React's JSX. Arguably, because you're building the app using native components, you should see better performance (and get a more native look/feel).
Cordova:
Uses a web view
Taps into native functionality with jsAPIs
Has been around longer, and has more support
Code once, run everywhere
React Native:
Android support appears to be a little shaky? (could be wrong here)
Builds display using native components
Newer, but backed by a powerhouse (and gaining traction)
Learn once, code everywhere
Honestly, using either technology you should be fine. Both have shown that they're up for most challenges.
I would probably push you to Cordova + Intel XDK for increased support, easier for webdevs to pick up, and it's more mature. React may very well eclipse it, but I don't think it's quite there yet.
¯\_(ツ)_/¯
with cordova The biggest advantage you get, is the single code base to develop without learning any new technology, if you are already a web developer But the application runs in the webview, and not natively on the hardware, which makes it less performant than the native iOS applications or native Android.
in React You need to understand the Framework(react), you need to understand JSX (in iOS simulator, You also need to work with Xcode)
With React native, you get ease of development, better performance and great user experience in the end
Can Nativescript build apps for web as well?
As Ionicframework and similar uses Cordova to build Android and iOS the same code there can be served by an HTTP server to the mobile or desktop browsers.
Will that be possible with the apps built with Nativescript, using same code base for web version of the app?
Nowadays Angular integration is on the way, and using Angular for the mvc kind of things (like data bindings, events etc.) and using Native for the device apis, platform apis and native gui would help in an unequaled way.
Angular parts can be used in the browser as well when built for it. What to do with the xml written for the gui templates in Nativescript, they could be converted to proper html for web built of the app, as Nativescript itself already uses a unified gui api for different platforms, that could be possible. And lastly, native calls made in NativeScript would be ignored in the web build.
It would be great to build for Android, iOS, and Web with the same exact code base.
tl;dr: No
Longer: The big difference between the Cordova/Phonegap based technologies (such as Ionic and Supersonic) and the Dynamic Runtime based technologies (such as NativeScript, React Native and Titanium) is that the first uses a HTML approach where the application is run by WebKit/Blink in a WebView. Looking on the Dynamic Runtime technologies there's no HTML Engine running your app, but rather native views and widgets. The framework (in this case NativeScript) is "just" a bridge between Javascript and the native language of the device.
However, depending of how you architecture your code, you can create Javascript which will be usable in both a NativeScript environment as well as in a browser environment.
Edit: The above means that you could reuse some of your code. There'll still be NativeScript specific code.
Edit2: There's an ongoing project to enable usage of Angular 2 in NativeScript. Please see current status in the issue: https://github.com/NativeScript/NativeScript/issues/103 Also note that the Telerik NativeScript core developer Valentin Stoychev is saying
The idea [is] to enable as much code reuse as possible between your web and mobile apps.
So: Yes on code reuse - no on exact same codebase.
Adding to the (correct) response of Emil - I do not think it is possible to have any significant portion of the app shared (even for the logic part) since {N} apps mostly utilize the Nativscript observable implementation which would probably 'leak' into your models / view models.
Having said that, I suggest you to monitor the work happening on integrating Angular2, which would probably mean a larger code sharing potential (with Angular2 web apps)
We will develop a, social network integrated mobile application which will need to access native device capabilities but 90% of the logic will be implemented in the HTML5/Javascript code posted by Ruby back end to the device. Thus, we would like to update or change the logic/GUI of the app without user involvement. We have strict deadline and have to support iOS, Android and Blackberry.
In this case, what approach would you recommend us? We considered the approaches below but could not decide since we do not have any experience with mobile development even if we are experienced in Ruby, C/C++, Java, Javascript, Flex.
Our considerations:
Develop native apps for each platform and embed the native browsers
to implement our logic, which can take too much time.
Use one of the frameworks for cross-platform development such as
PhoneGap or rhomobile. In this case, we are afraid of facing some performance issues. We would love to hear the experience of developers with those frameworks.
Use Adobe Air for accessing the device and its WebKit component for the rest.
First, I hope you understand that there is no simple answer. At this junction, having been looking at cross-platform solutions for mobile development for two years, I feel that in order to get fully native UI look, and to access all the device and UI features, one is forced to produce native application on each platform.
But, since you asked about cross-platform tools, here's a list of the main contenders:
Sencha http://www.sencha.com/products/touch “Sencha Touch is the world's first app framework built specifically to leverage HTML5, CSS3, and Javascript”
Dojo http://dojotoolkit.org “Dojo saves you time, delivers powerful performance, and scales with your development process”
Phonegap http://www.phonegap.com “PhoneGap is an open source implementation of open standards”
jQuery Mobile http://jquerymobile.com “Touch-Optimized Web Framework for Smartphones & Tablets A unified user interface system across all popular mobile device platforms”
Rhomobile http://rhomobile.com “Free and open source mobile application framework”
Titanium from Appcelerator http://www.appcelerator.com
There are plenty of comparisons online, including on SO, and this fellow actually tried to use several platforms, code included.
Anecdotally, I have seen Phonegap produce a rather iPhone-centric look, that may not mesh well with Android, plus showing performance problems when loading screens (there may be workarounds via pre-loading). Also, access to more complex devices was limited, or at least lagging. Rhomobile is a good fit for data-driven apps (simple display of large databases), but architecturally could show performance issues, so check for yourself. Personally I did not get into Sencha, Dojo seemed a little small, and Titanium showed dated architecture. So next time I'm attempting a cross-platform app, I'll give jQuery Mobile a serious try.
Let us know what you pick and how it works out.
Iam using this rhomobile rhodes for my cross-platform development App which will run in Android, Blackberry and iPhone.
We have developed application and sucessfully runned in all devices without any issues. we used ruby for backend webservice call, And remaining app is constructed with HTML5 and java Script. I didn't face any issues regarding rhomobile.
intially we faced memory issues, But later on we resolved this issue by implementing local storage for our App. For android it wont supports local storage so we used Rhom Storage only for Android Device.
Sounds like a project doomed to fail.
If I were you, I'd build a mobile-friendly site for all 3 platforms if deadline is tight. What native features do you even need, first off? If it's something like a camera, you're better off just build a native app for all 3.