If mobile OS were cars Android, would be a Honda Civic or a Corolla. In other words, it woukd be a solid car that is good for solving a transportation problem but the overall experience is just “meh!”. On the other hand I do consider iOS, something like driving a luxury car like a BMW or a Mercedes. The big difference is in the details and providing you with an actual experience. The iOS experience starts with the developer from the moment the app is conceived.

There’s a simple principle. The more the developer spends time in mundane things, the less that the developer will spend time in building a user experience. We all know all the typical lists of why Android or iOS are superior (OS fragmentation, security, apps, openness) but to me the following is a technical list, from the developer’s point of view of what I think does not help to improve the user experience.

1.- Basic widgets are incomplete and limited.

There are basic things that widgets provide in both platforms but a very basic yet powerful widget in iOS is the UICollectionView, this allows you to generate tables and grids and it allows you to control how many rows and columns you have.

On Android, if you want a horizontal scroll view, you have to write a custom widget.

Exhibit B, lets look at a rotation gesture a rotation gesture is built in. On Android you have to write it custom.

The Cocoa Way

 1 .....
 2     UIRotationGestureRecognizer *rotateGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateGesture:)];
 3     [self addGestureRecognizer:rotateGesture];
 4     .....
 6 -(void) rotateGesture: (UIRotationGestureRecognizer *) gesture
 7 {
 8     _rotation = gesture.rotation;
 9     CGAffineTransform xform = CGAffineTransformRotate(self.transform, _rotation);
11     [self setTransform:xform];
12     [gesture setRotation:0];
13 }

The Android Way

Significantly longer solution. I do think Leszek’s is a very good solution but it does not include the transform side.

2.- The lack of KVO/UINotificationCenter.

KVO and UINotifications are a super nice way of communicating objects without having to write delegates or invent new objects.

1 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(processDownloadCompleteNotification:) name:@"DownloadComplete" object:nil];
2 ....
3 [[NSNotificationCenter defaultCenter] postNotificationName:@"DownloadComplete" object:self userInfo:userInfo];
4 ....
5 -(void) processDownloadCompleteNotification: (NSNotification *) notification
6 {
7     NSDictionary *dict = [notification userInfo];
8     // Do Something
9 }

3.- No Splash Screens

iOS8 introduced Storyboarded Splash Screens, believe it or not. They actually improve the user experience, as they can teach, explain or really engage the user while they wait for content to be downloaded on the background.

4.- No Cocoapods

Even thought some may argue that gradle performs similar capabilities, the biggest difference are the pods themselves. The amound user contributed pods is almost endless and they can be included on a project with just adding one line. In Gradle i need to download the desired jar, then declare it as a dependency.

5.- No showcase websites.

The lack of places like CocoaControls to show what community-contributed controls look like and how you can use them and find them easily. Or sites like Capptivate. Sites like these and CocoaPods, typically allows you to crank UI’s super fast because you don’t have to reinvent the wheel.

6.- The Development environment

Eclipse and Android Studio (intellij) are IDE’s that were not designed specifically for working UIs. XCode was built for Apple products and Apple products in mind.

XCode has a bunch of super elegant and powerful tools to help you design and troubleshoot the app. A perfect example are the Storyboards that in my opinion are far superior than layouts as they allow you to draw relationships in the flow of your app.

All files that are basic to the project (StoryBoards, UI Editors, plists) have their visual editor, there’s no direct text XML/Yaml manipulation for standard files like Android’s constant manipulation of the Manifest, Layouts, Gradle and Syncing your changes with the IDE.

7.- The Emulators suck

I know iOS developers that do not own iOS devices and are able to get by with just the emulators, the opposite does not hold true to Android developers. It is pretty much impossible to run an app with a decent runtime and its better and more convenient to run directly onto the device.


To me, all of the above are important enough that I do think developers, when they are on a deadline, they will sacrifice the quality of the experience just to get the app done. A perfect example is the Instagram app.