Mobile application development differs between platforms and after doing couple of applications for the Sailfish OS powering Jolla phone it was finally time to see what other platforms have to provide. I develop Java applications at work so it was logical to look into iOS and learn some Swift. The Internet is full of resources of how to start developing for iOS and here’s my take to the topic. Now I just need an iPhone to run my app on a real device :)
Coming from the Java EE and Web application world it's good to read some documentation about mobile application development for iPhone and iOS before starting to code. You need to learn the basics concepts about iOS platform and Swift language and good starting point is to check Apple's resources for developers and iOS developer library and read the guide how to start developing iOS apps (although it's with Objective-C). To learn Swift you can read guide to Swift language or if you like books there’s also The Swift Programming Language book.
You can also start learning iOS development with several free or paid online courses. Coding with Chris "how to make an iPhone app" series of videos is a good starting point although it's designed for people who have no programming experience. It provides nice overview to the tools and how to start developing. You can also follow the App Development: Teaching Swift by Apple Education with code examples or if you've the money and need diploma see the Udemy course for iOS developers or Udacity's iOS developer Nanodegree.
It's also good to read Human Interface Guidelines for iOS-based devices although the guidelines don't provide any practical examples. It's a good resource to learn how iOS applications should work, tells you how your app should look and behave and how to use the UI elements that UIKit provides. As I have done apps for Sailfish OS it was good to adapt my thinking to see things in the iOS way.
In practice the best way to learn is to just write code and experiment. Getting to know XCode and Interface Builder takes some time. After using Eclipse and IntelliJ IDEA for Java development both XCode and Apple’s graphical UI editor are somewhat confusing at first.
And if you're using IRC there's #cocoa-init channel on irc.freenode.net focused on asking and answering questions for beginning developers on iOS and OS X. For more general iOS development you can join #iphonedev channel on irc.freenode.net. To join them you need to register your nick.
Development in practice
Getting started with iOS can be challenging as Swift and Objective-C are used mainly only on Apple's platform and it has its own names for almost everything. I haven't yet gathered my own good practices so it's great that you can read about iOS good practices from Futurice.
For iOS development your options with tools are somewhat limited as you need Mac computer running OS X (10.9.4 or later) for being able to run Apple Xcode and iOS SDK. The other option is to use JetBrains Appcode (99e) which is better (what I've understood). Xcode can be installed from Mac App Store and it comes with iOS SDK. Also although you can run your applications in iOS Simulator it helps to have a real device which helps you to understand how apps interact with users and what the look and feel should be. The documentation and examples gets you far but nothing beats to have first hand experience of the platform.
I found it beneficial to watch e.g. the Coding with Chris "how to make an iPhone app" series of videos for getting around XCode development environment.
Developing for iOS
iPhone applications can be written with Objective-C or with newer Swift programming language. Objective-C is built on top of the C programming language and provides object-oriented capabilities and a dynamic runtime. Swift in the other hand can be described as Objective without the C and is a replacement for the Objective-C language and works side-by-side with it. Wikipedia has good short description of Swift.
Although Swift is relatively new and what I've read isn't quite as robust as Objective-C it’s good starting point for developing iOS apps. Having used some Objective-C for OS X apps I wouldn't recommend it to anyone if you don't actually need it.
Apple's operating system for iPhone, iOS, provides many frameworks for developers and as a developer you've to decide which version to target as it affects your application and capabilities. Apple's iOS developer page provides short overview of what it has to offer. The current version is iOS 8 and i.a. Shinobicontrols has written iOS 8 Day by Day eBook which consists of 39 blog posts covering the most significant features available to developers in iOS 8.
As a developer you have to choose which version of iOS you target and whether your app is universal or only for iPhone or iPad as it affects your code and potential users. Do you need the new features in iOS 8 or is iOS 7 enough and is it worth to make solutions to fit both versions? And do you need different user interface for bigger screen in iPad or is universal version enough? iOS 8 is supported on iPhone 4s or newer and newer iPads and what I read about 72% of devices are using iOS 8 and 25% are on iOS 7. So, I think it's enough to target iOS 8 as it provides you more options how to implement your app.
Developing with Swift
The best way to get to know Swift is just read some code, watch tutorials and of course write code. To learn Swift you can read guide to Swift language and you can watch from Youtube e.g. rm2kdev series about Swift starting from the basics and example of doing a To Do List app.
One nice element of the Swift system which helps you to get hang of it, is its ability to be cleanly debugged and run within the development environment, using a read–eval–print loop (REPL). It gives you interactive properties more in common with the scripting capabilities of Python than traditional systems programming languages. It's useful to play with Swift in Xcode Playground and see what your code does.
Knowing Swift language is just one part and the bigger part in my opinion is to know how to use the UI elements that UIKit provides to create good user experience. When I started developing my app with Swift majority of time went to figuring out how to construct the user interface with Xcode UI builder and what the elements should be, not actually writing much code in Swift. User experience section in iOS Developer Library and UI Elements in iOS Human Interface Guidelines provide good starting points for reading about user experience but doesn't help you much with coding especially when the sample codes are in Objective-C. Basic UI elements like "pull to refresh", "swipe between views", "split view" and "slide-out navigation" are more easily found by googling.
We all have our own ways to learn new platform and programming language and I find it beneficial to just create small application which experiment with different concepts and interactions. I'm gathering my own experiments with iOS technologies to GitHub and building a news reader application for High.fi on the way.
So, what are you waiting for? Download Xcode and start developing your own app for iOS :)
- Check Apple's resources for developers.
- See what iOS developer library has to offer.
- Read Start developing iOS apps although it's with Objective-C.
- Learn Swift by reading guide to Swift language or The Swift Programming Language book.
- Get familiar with Human Interface Guidelines for iOS-based devices.
- Check the iOS developer page for an overview of iOS.
- Read iOS 8 Day by Day eBook which consists of 39 blog posts and learn what iOS 8 has to offer.
Courses and guides
- iOS good practices from Futurice
- Good starting point is to watch Coding with Chris "how to make an iPhone app" series.
- Be your own teacher by following the App Development: Teaching Swift by Apple Education.
- See iOS development videos in Youtube, like rm2kdev series about Swift starting from the basics and example of doing a To Do List app.
- For paid courses you can check Udemy course for iOS developers or Udacity's iOS developer Nanodegree.