Given how popular smartphones are these days, as well as an important device in our lives, it's not surprising that mobile app software developers are in such high demand. In some places, such as the Silicon Valley region in California, there's a relatively high employee turnover rate in general, due to the supposed lack of skilled mobile developers. It is not unusual for developers to move from company to company within 1-2 years.
Developing mobile apps takes a specialized approach that is not required with regular desktop software or Web apps. Of the handful of different mobile OS (Operating System) platforms available, one of the more popular is Apple's iOS. This mini-course guide to iOS app development should give you a good starting point for learning to develop apps, and monetizing and promoting them. If you're looking for full courses, check out the "Additional References and Resources" section.
Unless you have experience in other mobile platforms, we encourage you to have a plan for what you want to learn about iOS development and why. While you do not need to know about every single feature available in the iOS SDK (Software Development Kit), you should learn as much as you can about the features that are of interest to you. There will be some overlap, although someone developing iOS game apps would general need to understand a different iOS feature set than someone building an interactive book app. On the other hand, if you are creating a children's interactive learning app, you might combine features of both.
It's important to note that a new iOS version comes out every year (and a new Xcode development environment less frequently), so it's always a good idea to refresh your knowledge, learn the latest features or what has been removed -- beyond what is presented here. Occasionally there are also changes to the Objective-C language, or new languages such as Swift.
With all the different mobile platforms available, it's important to distinguish between a 'native' mobile app and a 'web' mobile app. A native app, for example for iOS, is one written taking advantage of that mobile operating system and any or all of the devices' features. In this case, it would be an app that you download from the Apple App Store or build yourself either in Xcode or one of the acceptable alternative development environments.
A web mobile app, on the other hand, is written using HTML (often HTML5), CSS, JavaScript, likely an HTML5 or JavaScript framework or library, plus any backend code and databases. It runs in a browser on a mobile device, so it is not necessarily mobile OS-specific. In other words, a web mobile app should run with much the same look and experience on, say, an iPhone as on an Android phone. Such apps are not available in the Apple App Store or on Google Play (the equivalent market for Android apps), and they do not have access to all of a given phone's hardware features.
While Apple has a number of iOS devices, at present, the devices for which you can build iOS mobile apps are the iPhone, its non-cellular sibling the iPod Touch, and the iPad. It's possible that in the near future that there may be an "iPad Pro" tablet/ laptop hybrid, an "iWatch" and/or an Apple TV set (as opposed to the set-top box).
Officially, Apple iOS apps are created in the Xcode IDE (Integrated Development Environment) in the Objective-C object-oriented programming language, which is based on the much older C language and thus iOS supports the latter. Code can also be written in C++. More recently, Apple announced a new programming language, Swift at their Jun 2014 WWDC (Worldwide Developer Conference). Swift is an alternative to Objective-C and officially appears in iOS 8 and Xcode 6, both of which are in beta from the time of the Jun announcement through to the typical Fall full release that Apple has each year (for iOS, and at a lesser frequency, Xcode).
A few years ago, Apple relaxed their requirements for iOS app development, allowing other tools than their Xcode IDE (Integrated Development Environment). As a result of that, you can actually develop iOS apps on a Windows computer, with languages other than Objective-C.
While this guide assumes development using XCode and C / C++ / Objective-C or Swift, here are some of the alternative options available for iOS app development. Some alternatives use and HTML5 / JavaScript framework and then add a native iOS wrapper. The result is known as a hybrid iOS app (Web mobile wrapped in a native app). Not all alternatives are free.
A key part of developing software is having a grounding in data structures and algorithms. If you have programming experience, it's likely you have at least a basic understanding of these key concepts. If not, it's very important to learn the basics, then expand to more advanced concepts as needed.
Of course, you also need to be familiar with programming concepts, including OOP (Object-Oriented Programming) principles and design patterns. Understanding design patterns is a key to understanding how to best code an iOS app in Objective-C or C++ -- particularly the MVC (Model View Controller) pattern upon which iOS is based.
This section, like most of the others, assumes you are developing iOS apps in Xcode using either Swift or C/ C++/ Objective-C, not using a non-Apple alternative development environment. As such, to develop iOS code, you need the following:
While there are self-contained iOS apps that do not ever need an Internet connection, most serious mobile apps need a connection and often need to "sync" data from a mobile device to a more central location to support cross platform use. For example, a professional to-do list app that is available on iOS, Android and other mobile platforms will allow users to access their content from any device including, sometimes, from a Web site.
To accomplish this cross-platform use requires the use of Web services and online databases. Web services come in different forms including informal database calls, as well as the more structured REST API form (REST = REpresentational State Transfer). REST APIs use specially constructed URL requests, so if you don't want anyone else using them, they need to be privatized through secret software keys, etc. You may also want to use REST APIs from third-party developers, such as social media sites (e.g., Twitter, Facebook), content providers, payment sites (e.g., PayPal) and so on.
Note that Objective-C is not specifically designed for Web programming use, although there are projects that serve to allow that option. So building a Web service (REST or otherwise) involves another language for the back-end, such as PHP, Node.js (server-side JavaScript), Python, Ruby, Java, Perl and so on. In fact, it is not uncommon for mobile developers to have experience in Web programming and development for this reason.
If you do any serious iOS coding, beyond dabbling in a few simple apps, there are two practices you will want to look into at some point. The first is testing your code more thoroughly, preferably through automated processes. The second is source code control, which allows you to "version" your apps when you need to make code changes or add new features without destroying older code -- in case you need to backtrack changes. Of course, you will also want to test your apps on an actual device if you plan on submitting them to Apple's App Store for release. A source code management (aka version control) system is especially important if two or more developers are working on the same project.
There are, of course, other VCSes (Version Control Systems) than Git/Github, including Subversion (aka SVN) and Mercurial, but Git use was integrated into Xcode in the recent past. Which VCS you use is either a matter of personal choice or might be dictated by your employer or clients.
Unless you are only writing test apps that will run on a limited number of iOS devices, it's worth knowing the process of submitting an app to the App Store. In fact, if you are planning for a salaried career in mobile app development, you should know that some companies will not interview you until you do have an app in the App Store, even if it is something simple. Even if you work for a company that has a person or a team to handle app submissions, it's worth knowing this very important step in mobile app publishing.
Make sure that you keep up to date, as Apple's app store requirements change from time to time.
Before you decide on a monetization strategy, research approaches for your type of app. Different types of apps (e.g., kids book apps, learning apps, games, utilities, etc.) do better with different monetization schemes. The same goes for marketing and promotion strategies. Research thoroughly and take any unique strategy suggestion with a grain of salt until you see evidence elsewhere -- especially with statistics -- that can back up the approach. The fact is, some approaches do not work for most apps -- something that's important to understand if you are developing your own apps rather than for an employer or for clients.
That's not to say there is no revenue being made. You just have to work to ensure discovery, that people know about your app. So marketing and promotion is as important as how you choose to monetize an app. In fact, some developers make having a marketing and promotion plan their first step.
Monetization comes in a number of forms including but not limited to:
Choosing a target market is also important, as you should be aware of some of the sobering statistics about the percentage of independent developers who are breaking even in the Apple App store. That said, the overall revenue from the Apple App Store increased in Q1 2014, in the United States and China in particular. The iOS platform is doing well in market share with enterprise apps and business tablets (iPads).
There are, of course, numerous paid iOS development courses from a few dozen online learning sites. Before you lay down cash, check the "open courses" catalogs from various universities, or in Apple iTunes. There are also the signficantly more expensive fast-track iOS coding bootcamps, of which Fast Company had this to say.