The best way to code an app


#1

Hi everyone,

I'm opening this thread to discuss what is the best way to code phone apps, and more precisely, after a few explanations below, what would be the best frameworks to code hybrid apps.

First, what do we call "best" ? As far as I can tell, the meaning here would be something like "the one with the best ratio about how easy it is to understand how it works, and then how powerful it is to use and customely manipulate".
It's a framework, so it's gotta make things easier, with the most modular possible results : you gotta be able to do more or less whatever you want with it.
But this first definition of "best" can be discussed if you have some other opinions about it.

Then, following a discussion with @zystvan, and some more read & talk, especially this article by Rob Welan, I have anyway came to the same conclusion that @zystvan was giving as his first answer : building hybrid apps is the key, and they will grow in importance and possibilities in the coming years.

Except, of course, if you already know about Java & Swift and want to make perfect products, but if you more or less manage Html & Css & JS, and have a specific project that you want to see done in a not too far future, except if you specifically need some feature that only native apps can make possible, and that you cannot benefitly replace with an Html/JS-doable feature, build a hybrid app.
I also thank @zystvan for this useful link, What web can do today, that clearly exposes what you can make using web (HTML & CSS + JS) and what you can't, assuming that what you can't becomes possible if you build native.

Now before going further, just as a reminder for beginners, here are the 3 ways for building an app :

1 - Native apps

  • iPhones work on iOS, the huge majority of phones work with Google Android (almost 80% in most of the world, with some notable exception with Japan for instance which has more iPhones than Android phones, or US where it's about 50/50 if I'm not wrong), and a few ones with Windows.

  • None of these 3 guys talk the same language. Which means, if you want to build a native app, meaning an app that the phone will totally treat as part of its own app package, without almost giving you the feeling that you're surfing on the internet (you're just : inside the app), and that will adopt the iOS OR Android OR Windows visual codes, which are different from each others, and the iOS or Android or Windows browsing interface, which are consequently different (or they are different and consequently the visual codes are too, better said), you will need to code : 1 version of the app for iOS, 1 version for Android, 1 version for Windows. Meaning 3 languages, and you cannot share any line of code between them. So it's really writing 3 versions.

  • The language for iOS will be Objective-C for the old style, or Swift which is the new one.
    The language for Android is Java,
    And the language for Windows is I don't even remember because I don't care about Windows, wait a sec. Ok, no, I didn't have the answer after 10 seconds googling it, and who cares coding for Windows.

  • This is what you have to do to build a native app, that will provide the most efficient and most "family like" user experience for each sort of phone. It will also offer more flexibility (more possibilities) in integrating API's to your app, so giving more flexibility with what the users can do or not when they have your app in hand.
    Still, again, after digging a bit I echo @zystvan's feeling that with time, more and more things will be doable outside of strictly native apps.

2 - Cross-platform webapps

  • So, another possibility is to make cross-platform wep apps : meaning, coding your app using only HTML + CSS + JavaScript, which every of these phones will understand. As a result, your app will give a little less an "app feeling", and, from what I have understood (I'll edit anything if someone better informed tells me about some mistakes I'm doing), you have to consider your app more like a responsively designed website with a shortlink on your phone desktop, than like a real app.

1 or 2 : What difference does it make ?

([Smiths])

  • Say websites can be divided into "documents like" websites (like, a portfolio) and "software like" websites, (or in more common words, "web applications" : meaning the website is providing tools customingly and interactively used by the users : like, Air bnb).

  • And then there are "apps", that are some "internet linked softwares", behaving like softwares, but essentially linked to the internet, and that you use on your phone's interface and outside of a browser such as Chrome or Firefox. Like, Tinder. (There are also offline apps, that are just basically softwares, but are not my point in this thread.)

  • Native apps are the "internet linked softwares" : download it on your phone's desktop, use it as a software, but works using internet related features.

  • Cross-platform webapps are more like "software like websites", with a simplified and innerly responsive design & interface, to bring them closer to an app feeling, but it's not that yet. Still, you might download it on your phone desktop and can more or less open it and use it as an app.
    From what I have understood (again : editable content if someone is giving better information), pure webapps don't have that "quick and automatic" feeling you have with the famous apps that you use daily, and they are less made for real interaction between different users.
    Anyway, no one seems to really enjoy pure webapps, strictly relying on Html & Css & JS, without anything native either in coding either in handling nor in visual design, and that are strictly made all in 1 code for the 3 platforms.

Now, there is 3d category, which is the one we're the most interested in here :

3 - Hybrid Webapps

  • Hybrid webapps : you still code your app once for all using only HTML / CSS / JS, AND you will use a framework (I didn't see anything about coding hybrid apps without the use of a framework, though it might be possible if you want to lose the saving time & efforts benefit), that will, by itself, build the 3 languages versions for some parts of the app : you develop your whole app inside the framework using HTML CSS JS, and when it's all finished, you make few final clics and the framework delivers you the 3 final versions for your app, respectively readable by iOS / Android / Windows.

  • Meaning that your final product, even though it will be relying on HTML CSS JS for most of the app work, will include a native interface, that you will not need to code because the frameworks will do it, giving the user more or less the feeling that he or she is just "using an app". (Not as much as with a native, but at some point, passed the lovely days where you want everything so perfect and so blabla, I'm not sure that you care so much about this.)

  • Again, the difference with a real native app, I mean, the negative difference (because the positive difference is obviously the time and efforts saving) is in the less numerous available API's, but the question is, do you specifically need a native only available API, or can you do without it ? And the other difference is about the user "app feeling", that will be a little less "wahou, this is so Android / iOS" than with a native app, but most surely in two years you won't see any difference. (Personal opinion.)

  • And, also, honestly, as a user, if an app offers convenient features, you will turn that button on and use the app, whether it's hybrid or native. So the most important thing to do is make a good product and do make it. When Etsy was not an app yet but only a website having just a responsive version for phones, you did use it and didn't wonder whether it had the same interface or not that your other apps, and probably were not even aware of that very question. Well, maybe you were, but remember that most of people won't even clearly be able to explain in one second the difference between a website and an app. So, making something that works is really the main goal. The rest is bonus.

  • So, basically, the best thing you can do if you want to code an app and have it done in real lifetime, and you're not mastering the (complex) Java language, from the opinions I have read, and from the opinion I have then formed myself, is : build a handsome hybrid app.

  • And if it's a success and makes you rich and later you want to be like champagne and make it native with top-notch functionalities, you will have money then to take your time learning and coding, but most probably you don't have them yet, so it's not the right time for it.

  • So, now, the question is : What is the most handsome framework to build your handsome hybrid app ?

Except if I made mistakes in the previous lines, here is the point where my questions start.

Here are the various frameworks and tools I have come to meet in the past times of research :

  • Obviously, first framework you meet will be Apache Cordova. Apache Cordova is what led to PhoneGap, but PhoneGap has since be bought by Apple, and now both still exist : Cordova, still free and open source surely forever, and PhoneGap, that you don't really know the future of (will it always remain free), and that belongs to the apple. So to be sure the tool you will use will remain free and open source, you'd better go for the original one Apache Cordova, "the" common framework to code apps using HTML + CSS + JavaScript :
    https://cordova.apache.org/

  • The previously quoted Rob Welan article explains why he loves & strongly recommends using Intel XDK (free, despite belonging to Intel).
    Intel XDK allows you either to build a standard HTML5 project, either to build (and that's most probably what you want to do) a hybrid app using standard HTML5 + some Cordova APIs, that will be eventually built for the 3 mobile platforms in minute once you have finished coding how the app behaves and looks.
    One of the strong advantages of Intel XDK is the availability of templates, that can save lots of time especially for beginners in app developping.
    I personally have just started looking at it, it does look very powerful, though the interface seems like you have a bit of work to do before you really feel comfortable with it, but I'm sure it is worth the time you'll save then and the results it will bring you.
    https://software.intel.com/en-us/intel-xdk

  • You will also find another Intel tool called App Framework, an open source HTML 5 UI (User Interface) framework. App Framework's JavaScript library helps you design your app to fit with the 3 platforms UI habits (look and behave like iOS, like Android, like Windows). Didn't personally test it yet, but I think our Rob Welan uses it too.
    https://app-framework-software.intel.com/

  • Ionic is a front-end SDK (Software Development Kit), that you can link to Intel XDK. Didn't try it yet, but people seem to like the tool : http://ionicframework.com/

  • I still didn't really get what is the use of Yeoman, but if you can explain it, some folks also seem to like linking it to their Intel SDK. What for ? I don't really know…
    http://yeoman.io/

  • I don't remember how I came to meet Monaca, which has a free plan, and I'm not sure how interesting it is or not, but it is supposed to be a set of cloud-powered tools and services to make Cordova development process simpler, and here is the link if you want to check : https://monaca.mobi/en/pricing?_ga=1.69178839.719457595.1446760299

  • Crosswalk seems to be, if I'm not wrong, some sort of updater plugin that you will link to Cordova, to make sure you are in harmony with the various versions of Android, for instance (there are many at the same time, depending on the devices), when you develop using Cordova. Fore more or better informations, get here : https://crosswalk-project.org/

  • And, finally, just today (and it made me start this thread actually), I discovered Firebase, whose promise is to take care of the backend while you focus on UI. They offer Android, iOS, and JavaScript SDKs (does it mean that you can either use it to build native or hybrid apps ?), and their services include a realtime cloud database, all the main authentification systems you can ask for, hosting and immediate deployment.
    They have a free plan and a monthly 5$ one, plus much more expensive ones, but it seems that their free plan might be enough. This article says that using Ionic and Firebase allows you to write only front-end code, without taking care of any back-end. I don't know what it's worth or not, but I have read very enthusiastic comments about Firebase anyway. I can't find back the article I read about it 2 hours ago that made me get interested in it, I will insert it if it comes again to my view.

  • Plus, as a bonus, I'm giving this teaching website link, Stuk.io, focused on teaching real life apps development using Ruby on rails : https://stuk.io/en. You can learn the same here at CA, but Stuk might offer some specific courses possibly useful for some specific features you'll be looking for.

So………

What do you know about these tools ? What is your opinion ? What do you recommend ? What do you don't recommend ?

I will be glad to update this post thanks to your comment as they will arrive, to make it look less like a personal post with comments below, and more like a full and collective post from which you can get all the infos and answers all in 1 to this question : How do I code my app ?

Thank you!


#3

Yea reword that, and jibblyi pls remove that as a quote. The statement may be taken offensively.


#4

@jibblyj, @amanuel2, I guess I have reworded what you were asking to bo reworded. Any other comments on the content ?


#5

Nope.