Disclamer: This post has been written for GSPD blog
Intro
I'm quite experienced in android development, doing apps for Google's OS for five years now, and thinking in java since seven years ago. But this summer I had to draw and iOS project myself though I haven't experience in Apple-world production. So here is my humble and pretty debatable opinion. I had iOS development courses a couple years ago, working since them surrounded by iOS devs, so it shouldn't have something astonishing. But...
Thoughts
Guidelines and documentation
Apple has nice guidelines, good ecosystem, their devices are easy to use for housewives and businessmen. So it should be easy to create all the things from these guidelines.
Here in the real world clients want things they invent to be implemented. They don't care about guidelines. Here you have a problem with SDK. You don't need anything you can't do, this Apple ideology works everywhere in their products.
Moreover I can rembember some false statements in documentation. For example this, orientation - "Returns the physical orientation of the device". Now assume your app work only in portrait mode and go try to get this value when device in landscape with status bar opened. You'll get UIDeviceOrientationPortrait
. "physical", yeah.
Objective-C
Main thing to be shoking for iOS beginners experienced in other languages. It's not as terrifying as it looks like. It's possible to write code despite of Java background. But here is September 2015, we can expect more. Swift and Kotlin may improve our experience in future, but only when Apple itself start to write all their soft in Swift and Google will admit to Kotlin as android dev language.
Xcode
Apple has strange character to invent the wheel as a very complex thing. They don't really care about wheel should be round to spin. They better make wheel that can make you a cup of coffee. It's what Xcode like. You can do anything - write code, sign the app and even publish it in AppStore. And what about coding, Xcode is slightly improved notepad. You can not assume everyone will write a good formatted code with it. You better assume vice versa. Refactoring, did you hear it? Jetbrains' AppCode is far ahead in terms of coding. It doesn't look like someone in Apple even thought about developers when making Xcode, the main thing is that Xcode satisfies their business-related goals. I remember when Eclipse was the official IDE for Android development not long ago. Well, I can say working with code and project structure things was far better than Xcode now. Xcode also has nostalgic Eclipse feature - to fix things with IDE restart. I almost forgot this feeling :).
UI / Xib / Storyboard
Apple - think different. Why the hell they always make new file formats, which can only be edited via Xcode, which usually bad to work with version control systems. It is even worse because of bad Interface Builder, you can't do everything you need to do with Interface Builder. Just live with it. It leads to some developers prefer write everything in code instead of using IB. 2015, huh? Developers are forced to move mouse left and right to do stuff in Xcode. That is sad. You can't even edit this XMLs manually. Constraints as really bad implemented RelativeLayout from android will really screw you, it's disgrace.
Resources and Code adjacent stuff
So here is the hell, the bottom of the hell. If you were in google world you know resources are stored in special places, drawables in drawables, strings, dimensions in corresponding xml files. You can use them from code like R.string.hello
, R.color.accent
, R.dimen.avatar_size
. Apple tried to make something like this with strings, they made "Localizable.strings", meh. You can't even use them from Interface Builder files. Thank you, Apple. Your best solution here is to write code to set localized strings from code to every Label, Button and so on. Why use Interface Builder then?
Want to create View class which loads its UI from Xib to use it many times in other xibs? You better not. Not that easy as we expect after android.
Want to remove paddings from UILabel. Forget about it and just accept it.
Community / Hipsters?
Where are they? Where are super libraries, frameworks? Okay, I know they are here... But go try ask not so default question on Stackoverflow. You're likely to get 0 answers. Now go try to find some nice PageViewController implementation, because Apple's implementation is complete crap. Yeah, and this is one of the most popular controls on mobiles nowadays. And, I say it as android developer, just imagine any web-frontender point.
Android is so fragmented, they said
Yeah, but Android was ready for fragmentation 8 years ago. iOS fragmentation is much harder to deal with. Just try to add tablet support for Android app, and then iPad support for iPhone app. It's far easier for android to support fragmentation. Then what we have to support iOS 6/7 and so on? Why the hell we need to install old IDE versions to get old SDK version? Android SDK Manager can download any SDK version separately, without downloading full IDE of course.
Initiative Apple
From one side Obj-C is a bit lower level language than java, and you forced to do many things manually, from other side Apple making stuff itself for you, even if you don't want it. For example: drag'n'drop in TableView will set transparent background to all cell subviews. Do you expect that basically? Don't think so. And this is first example I remember, there are many of them.
What you see is not what you get
Forget about WYSIWYG if you Apple developer. Interface Builder is the main example of this statement. You'll never get on device's screen something similar to Interface Builder prototype. Xcode Project Structure is the next example - you see folders in project structure, you right-click to reveal in finder and see all the files in one directory. Nice.
Positive moments
Application managed to work somehow. WTF per minutes is over 9000 but anyway it start to work once. Objective-C messaging ideology makes app crash with "NPE" like exceptions realy rarely. Positive from one side is negative from another. You're screwed to debug this. Everything looks like working good, and logs confirm it, except logic. Good luck debugging it. Apple forces you to write shitcode, really.
Outro
My thoughts now that iOS developers exist exceptionally because of users and money in Apple world. I'll not believe now anyone who experienced in something else and likes to be iOS developer. And people still saying development Android version of app takes more time than iOS version, because of Android is more problematic platform. Do I have different iOS and Android with this world?