Do products exist that support cross platform development?
Yes, we can’t argue with that. This research has found a long list of products that can be used for cross platform mobile development (table A-2). Depending on the application requirements each of the products may be a viable choice for the
development of the application to be. You will have to match the requirements to the development approach. There are several approaches and many options for each. As a developer (company) you would want to define a strategy for mobile app
development that takes different levels of complexity into consideration, and defines some guidelines for each of the approaches: Native, Hybrid, and Webapp
development. These guidelines could suggest the currently best product option. It is not a simple task, and it is guidelines that you should develop over time. There are many factors to consider, e.g. the competencies of the developer team. Having this strategy will not only help new projects get started, but can also guide the selection of new employees. The strategy can bring structure to the development.
As this research shows, the market is loaded with many options for mobile
development. Probably too many, and it can be overwhelming to choose or find the right one. Furthermore it seems, it is a hard game to sell tools and frameworks for mobile development. The players on market are shifting fast. I find that several have been on and now off the market e.g. CouchOne, WidgetPad, JQTouch, and Bedrock to name a few. Another concern is that many of the frameworks are still quite new, and presents a risk of vendor lock-in, a risk that have a huge effect, if the chosen product for mobile development (or the company behind) has to shut down.
Are developers using cross platform options, or are the same apps with same functionality programmed several times in different languages? Are apps developed specifically for each platform?
During this research, it has become clear that the answer is yes, yes, and yes. Mobile development is getting more mature, although immature still, and developers are starting to pursue ways of better development e.g. development with code reuse on several platforms. Native mobile development hasn’t had the right tools to make cross platform development feasible, but that is starting to change. Microsoft has lately seen the need for better tooling when it comes to cross platform development, and want to support the development for Android, iOS, and Windows Phone from one IDE, namely Visual Studio 2015 with C++ as the common denominator. A company such as Dropbox has also seen the advantages of having a single codebase for their apps, and have rewritten some of their apps for Android and iOS, and this using C++. Along the way, Dropbox haven’t had the necessary tools to handle the integration between C++ and Java and Objective-C respectively, and have therefore built tools, such as Djinni [Djinni] which is now open sourced, to ease the
development. But cross platform development does not seem to be on the
developers mind. At least not yet, and the common approach is to build the same app several times, if the app is supposed to target several platforms.
It is seen that the mobile developer community is starting to move against a more cross platform approach, e.g. by the initiative by one of the Dropbox developers, Steven Kabbes, who has started a project, mx3 [mx3], with the goal to showcase and collect cross platform mobile techniques. If we turn to Google, we see that Google Inbox [GoogleInbox] shares 70 % of the codebase between Android, iOS, and the Web. With Google Inbox, Java is the language, which for iOS is transpiled to
Objective-C using J2ObjC [J2ObjC], and for the Web Java-to-JavaScript is handled by the Google Web Toolkit SDK [GWT]. There are still a lot room for improvements when it comes to mobile development.
Conclusion on the Hypotheses
The hypotheses presented in chapter 2 are all evaluated to be valid.
Fig. 7-1 Conclusion on the Hypotheses
The options for cross platform mobile development are many, most likely to many.
The mobile development market is running fast, and products enter and exit the market. It is difficult, and not without risks, to choose a product for app development, and that is probably also why many developers tend to go with native development options provided by the mobile OS vendors, because that approach doesn’t have the risks of selecting a third party, even though code reuse then is not an option.
The quickly changing market is also a factor in why developers know so little about the options in the market. It takes a great deal of attention and resources to follow up on the options in the market. Just getting an overview is a considerable task.
H1
• It has been possible to find several languages that with different techniques are executable on all major platforms. With Xamarin, and the Mono engine, it is possible to build apps for the major platforms with the use of just the C# language. C++ is another language that is executable on all platforms, and is used for app development with the purpose of getting closer to a single codebase across platforms.
H2
• Using C# and the Xamarin platform it is possible to build the complete codebase with the one language, and therefore also libraries and frameworks, that target all major platforms, and also having the native look and feel. C++ can be used to build libraries for the major platforms as well. These libraries can then be utilized in the development of native apps. As C++ is only used to build libraries, it has no effect on the look and feel.
H3
• According to the studies concerning this paper the general developer do not know of the options for having a single app codebase when it comes to the native approach. Many are aware of the possibilities that the hybrid and webapp approach presents. When we ask the mobile developers, they know of some options for cross platform native development, but it is not recognized as viable yet, although many benefits are seen.
It is almost a part of the mobile developer’s culture to develop specifically for each platform, and it typically takes strong arguments to change such a culture. The developers already have a major task in keeping up with the often changes to Android, iOS and Windows Phone, and may not have the capacity to look beyond for options that can improve the overall development process.
One of the most popular and known options for cross platform mobile development, the Xamarin platform, was evaluated to be a good option for cross development showing some of the qualities wanted e.g. code reusability. Comparing Xamarin with native Android and iOS development showed that Xamarin is competitive, and is able to provide results equal to and in some cases better than the OS vendors provided tools.
The evaluation of Visual C++ resulted in a failure. Only a few of the stories were a success. The knowledge needed to build C++ applications for different platforms and CPU architectures was underestimated.
If we compare the approaches of Xamarin and Visual C++, then Xamarin has an advantage using the virtual machine approach compared to the cross-compilation approach of Visual C++. When it comes to Xamarin, it handles the target platform differences in the virtual machine, whereas with C++ you as a developer need to handle the platform specific building including the architectures to target.
The evaluation shows that it is not just a simple task to pursue a goal of a single codebase for all the platforms you target, and that you need to match the skills and resources with the options available.
This research is only evaluating a few of the products available for cross platform development, but it presents a framework for evaluation that can be built upon and used to evaluate the products that you consider as possible options for your
development.
New platforms are entering the device market, such as the Apple iWatch, Google Glass, Smart TVs and so on, the whole IoT. The ability to share a codebase, between all the platforms that you want to target, will have a huge effect on your work, because you can focus on developing the code right, once and for all.
References
(Ordered alphabetically)
[Android Studio] http://developer.android.com/tools/studio/index.html [AndroidSQLite1]
http://www.techotopia.com/index.php/An_Android_Studio_SQLite_Database_Tutorial [AndroidSQLite2] http://www.vogella.com/tutorials/AndroidSQLite/article.html [AndroidTwitter] https://dev.twitter.com/twitter-kit/android
[ApacheHttpClient] https://hc.apache.org/httpcomponents-client-ga/index.html
[Appcelerator2014Q3] http://www.appcelerator.com/resource-center/research/appcelerator-2014-q3-mobile-report/
[AppceleratorGartner2014] http://www.appcelerator.com/resource-center/research/gartner-mq-2014/
[Appcelerator-IDC2014] http://www.appcelerator.com/enterprise/resource-center/research/appcelerator-2014-q3-mobile-report/
[Asthana2014] http://blogs.msdn.com/b/vcblog/archive/2014/11/12/cross-platform-mobile-development-with-visual-c.aspx
[C++] https://isocpp.org/std/the-standard
[C++Builder] http://www.embarcadero.com/products/cbuilder
[Crawford2013] http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/
[cURL] http://curl.haxx.se/
[Deployd] http://docs.deployd.com/docs/getting-started/what-is-deployd.html
[Dignan2015] http://www.zdnet.com/article/apple-wwdc-2015-ios-android-enter-service-pack-phase/
[Djinni] https://github.com/dropbox/djinni
[Dropbox1] http://oleb.net/blog/2014/05/how-dropbox-uses-cplusplus-cross-platform-development/
[Dropbox2] http://channel9.msdn.com/Events/CPP/C-PP-Con-2014/015-A-Deep-Dive-into-2-Cross-Platform-Mobile-Apps-Written-in-CPP
[Dropbox3] http://channel9.msdn.com/Events/CPP/C-PP-Con-2014/Practical-Cross-Platform-Mobile-CPP-Development-at-Dropbox
[EmbarcaderoMacPA]
http://docwiki.embarcadero.com/RADStudio/XE6/en/Mobile_Tutorial:_Set_Up_Your_Develop ment_Environment_on_the_Mac_%28iOS%29
[EmbarcaderoWinSetupAndroid]
http://docwiki.embarcadero.com/RADStudio/XE6/en/Mobile_Tutorial:_Set_Up_Your_Develop ment_Environment_on_Windows_PC_%28Android%29
[EmbarcaderoWinSetupiOS]
http://docwiki.embarcadero.com/RADStudio/XE6/en/Mobile_Tutorial:_Set_Up_Your_Develop ment_Environment_on_Windows_PC_%28iOS%29
[EventsC++] https://msdn.microsoft.com/en-us/library/hh755799.aspx
[EventsNativeC++] https://msdn.microsoft.com/en-us/library/ee2k0a7d(v=vs.71).aspx [fabric.io] https://dev.twitter.com/fabric/ios
[Gartner2014] http://www.gartner.com/technology/reprints.do?id=1-20TPY1B&ct=140903&st=sb
[GoogleInbox] http://arstechnica.com/information-technology/2014/11/how-google-inbox-shares-70-of-its-code-across-android-ios-and-the-web/
[GoogleLocationServices] https://developer.android.com/training/location/receive-location-updates.html
[GWT] http://www.gwtproject.org/
[Hartman2011] Gustavo Hartmann, Geoff Stead, Asi DeGani. Cross-platform mobile development. Tribal, 2011
[HTML5] http://www.w3.org/TR/html5/
[IDC] http://www.idc.com/prodserv/smartphone-os-market-share.jsp [InfoQ2013] http://www.infoq.com/news/2013/07/state-mobile-2013
[iOS build issue] https://connect.microsoft.com/VisualStudio/feedback/details/1370422/cant-build-c-on-ios
[iOSGCD] http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial
[iOSSQLite] http://www.appcoda.com/sqlite-database-ios-app-tutorial/
[J2ObjC] http://j2objc.org/
[JavaThreading] http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html [JNI] http://docs.oracle.com/javase/8/docs/technotes/guides/jni/
[Kantar] http://www.kantarworldpanel.com/global/smartphone-os-market-share/
[Magenic1] http://magenic.com/Blog/Post/4/Mobile-Development-Platform-Performance [Magenic2] http://magenic.com/Blog/Post/59/Mobile-Development-Platform-Performance-Part-2-Native-Cordova-Classic-Xamarin-Xamarin-Forms
[MSOffice1] https://isocpp.org/blog/2014/10/office-cross-platform
[MSOffice2] http://channel9.msdn.com/Events/CPP/C-PP-Con-2014/024-Microsoft-w-C-to-Deliver-Office-Across-Different-Platforms-Part-I
[MSOffice3] http://channel9.msdn.com/Events/CPP/C-PP-Con-2014/030-Microsoft-w-C-to-Deliver-Office-Across-Different-Platforms-Part-II
[mx3] https://github.com/libmx3/mx3
[NewtonSoft] http://www.newtonsoft.com/json
[Otto] http://www.vogella.com/tutorials/JavaLibrary-EventBusOtto/article.html
[Plaisted2013] David A. Plaisted, "Source-to-Source Translation and Software Engineering,"
Journal of Software Engineering and Applications, Vol. 6 No. 4A, 2013, pp. 30-40. doi:
10.4236/jsea.2013.64A005.
[QT] http://doc.qt.io/qt-5/qtlocation-index.html
[RexStJohn2015] http://rexstjohn.com/is-react-native-cross-platform-snake-oil/
[Titanium1] http://en.wikipedia.org/wiki/Appcelerator#Titanium [Twitcurl] https://github.com/swatkat/twitcurl
[VC++ iOS] https://msdn.microsoft.com/en-us/library/dn707598(v=vs.140).aspx
[VisionMobile2014Q3] http://www.visionmobile.com/product/developer-economics-q3-2014/
[VisionMobile2015Q1] http://www.visionmobile.com/product/developer-economics-q1-2015-state-developer-nation/
[VS2015] http://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/311 [Wikipedia-1]
http://en.wikipedia.org/wiki/Multiple_phone_web-based_application_framework
[Wikipedia-VM] http://en.wikipedia.org/wiki/Virtual_machine [Xam.Plugin.Geolocator]
https://github.com/jamesmontemagno/Xamarin.Plugins/tree/master/Geolocator [XamariniOSBuild]
https://developer.xamarin.com/guides/ios/getting_started/installation/windows/offline.pdf [Xcode] https://developer.apple.com/xcode/
Appendix A – A research in technologies, products and vendors
Researched vendors
This is the complete lists of researched vendors in the mobile app development market.
*included #HelloWorld $Prototype
2VizCon Too sparse information and documentation to motivate further research
Adobe Air *
Alpha Software *
AML Only Android
Andanza Technologies Only Spanish information
AnyPresence *
Apigee Only API platform, not app
Appcelerator *
Appery.io *
AppFurnace *
AppGyver *
Apple $ Only iOS
Application Craft *
appMobi Too sparse information and documentation to motivate further research
Apportable Too sparse information and documentation to motivate further research, Only iOS and Android
appsFreedom *
Appspresso Not maintained and website gone
Appticles *
Backbase *
Bedrock Out of business
Bizmatica Too sparse information and documentation to motivate further research
bMobilized *
Bootstrap *
Canappi Too sparse information and documentation to motivate further research
Capriza Too sparse information and documentation to motivate further research
Catavolt Only for data analysis in the manufacturing industry
ClickSoftware *
Codename One *
Convertigo *
Cordova *
Corona *
CouchOne Out of business
Dojo *
DSI *
DudaMobile *
Embarcadero *#
Enyo *
Facebook (React Native) *
FeedHenry *
FieldSync Standard solution adaptable for your business data. Not for general development
freedomone mobile Apparently out of business
GameSalad *
Globo *
goMobi *
Good Technology Standard solution adaptable for your business data. Not for general development
Google $ Only Android
Grapple Only media house open for consulting
Gumby *
Helium Too sparse information and documentation to motivate further research
Hipcricket Targeted advertising and marketing with no information about general development
HP *
i-exceed *
IBM *
Icinetic *
Infor No information about general development
iPFaces Website gone
iUI Apparently not maintained
Jembe Too sparse information and documentation to motivate further research
JMango360 Apparently limited to commerce
Jo *
jQuery *
JQTouch Out of Business
July Systems *
Kinvey *
Kivy *
Kony *
Mad Mobile Apparently limited to commerce
Magic Software *
Marmelade *
Mendix *
Microsoft *#$
MicroStrategy *
Midnight Coders Apparently limited to handle the connection (integration) between e.g. mobile applications and different backends
Mobify Apparently limited to commerce
MobileIron Standard solutions adaptable for your business data. Not for general development
Mobl *
Modo Labs Apparently limited to server-side middleware Modomodo Apparently limited to marketing
MoFuse *
MooFwd *
Moovweb Apparently just for transforming desktop sites into mobile experiences
MoSync *
MotherApp Only implementor, open for consulting
Movilizer *
Neosperience Apparently limited to commerce
Netbiscuits Apparently limited to mobile analytics and detection
Next *
Nomalys Apparently limited to front Salesforce, SugarCRM and Microsoft Dynamics on mobile devices
NSBasic *
Openstream Too sparse information and documentation to motivate further research
Oracle *
Paradise Apps *
Pegasystems *
PhoneGap *
Photon Too sparse information and documentation to motivate further research
Phunware (former Digby) Targeted marketing with no information about general development
Pro Gamma *
Progress Software *
QT *
QuickConnectFamily Apparently not maintained for three years Retriever Communications *
Resco Apparently toolkit is limited to charting
RhoMobile *
RoboVM *
Rocket Software *
RubyMotion *
RunRev *
salesforce.com High coupling with salesforce.com (backend)
SAP *
Sencha *
ShieldUI Only a components toolkit for web based development
Sita Apparently not for general development
Skeleton *
Spring Mobile Solutions Standard solutions adaptable for your business data. Not for general development
StackMob Acquired by PayPal and closed
Tabris *
Telerik *
Tibco Software Apparently limited to server-side middleware Tigerspike Apparently only consulting and development with no
products for mobile development
Unity *
Usablenet Apparently a company that implements mobile sites that have an in-house platform, which has very limited
availability externally.
Velti Apparently limited to advertising and marketing
Verivo Software *
Volantis Acquired by Antenna Software, which was later acquired by Pegasystems
Webalo Standard solutions adaptable for your business data. Not for general development
WebApp.net *
WidgetPad Out of business
Winksite Apparently just a mobile website builder including hosting
Xamarin *#$
Xui *
Zebra Technologies (former Motorola Solutions)
Too sparse information and documentation to motivate further research
Zurb *
Table A-1 Vendors researched
Cross Platform Development Options
This is the list of cross platform mobile development options for that is found to be currently on the market.
Language Product URL Type Approach License
JS Adobe Air http://www.adobe.com/dk/
products/air.html
Framework VM Proprietary
HTML5, CSS3,
Framework Hybrid Commercial
HTML5, JS,
Platform Native, hybrid, webapps
Platform VM [Titanium1] Open source HTML5, JS,
Native languages
appery.io https://appery.io/ Platform Hybrid, webapps Commercial
HTML5, CSS3, JS
AppFurnace http://appfurnace.com/ Platform Hybrid Commercial HTML5, CSS3,
Framework Hybrid Proprietary HTML5, CSS3,
Platform Webapps Commercial
Code-free AppsFreedo m
http://www.appsfreedom.co m/
Platform Webapps Commercial
HTML5 Appticles http://www.appticles.com Platform Hybrid, webapps Commercial HTML5, CSS3,
JS
Backbase http://www.backbase.com/ Platform Hybrid, webapps Commercial HTML5, CSS3,
JS
bMobilized https://bmobilized.com/ Framework Webapps Commercial HTML5, CSS3,
JS
Bootstrap http://getbootstrap.com/ Framework Webapps Open source C++ C++ Builder http://www.embarcadero.co Platform Native Commercial
XE7 m/products/cbuilder
C++ Clang http://clang.llvm.org/ Compiler Cross-compilation Open sources
Platform Hybrid Commercial
Java Codename
One
http://www.codenameone.c om/
Platform VM Commercial
HTML5, CSS3, JS
Convertigo http://www.convertigo.com /
Platform Hybrid Open source
GPL License or Enterprise License HTML5, JS Cordova http://cordova.apache.org/ Framework Hybrid Open source Lua Corona http://coronalabs.com/ Scripting
language
Platform Commercial HTML5, CSS3,
JS
Dojo http://dojotoolkit.org/ Framework Webapps Open source Code-free DSI Mobile
Platform
http://www.dsiglobal.com/p roducts/mobile-platform/
Platform Hybrid, webapps Commercial HTML5, CSS3,
JS
dudaMobile https://www.dudamobile.co m/
Platform Webapps Commercial
C++, Object
Platform Native Commercial
HTML5, CSS3, JS
Enyo JS http://enyojs.com/ Framework Webapps Open source HTML5, JS,
Native languages
FeedHenry http://www.feedhenry.com/ Platform, Framework
Native, hybrid, webapps
Commercial
Code-free Gamesalad http://gamesalad.com/ Platform Cross-compilation Proprietary HTML5, CSS3,
JS
Globo http://www.globoplc.com/ Platform Hybrid Commercial HTML5, CSS3,
JS
goMobi http://gomobi.info/ Platform Webapps Commercial HTML5, CSS3,
Framework Webapps Open source HTML5, CSS3,
Platform Webapps Commercial
HTML5, JS,
Platform Native using VM, hybrid, webapps
http://appzillon.com/en/ Platform Hybrid, webapps Commercial Java j2objc http://j2objc.org/ Translator Source translation Open source
HTML5, JS Jo http://joapp.com/ Framework Webapps Open source
HTML5, JS JQuery Mobile
http://jquerymobile.com/ Framework Webapps Open source
Code-free July Systems http://julysystems.com/mob
ile-development-products/july-mx/
Platform Native using VM, hybrid, webapps
Commercial
Java JUniversal http://juniversal.org/ Translator Source translation Open source HTML5, JS,
Native languages
Kinvey http://www.kinvey.com/ Platform Native, hybrid, webapps
Commercial
Python Kivy http://kivy.org/ Framework Cross-compilation Open source HTML5, JS,
Native languages
Kony http://www.kony.com/ Platform Native, hybrid, webapps
Platform Native using VM, webapps
Commercial
C++ Marmalade https://www.madewithmar malade.com/
Framework Cross-compilation Commercial Code-free Mendix https://www.mendix.com/ Platform Webapps Commercial Code-free MicroStrate
gy Mobile Apps
https://www.microstrategy.
com/us/mobile
Platform Hybrid Commercial
Mobl Mobl http://www.mobl-lang.org/ Platform Webapps Open source
Mobl Mobl http://www.mobl-lang.org/ Platform Webapps Open source