Why I hate iOS as a developer

As a user, iOS is a great platform. Somewhat boring and rigid perhaps, but beautiful and solid (most of the time).

As a developer things are quite different. Dealing with iOS (and really Apple in general) is like trying to have a conversation with a paranoid robot working as a soviet border officer in a Kafka novel.

Safari for iOS is a mess

It’s one of the the most dreadful browsers I’ve had the pleasure to work with since I started doing web dev back in the late 90s. I’ve lost count of the many hacks I’ve had to implement to make code behave in Safari for iOS or its web views. This is really unacceptable in the standards-compliant world of 2016.

To give you an idea you can’t for example specify the height of an <iframe>. This is something we’ve been able to do on any other browser since the <iframe> tag was invented in 1999, even on IE6, the most hated browser on earth. This problem has been going on since 2011.

It makes you really wonder. Why is it that Apple doesn’t allow other browser engines on iOS? Or why is it that Apple doesn’t invest more resources in the Webkit project like Google does with Chromium?


You can’t (easily) test older iOS versions

The other day I wanted to test the simulator with iOS 7, and guess what? You can’t. Well, it’s certainly possible, but it would require you to download an old and unsupported Xcode version that only runs in Mavericks.

So you either keep old macs around, or you keep old iOS devices around, praying Apple doesn’t break things further.

Apple’s policy is to take no prisoners. If you can’t upgrade your device you are a “sad” person. Go buy a new iOS device if you want the privilege of having bug free apps.

Certificates and provisioning profiles

Dealing with iOS certificates is tedious, bureaucratic, and cryptic. Sometimes things fail and neither Apple’s docs, Xcode, or the dreadful Member Center can shed some light as to what is going on.

Just recently I lost 2 days trying to figure out why I couldn’t create a certain certificate and I finally found the answer on some obscure Mozilla’s docs of all places. Xcode only gave me a greyed out button and no one answered in Apple’s developer forums.

As a developer you shouldn’t need to ask permission to Apple in order to run your code on your devices. You know, like pretty much any other platform in the world. Even macOS.

iOS AppStore

The AppStore is yet another huge source of frustration. For example just a few hours ago an app I’m working on was rejected because someone at Apple didn’t like my screenshots.

We noticed that your screenshot(s) do not sufficiently reflect your app in use.

I obviously uploaded screenshots of the app running without any alterations.

If Apple wants more screenshots or it thinks those are ugly why doesn’t it say so? No, you don’t deserve anything better than an automated answer.

In the meantime, it takes Apple a week to let you know if it likes your screenshots. Good luck trying to plan a coordinated release strategy.

Remember the robot from Elysium?

“Would you like to talk to a human?”

Thankfully I can just keep uploading screenshots and hoping the app will be accepted at some point. I’m just losing time.

It’s not as bad as what happened today with the Dash iOS app. Apple decided that the developer of a successful app had incurred in review fraud and terminated his app.

Apple’s decision is final and can’t be appealed.

Of course, we all know Apple is perfect and never makes mistakes. Why would you want to appeal such thing?

Worst of all

You have to pay money for the privilege of being an iOS developer. It’s not enough that Apple forces you to compile on an actual overpriced Apple computer or that you have to endure all these problems.

One day Apple will make the iOS developer program free for everyone and there will be a big applause. Fanboys will cry. Such a generous gesture!

In the meantime you can develop for pretty much any platform in the world for free and even compile from any other platform. Like compiling a Windows app on macOS, or an Android app on Linux.

That is all.

Edit 7th October 2016: Apparently the @ryosukeniwa Twitter account was deleted just after I published this. What a coincidence.