A Review of iOS Development — an Android Developer’s Perspective

When it comes to mobile app development, I’m more of an Android person. I’ve written native Android apps for the most part of my software development career. I got interested in iOS development a few years back and tried to build an iOS app for one of our products. I used Swift 2 and I was relatively successful even though the app didn’t make it to production X_x.

A few weeks ago, I got the opportunity to build one of our apps for iOS users. There I was, design mockups and REST service documentation in hand, anticipating the excitement and challenges of creating my first iOS app that will make it to production. I had to regurgitate my previous understanding of Swift and update myself on things that have changed since Swift 2.

I’ll break this review into two parts: The good and the meh. The ‘good’ section will discuss the aspects which I was excited about and the ‘meh’ will highlight the parts that I think need improvements.

Credit: https://media.giphy.com/media/GSrZUFaPs7yCs/giphy.gif

The Good

1. The Storyboard

The storyboard is a big plus when it comes to designing user interfaces without writing any code. It just works and I’ve found it more comfortable to use and rich which many functionalities than the Layout Editor on Android Studio, especially when when you’re using the assistant editor.

Android developers dread the ceremony involved with creating simple lists. All the code you’d have to write just to get a simple static list that navigates to a different page depending on which item was clicked.

2. Xcode’s integration

Continuing from the previous point, I’ve discovered that the language, the entire development process and the IDE are more connected together than when using Android Studio to create Android apps. For example, I can create multiple screens and link them together using buttons while handling the back stack correctly without having to write any code by myself.

I do not need to give Views ids to be able to use them in my ViewController (they are just like Activities or Fragments). I can simply obtain references to the views by dragging them to my ViewController when using the Assistant editor. Here’s my expression when I discovered that I finished creating a list and linking the list items to different views without leaving the Interface builder:

3. Swift

It is a good thing that Apple introduced this modern language for iOS development. Android developers who have already started using Kotlin will find it easier to learn Swift. The two languages are like cousins but be careful when declaring functions. They aren’t fun they are func (why Apple!). Swift as compared to ObjectiveC is more concise. It is friendlier to look at and to type. There’s also a some under-the-hood improvements for Swift. I’d let you to be the judge.

Credit: https://iswift.org/wp-content/themes/iswift/img/screen1.min.png

The Meh

1. Expensive to start anything

You need a MacBook to start anything. We all know that MacBooks aren’t cheap. If you’re uncomfortable with using the Simulator, you’d have to get an iPhone/iPad/Apple Watch, I feel sorry for you already. Then there’s this $99/year membership fee you’d have to pay to distribute your app to users.

Choose your payment option. 😭. Credit: https://i.redd.it/u17wktk64mhy.jpg

2. Xcode’s Sluggishness

Sometimes Xcode can decide to be a pain in the behind. There’s this annoying time lag that occurs between making a syntax error and it being recognised by Xcode. Sometimes the error will only show when one has triggered a build. Secondly, the storyboard loads as if one is loading up the IDE again, some have suggested using storyboard references to split the designs. I believe with some basic caching, the load time can be reduced. Finally, autocomplete is poor when compared to the way Android Studio (IntelliJ) does theirs.

Sometimes, connecting an IBOutlet from the storyboard to the respective ViewController will produce an error that will disappear only when Xcode is restarted.

3. Swift Inconsistencies

Swift has a way of introducing breaking changes with each upgrade, I remember trying to run my first iOS app, the one that didn’t go live, for a friend. I couldn’t build the project again because I updated Xcode and upgraded the project to Swift 3. I experienced something similar whey they stated that they renamed flatMap(...) to compactMap(...)

Here’s what apple said in their flatMap(...) doc:

Notice that they said it’s renamed to compactMap. 🙄

Now look what happens on the playground:

Why, just why do they return different results! 😠

QED.

That’s it folks. The development experience has been relatively good for me. The transition from Kotlin to Swift has had a few hiccups. With more updates to come from Apple, I believe they can make the development experience to be better. 👋🏻

Software developer. Learning everyday.