In this series of 3 articles I will explain the reasons behind our decision, cover prerequisites, present iOS dev’s toolkit, and discuss some dilemmas that iOS newcomers can face. As I spent most of my time working in the JVM environment, you will find comparisons and references to Java programming language along the way.

Why the native app

Why would you like to write pure native app in the Objective-C when there are so many cross-platform frameworks around? You could: We decided to go native because of:
  • speed - lack of additional layer over the core API guarantees best responsiveness possible. Based on our experience we know that HTML apps can be a bit sluggish sometimes when it comes to navigation and rendering tables (note that wrapper platforms mentioned above may provide performance comparable to native).
  • full API access - our app required access to native API’s like low-level camera functionality and contacts book. Using additional platforms you need to rely on the vendor to provide the wrapper/plugin for the API that you need (or code it yourself in Objective-C).
  • native look and full customization- using native widgets guarantees the biggest flexibility in implementing custom design.
  • system upgrades - Apple delivers preview releases of every new version of iOS system. Using native stack you can start testing and upgrading your app right away without having to rely on external vendors to catch-up with the changes.
As we knew that top-notch user experience was the priority for our app we decided to take the native path. However, it may appear that HTML app or wrapper framework may be a better fit for your needs. Before choosing an approach you should evaluate other factors such as different platforms that you need to support or your maintenance budget. You may also consider a so-called hybrid approach. That means using HTML views enriched with native elements (e.g. navigation).


To start your journey with iOS you need a computer with OS X and Xcode toolset installed. XCode comes with iOS simulator, but you'll need a real iOS device for testing as some functionalities do not work on the simulator (e.g. camera). We also faced some bugs that were present in the simulator but not on the real device. To deploy your app to other users’ devices for testing and production you’ll need an Apple Developer Account . If you use JetBrains IntelliJ for you daily Java development you should definitely take a look at AppCode. It’s text editing and refactoring capabilities are much better than those provided by XCode. The downside of the AppCode is lack of an interface editor (looks like JetBrains are working on it). When working with interfaces you need to keep both XCode and AppCode open at the same time.

Learning resources

As always, Google is your best friend when it comes to finding learning materials, but there is one resource that we found particularly useful. You should definitely check Stanford University's free ‘Developing iOS 7 apps for iPhone and iPad' online course. You should also get familiar with Apple’s Human Interface Guidelines document which covers best practices for designing and structuring your application. If you come from a Java world you may also find David Schneller’s talk interesting. In the second part I will cover basics of Objective-C language and in the third part I will write about complementary tools, interface building and development workflow.  Slides from the quick talk I gave at Warsaw Java User Group:  
blog comments powered by Disqus