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 –
- Native development;
- 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?
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).
Source of table information:  - 
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 -
|Android Studio||Java / XML|
|Apple xCode / iOS SDK||Objective-C|
|Windows Phone SDK||C# / XAML|
|C++ / XAML|
|C++ / DirectX|
|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.
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 -
- Android Developers Portal (not the official name, but what I call it) 
- Android Developers Blog 
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.
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.
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 , otherwise it will simply take too long to get things done.
Android Studio Summary
|Fast on-device performance||Steep learning curve for beginners|
|Cost = Free||Need 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 -
- The Complete Android Lollipop Development Course-Build Apps! (at Udemy.com)
If you are looking for a great reference to complement your initial development with Android, check out -
- Android Programming in a Day: The Power Guide for Beginners In Android App Programming (at Amazon.com)
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
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 -
- iOS Dev Center 
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 system. To 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 , the iOS architecture is a layered system as shown below.
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).
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.
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
|Fast on-device performance||Can only target a single marketplace|
|Cost = Free||Object-Orientated language background preferred if using
|Future-proof since supported by Apple||Can only be installed on OSX (Mac)|
|Swift programming language better for|
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 -
- Beginning iPhone Development with Swift: Exploring the iOS SDK (at Amazon.com)
Windows Phone SDK
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).
The progression of the API stack available to developers is shown in this graphic -
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.
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
|Fast on-device performance||Can only target a single marketplace|
|Cost = Free||Object-Orientated language background preferred|
|Future-proof since supported by Windows||Can 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)
If you want to rapidly speed your entry into Windows Phone development, I highly recommend you check out the following course -
- Windows Phone - Programming for Beginners (at Udemy.com)
A complementary book about Windows Phone development is this one by Shawn Wildermuth -
- Essential Windows Phone 8 - Microsoft Windows Development Series (at Amazon.com)
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 -
- xCode / iOS (using Swift programming language)
- Windows Phone SDK
- 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......
12. Adobe Air
13. Corona SDK
15. Marmalade SDK
17. Gideros Mobile
19. Game Salad
20. MIT App Inventor