Native iOS application development is more of an obstacle course than a walk in the park.
Developers must be able to operate within Apple's integrated development environment (IDE) and write code using the Swift or Objective-C programming languages. They must also understand the basic abstraction layers that define iOS and how the app's files are bundled.
To launch a successful app, developers must deliver an effective user interface (UI) that enhances the user experience (UX) at all levels.
Developers could try building iOS applications using cross-platform frameworks, but Apple's Xcode IDE is the most efficient and comprehensive iOS application development tool available. Xcode is free to download but only works on a Mac running OS X Yosemite or later.
Xcode includes all the features developers need to design, develop and debug an iOS app; they can also build applications for Mac (OS X), Apple Watch (watchOS) and Apple TV (tvOS). Xcode provides the editors and features necessary to work with the code and interface elements, organizes the files that make up the app and includes templates for developing common app types.
Xcode also provides tools such as the iOS Simulator, which determines how an app will look and behave on different devices. The Auto Layout feature designs apps that automatically adapt to various device sizes. Developers can also use storyboards to create visual representations of an app's interface then use the outline view to see a hierarchical representation of the objects.
Objective-C vs. Swift
Prior to 2014, developers building an iOS app in Xcode used Objective-C. Then Apple went to Swift, a language that's touted as being easier to learn and better designed to handle the subtleties of iOS application development.
Developers tasked with selecting one language over the other will likely choose the one they already know, but there are other factors they should consider. If, for example, they're building apps for an older version of iOS or working with C# libraries, they should go with Objective-C.
Swift is gaining in popularity, however, so developers might also want to take that into account.
The iOS architecture
Developers can picture iOS as four abstraction layers that define its architecture:
- Cocoa Touch: supports the basic app infrastructure and delivers key application frameworks such as push notifications, multitasking and touch-based input.
- Media: enables the app to deliver audio, video and graphic capabilities.
- Core Services: where developers will find basic system services such as the Core Foundation and the Foundation Framework. This layer also supports features such as location and networking services.
- Core OS: provides such services as the Security, Local Authentication and Core Bluetooth frameworks.
Apple recommends developers write code to the highest applicable layer whenever possible, and only use the lower-level frameworks for features not exposed at higher levels.
More than just coding
Although writing code is at the heart of building an iOS app, that could end up being the least painful part of the whole application lifecycle.
Developers have to test and verify their code to identify and fix any problems. Xcode includes a debugger that allows developers to locate issues and examine the control flow and data structure, then revise their code accordingly.
The application bundle
Each iOS app is packaged into a bundle, a file system directory that contains a set of related resources. At the heart of the bundle is the app executable file that contains the compiled code -- the file name for the executable is the same as the app name, without the .app extension.
The bundle also includes the information property list file, which contains metadata the OS uses to interact with the app, as well as storyboard files that bring the interface to the screen. The bundle also contains image, sound and video files, including home screen icons and the temporary images used when the app is loading.
Other file types that go into a bundle include custom data files and localized resource files, which are placed in their own language-specific subdirectories. Developers can include an optional bundle file that defines app preferences; the Settings app uses this file to assemble the app's UI elements.
UI design and UX
An iOS app is much more than a bundle of files. To launch a successful app, developers must prioritize the UI design and UX every step of the way.
Users must be able to view, understand and interact with content without having to constantly resort to scrolling or zooming -- therefore the text must be legible. Users should also be able to use touch features and perform tasks with the fewest steps possible.
How to pick a cross-platform app dev tool
A comparison of app development frameworks
Cheat sheet for developing iOS apps