• Graphic of man at computer thinking about app dev tools

20 Mobile App Tools for 2015 – Part 1 – Native Development

posted in: Software | 4

A question that might be on your mind is ‘what tools are available to make a mobile app or game’?

Whether you want to program the app/game yourself or you intend to outsource the programming to someone else, you should be aware of several of the modern mobile application tools in existence. If you are outsourcing the programming task for your project, ask your coder what development platform they use? The answer they give you can have implications related to quality, time and cost, depending on what type of app you intend to build and what marketplaces you intend to target.

The development tool you choose will fall into one of the following broad categories –

  1. Native development;
  2. Cross-Platform development

I will give you an overview of 20 mobile app development tools that I would consider the major players in the current market. In this Part 1 post, I will cover in detail the Native development tools and will defer the detailed coverage of the Cross-platform development tools to Part 2.

Native development tools are those that are provided (for FREE) by the 3 major platform providers: Google, Apple and Windows. If you were going to make the same app or game for each platform you would have to support 3 separate source code bases, know 3 separate programming languages, and learn 3 separate APIs (Application Programming Interface). If you are only targeting one platform, such as iOS, using a native development tool might be the right choice for you. In this particular case, you will need to have a Mac computer with a recent version of OSX.

Cross-Platform development tools have been created by 3rd parties (not Google, Apple or Windows) to be able to target multiple platforms (Android, iOS and Windows Phone) by only maintaining a single code base. The advantage to this approach is that you only need to learn a single API and a single programming language. If you know that you will be targeting multiple platforms, this will be the most efficient way to go. These 3rd party tools range from completely free to paid subscription fees on a monthly or annual basis.

When discussing each development tool I will clarify if its usage is primarily targeted at list/task based apps (like a business or utility app) or a game. For example, you would not use Unity3D which is a platform for making games, if you wanted to make an exercise tracking app.




 

Some things to consider when choosing?

DIY (Do-It-Yourself) –

If you will be doing the programming yourself, consider the following questions –

  • Do I need to publish to several different marketplaces (Android, iOS, WIndows Phone) or just a single marketplace?
  • Do I want to create an “App” (like a business app) or a “Game”?
  • How much time do I have to produce this app?
  • How critical is native feel and performance (ie. iOS or Android specific design elements)?
  • What programming languages do I already know that I can leverage to reduce any learning curve associated with a particular development tool?
  • What is the ecosystem like for the development tool? How many registered developers are using it? Are there active, good quality resources, tutorials and forums that will support me once I invest my time learning the “ins and outs” of that development tool?

Outsource –

If you plan to outsource the programming task, ask your developer the following questions –

  • What development tool(s) will they use for your project? Native or Cross-platform?
  • If you plan to publish to multiple marketplaces, is there a single code base (cross-platform) or multiple code bases (each done in native code)? (the latter will be more expensive, more time consuming, and harder to maintain in the long term)

 

In the next section, I will identify some of the major development tools that I have used or have considered using. I have personally experimented with 7 of those shown. However, I am currently only actively using 2 in my mobile app development. If you have experience in a specific programming language you may want to capitalise on your pre-existing knowledge and target a specific development tool if it meets your project objectives. As I mentioned in a previous post, I started into 2D game development programming in Lua, switched to C++, then switched back to Lua due to the speed at which I could get things done with that programming language.

 






 

 

Programming Language vs Development Tool

The table below is a grid map that identifies what programming languages are featured for use within the various mobile development tools. Based on your particular app development goals, you may want to use this table to narrow down the options of the development tools you could use for your project.

If you have no programming experience, you may want to consider a tool that uses graphical programming (drag-and-drop), or a tool that uses a higher level language where you don't have to manage memory manually (for example programming in C++ or Java will be a lot harder compared to Lua or Swift).

 

Table of Development tools versus Programming Languages

Source of table information: [1] - [20]

 

Native Development

The major market players like Apple, Google and Windows each have their own development tools that you could use to target their particular platform. The table below outlines these tools and their programming / markup language -

 

Development
Tool
Programming
Language
Android StudioJava / XML
Apple xCode / iOS SDKObjective-C
Swift
Windows Phone SDKC# / XAML
C++ / XAML
C++ / DirectX
Javascript / HTML
Visual Basic / XAML

 

We will now have a more detailed look at each of the key native development tools. Even if you ultimately intend to use a cross-platform tool for the majority of your mobile app or game development, I highly recommend that you become familiar with the basic functionality of the native development tool associated with each marketplace you intend to target.

 

Android Studio

 

Android Studio screen capture

 

Since first being announced at the Google I/O 2013 conference, Android Studio has now been released at v1.0 in December 2014. It is the official IDE (Integrated Development Environment) and platform supported by Google for Android development. Android Studio is based on the popular IntelliJ IDEA for Java development.

The older platform previously supported by Google for Android development was the ADT (Android Developer Tools) plugin for the Eclipse IDE. On the Android developer portal it is now highly recommended that developers using ADT for Eclipse migrate to Android Studio to ensure they receive all of the platform updates going forward.

Two key sources of information for development with Android Studio are -

The Android Developers Portal has all the relevant API reference documentation along with some training material for newcomers to Android Studio. A good place to start is the "Building Your First App" tutorial within the training documentation.

The Android Studio bundle, which includes the Android Studio IDE and the Android SDK tools, is available on Windows, Mac and Linux.

There are two management utilities to be aware of -

  • Android SDK Manager
  • AVD (Android Virtual Device) Manager

The Android SDK Manager is an application that presents an overview of all Android associated tools, platforms, and other components that you can download to your environment. The AVD Manager lets you set up virtual devices that you can use for testing during development by running the Emulator/Simulator. The Google Nexus series of devices come pre-configured (screen size, resolution) within the AVD Manager, and you can also create your own virtual devices by specifying a name, screen size and resolution.

 

Screen shot of AVD Manager

 

To test during development you run your code from within Android Studio, the app is built, and then a window is presented to you to choose either a virtual device (set-up using AVD Manager) or a real Android device connected to your computer via the USB interface.

Android Studio alone is mainly aimed toward building non-game apps with custom views, lists, data management, etc. In Android Studio each different screen (or scene) within your app is referred to as an Activity (represented by a Java class). The appearance of each screen is defined by a layout file coded in XML (EXtensible Markup Language) and you can drag-and-drop widgets from the graphical design palette. This screen design interface is referred to as the Layout Editor.

 

Graphic of the Android Studio Layout Editor

 

If you want to create a game with Android Studio I would recommend using a dedicated library to do most of the heavy lifting, such as libGDX [22], otherwise it will simply take too long to get things done.

 

Android Studio Summary

 

ProsCons
Fast on-device performanceSteep learning curve for beginners
Cost = FreeNeed to have Java or Object-Orientated language background
Future-proof since supported by Google

 

Android is currently the largest and fastest growing mobile platform in the market! If you want to quickly learn the essentials of Android Studio development, I highly recommend you check out the following video tutorial course -

 

If you are looking for a great reference to complement your initial development with Android, check out -

 

Tip!

Regardless of what development tool you use for Android development (native or cross-platform), the built Android app will have the .apk file extension. You can test your .apk (regardless of what tool built it) on several virtual device sizes using the AVD Manager and ADB (Android Debug Bridge). Although you definitely need to test your app on as many physical Android devices as practically possible, this is a great supplementary way to test against various Android device form factors and Android OS versions that you can't physically test against.

 

xCode / iOS SDK

 

xCode screen capture

 

Just last year, to the surprise of many, Apple announced a new programming language at its 2014 WWDC (World Wide Developers Conference). It was called Swift, the successor to Objective-C for both iOS and Mac development. The new programming language was officially released as v1.0 during the September 2014 release of xCode 6 (the official IDE for Apple development). This was an important milestone as the learning curve associated with the Swift programming language is no where near that of Objective-C, allowing newcomers to iOS development a more inviting experience. Additionally, Swift code can be used along side existing projects written in Objective-C.

The key source of information for development with xCode is the -

 

The iOS Dev Center has all the relevant API reference documentation along with some training material for newcomers to xCode / iOS SDK. A good place to start is the “Start Developing iOS Apps Today” tutorial within the training documentation. Although at the time of writing that tutorial is based around an Objective-C project, the basic concepts can be readily applied to a Swift project.

If you haven't guessed it already, the xCode and iOS SDK development platform can only be installed on a machine running a Mac operating systemTo install xCode 6 (the version with the Swift programming language) you should have a Mac with OSX 10.9 (Mavericks) or greater.

As described in the iOS Technology Overview [25], the iOS architecture is a layered system as shown below.

 

Graphic of iOS layer architecture from iOS Tech Overview (Graphic Source: Apple) [23]

 

To interface to the various system layers you include what are called Frameworks into your xCode project (these are essentially libraries). For example, the basic CocoaTouch Layer framework is called the UIKit framework. Similarly, if you plan to develop a game you would call in the SpriteKit framework which interfaces to the Media Layer.

To test your application or game while you are creating it, the iOS simulator is directly integrated into xCode. With the iOS Simulator you can test on a virtual instance of each iPhone or iPad, along with different versions of the mobile operating system (iOS 7 and iOS 8).

 

Graphic of iOS Simulator

 

The layout of your apps is designed simply and efficiently within xCode using the Interface Builder. I personally found the Interface Builder very nice to work with. You can directly drag-and-drop windows, buttons, text fields, and other objects onto your layout within the Interface Builder window. You do not need to edit XML code directly, you only need to select the object within the Interface Builder and you can modify its attributes graphically or manually in the Attributes Inspector window. To create multiple interconnected scenes you use Interface Builder’s storyboard designer.

 

Graphic of the xCode Interface Builder

 

Since the release of xCode 5 (iOS 7 SDK), Apple introduced the SpriteKit framework to build games. Prior to that, Cocos2D + SpriteBuilder was probably the most popular game toolset for development within xCode / iOS SDK.

 

xCode / iOS SDK Summary

 

ProsCons
Fast on-device performanceCan only target a single marketplace
Cost = FreeObject-Orientated language background preferred if using
Objective-C
Future-proof since supported by AppleCan only be installed on OSX (Mac)
Swift programming language better for
beginners

 

Developing for the iOS platform still remains the top grossing marketplace for many developers! If you want to jump-start your way into xCode / iOS development, I highly recommend you check out the following video tutorial course (I am currently doing this course and it is awesome!) -

 

At Udemy.com you will also find dedicated courses on the Swift Programming language if you are looking for a more advanced knowledge of its syntax and workings. If you are looking for a great reference book to understand iOS development with the Swift programming language, also check out -

 

Windows Phone SDK

 

Windows-Phone-SDK-Capture-700

 

During the Microsoft BUILD developer conference last year (April 2014), Microsoft announced the release of Visual Studio 2013 Update 2 that included a toolset within the SDK to create what they call universal Windows apps. Basically, this means a developer can create a new app project (called a Visual Studio solution) using the universal app template to easily target multiple Windows devices from the same source code, such as phones running Windows Phone 8.1 AND tablets & PCs running Windows 8.1. Ultimately, going forward this could be better for developers since there app or game will be exposed to a larger marketplace (Windows Store + Windows Phone Store).

 

Graphic of Windows Universal App Template workflow(Graphic Source: Microsoft) [24]

 

Since the initial release of the Windows Phone SDK in 2010, the traditional way of creating native apps for Windows Phone was using the Windows Phone Silverlight API. With the shift towards creating universal Windows 8.1 apps (Windows + Windows Phone), developers can now use the Window RT (RunTime) APIs. This is the way forward promoted with the release of Windows 10 coming later this year. A developer can use their preferred programming language of either C#, C++, or Visual Basic. The interface design with each is done using XAML (EXtensible Application Markup Language). Alternatively, the recent release also allows for development in Javascript and HTML which is great for those with a web development background.

The progression of the API stack available to developers is shown in this graphic -

 

Graphic of Windows Phone API options 2014(Graphic Source: Microsoft) [25]

 

The top stream is referred to as -

  • Windows Phone Silverlight API (traditional way to Windows Phone development, from 2010 to current)

The newer 'multi-device converged' lower stream, is referred to as -

  • Windows Runtime API (allowing common code for Windows 8.1 and Windows Phone 8.1 development, i.e. universal app template)

 

I have to admit when I landed on the Windows Dev Center to download the SDK, I was a bit confused as to what version I should be using. As of the date of this post, the following SDK versions are available (albeit the first 2 below in the Archive section) -

  • Windows Phone SDK 7.1 (for Visual Studio Express 2010 for Windows Phone),
  • Windows Phone SDK 8.0 (for Visual Studio Express 2012 for Windows Phone)
  • Windows Phone 8.1 Development Tools (now Windows Phone SDK and Windows SDK is integrated into Visual Studio Express 2013 for Windows with Update 2 or later)

If you are concerned with your app reaching a customer base from Window Phone 7.1 and above, you would stick with Windows Phone SDK 8.0. However, in saying that, you need to consider what operating system version of Windows you are running on your development machine. If you are running Windows 7 on your PC for development you will have to install Windows Phone SDK 7.1. If you are running Windows 8 or 8 Pro on your PC for development you should install Windows Phone SDK 8.0. And if you have upgraded to Windows 8.1 or higher you can get the latest Windows Phone SDK packaged with Visual Studio Express 2013 for Windows.

The main source of information for development with Windows Phone SDK is-

 

The Windows Dev Center has all the relevant API reference documentation along with some training material for newcomers to Windows Phone development and Visual Studio Express. You can check out Microsoft Virtual Academy that has some great tutorials to get you started.

The appearance of each screen (UI or User Interface) is defined by a layout file coded in XAML and aided by use of a graphical design Toolbox that provides various UI controls.

 

Example view of UI design using XAML in windows phone sdk

 

In addition to working with the interface designer within Windows Phone SDK, you can also launch the interface into Blend for Visual Studio. Blend for Visual Studio is a dedicated visual design tool for building user interfaces across all types of Windows apps.

When you app is ready to test, you can run one of the device Emulators or connect (after registering/unlocking) your Windows phone for real device testing. Note: The Emulators may not run if your PC hardware is not configured or capable of running Hyper-V hardware virtualization.

 

Windows Phone SDK Summary

 

ProsCons
Fast on-device performanceCan only target a single marketplace
Cost = FreeObject-Orientated language background preferred
Future-proof since supported by WindowsCan only use if you are running the appropriate Windows
O/S supported by the SDK
Ability to choose from C# or C++ or VB used in
conjunction with XAML
Complicated development perception to beginners (what
SDK and what API to use)
Javascript/HTML development option included in
latest release.

 

If you want to rapidly speed your entry into Windows Phone development, I highly recommend you check out the following course -

 

A complementary book about Windows Phone development is this one by Shawn Wildermuth -

 

Native Development Tools Summary

There we have it! We looked at the 3 major native development tools (sorry Blackberry..), even though they all have there own distinct feel, they all have many similar features especially around interface design. If I was to rank each of the native tools based on - i) Ease of setup, and ii) Usability from the standpoint someone new to mobile development -

  1. xCode / iOS (using Swift programming language)
  2. Windows Phone SDK
  3. Android Studio

Even though I am a newcomer to the world of Mac and iOS development, I personally felt the most comfortable in the xCode / iOS environment when compared to Android Studio and Windows Phone SDK (Visual Studio). I believe the new Swift programming language and clean design feel of the xCode Interface Builder were important parts of my personal experience with this tool. As mentioned previously, even if you ultimately intend to use a cross-platform tool for the majority of your mobile app or game development, I highly recommend that you become familiar with the basic functionality of the native development tool associated with each marketplace you intend to target. Doing this will give you the experience to see the value or lack of value associated with a particular cross-platform tool.

 

I hope to see you in the Part 2 follow-up to this post, where we will explore some important cross-platform developments tools......

 

 

References:

1. Android SDK Developer Portal

2. iOS Developer Center

3. Windows Developer Center

4. PhoneGap

5. Apache Cordova

6. Telerik AppBuilder

7. Appcelerator Titanium

8. Xamarin Platform

9. RubyMotion

10. RhoMobile

11. Kivy

12. Adobe Air

13. Corona SDK

14. Unity3d

15. Marmalade SDK

16. Cocos2d-x

17. Gideros Mobile

18. Moai

19. Game Salad

20. MIT App Inventor

21. Android Developers Blog

22. libGDX Game Dev Framework

23. iOS Technology Overview

24. Windows Dev Center - Building Universal Windows

25. Microsoft Virtual Academy

4 Responses

  1. andy brookes

    Interesting piece.

    shame about having to move from eclipse which i have on my Slackware box and quite like it, to Android studio which i just installed on Linux only to read
    something along the lines ..like if your running 32 bit Linux forget it ,Andoid will only run on 64bit soon! Just makes you think its a task just keeping up with IDE’s never mind the programing languages! The other thought is that whats the long term future of Kivy? A know a little python(mainly a PHP man) and wrote a kids flashcard program using python2.7 & pygame 1.9.1 which i liked the idea of being able to run on an Android phone. The thing is there is going to be some learning curve & mental investment; what would be the point if kivy fades into the mist?Do you remember VHS & Betamax etc; what do you think is the future of kivy over the next few years?

    • Randal

      Thanks for the great feedback Andy!

      I liked Eclipse also, but it looks like Google is officially dropping support for ADT in Eclipse at the end of this year (mentioned on Android Developers Blog). Disruption to your workflow such as changing tools or changing API can definitely be a bit frustrating! I currently have Android Studio working on Windows 8 and OSX, but haven’t tried to install on Linux (I’m running Ubuntu on a spare machine).

      As for Kivy, although I’m not an active user it still appears to under active development + support. Check out this Kivy Planet post. And Python is definitely here to stay. Also, interest in Kivy still appears to be on the rise according to Google Trends.

      I recall VHS (which had a pretty decent tenure), and still have them collecting dust on the shelf! 🙂
      I understand your concern about learning curve + investment of time. My strategy has been this so far – i) Learn the ropes using one of the Native SDKs since we know they will be around for the long haul. ii) Choose a Cross-Platform tool of choice based its capabilities + personal speed multipliers (prog. language you already know) + ecosystem health (likelihood of staying around).

      For example, I’m currently doing 2D game development using Corona SDK (Lua), sharpening my skills with xCode+Swift, and experimenting with HTML/CSS/JS dev using PhoneGap and Ionic Framework.

      Hope this helps. Cheers

  2. andy brookes

    Hi Randal,

    cheers for your reply
    since my post i realized i might not need Android studio anyway! Kivy is installed as a package on my Slackware box and available where needed for import in code using Geany. main.py kivy programs run fine from geany or straight from the command line.After that I found that Buildozer wasn’t too hard to figure and after a couple of glitches I got an .apk from a kivy main.py. I loaded the .apk straight from my PC to a not so new htc phone and it ran fine without any phone downloads or updates.

    There is a new book out by the way on kivy listed on the authors website here: http://robertour.com/

    • Randal

      No worries Andy! Glad to here you had some success with Kivy and side-loading the .apk over to your htc phone. And thanks for the reference, Roberto’s book looks very good.

      After our discussion, my interest in Kivy and Python has definitely grown… once I get some usage time under my belt, I will probably role it into a blog post. Cheers Andy!

Leave a Reply