Hacker News new | ask | show | jobs
by pmjordan 5250 days ago
It still doesn't make sense as you can use tools such as Interface Builder.

I was bitten by this on my first major contract iOS app, so I think I know what he means. Interface Builder will get you most of the way fairly quickly, which is deceptive.

Then you start refining to try and match the photoshop mock-up for visual design, and find the built-in UI classes don't handle this. Buttons not supporting labels below an image by default, or multiple buttons next to each other on the navigation bar, or a background that moves with a table view, etc. etc. [1]

You get to work on custom subclasses (or adapting some open source ones). Interface Builder doesn't let you set properties of custom views, so your view controller starts being filled up with all sorts of stuff that really should be in the nib file.

Then you find out that actually, various labels and text views need to support multiple lines of text. This messes up your beautiful layout from IB. Struts & Springs are now useless for half your screen elements, and you put custom layouting code in a custom container view's layoutSubviews method or your view controller just to push stuff down the screen and resize your scroll view's contentSize. The complexity of this layout code grows for every supported orientation and device type.

Your NIB files are now a mere shadow of their existance at the beginning of the project, so at this point, making a change to move some views to a different screen (is that only on iPhone/iTouch or iPad too?) is no longer a trivial exercise at all.

Yes, it's all manageable. But there's a whole range of sudden complexity bumps at "80% done" where the existing tools leave you stranded. If you originally quoted for functionality covered by IB but then need to customise it, that will take a lot of time, and you'd better have budgeted for it.

[1] The situation has improved somewhat with iOS5, which makes supporting iOS4 (let alone 3) devices the IE of iOS development.

1 comments

Thank you for this description. I've done a bit of Android work, but no iOS work yet. Most of my career I've done web apps, and my recommendation to my company is to do web apps instead of native apps for all of our mobile projects. You've reconfirmed my suspicion that native apps get into a lot of hidden complexity that's not apparent from the "Hello World" tutorials.