Thoughts on present iOS development
Now the time for iOS has come and I’m putting together these notes basing on my recent experience with XCode 6 Beta, Beta 6 and Beta 7.
On to the great sides:
-
XCode 6. Great Interface Builder experience so far. Although it’s terribly slow at times, it’s been very handy. Live rendering of custom views is both super useful and confusing at times. I don’t know what hardware do they use for demos at WWDC, but on my 2010 Macbook Pro it’s not even close to real-time (takes 20-30 seconds to build and update the view). Still cool and faster than rebuilding the project for that little tweak.
-
Swift is brilliant. I thought moving from ObjC will bring pain and even wanted to postpone until I’m more or less at home with it. Glad that I’ve done otherwise with the latest project. Aside of a couple little hacks, experience has been smooth and pleasant so far.
-
UI preview feature. Handy to check the constraints and have a rough idea of what the view will look on various devices, but with its weak sides – not totally correct rendering of table view cells, latency and some crazy behavior with messed up constraints that doesn’t match to that of a real device.
Now to what’s not so great:
-
Installation issues. First launch after the fresh install is confusing. Filed the issue.
-
Docs can be better. Although the built-in doc browser has been seriously improved, guides are still in read it all in one book format, and are very hard to navigate and fish out necessary info (unless you are reading it from cover to cover).
-
Unwind segues not recognized when working with Swift and need ugly ObjC workaround.
-
Swift rules change often (especially for unboxing). I moved during the week from Beta to Beta 6 to Beta 7, and with each move there was a bunch of warnings about unboxing rules. Glad it evolves, but man, it’s annoying at times (especially when you have to update template code that was generated for you and you don’t have a clue what it should be without digging in).
-
Interfacing from Swift with some legacy libs can be an adventure. You’ll need bridging header files and hand-keeping them in sync when you update libs.
-
Debugger doesn’t show any vars and fields when working with Swift. Error messages are hilarious and don’t help at all. One day it says something about some Metal library it couldn’t compile, the other – about an unknown variable that is actually defined two lines above the breakpoint. All in all, you can’t debug Swift code reliably and have to get back to Stone Age NSLog techniques and good deal of guesswork.
What are we still missing:
-
Automatic laying out screen space on soft keyboard appearance / disappearance. It’s 2014, but we still need to handle this manually. Android has the feature either to pan the screen or to resize it, but Apple figured that’s something we can do ourselves. In every project, on every screen with fields.
-
Fitting of content within multiline labels doesn’t work. Single-line UILabel views are capable of shrinking text to fit text fragments that are too long for the allotted screen space. When you go multi-line, you lose that. Oh boy, there’s nothing terribly complex with that, and why is it not there yet. (I hear it is in iOS 8. Backport would be nice, guys.)
Bottom line is that toolkit has gone long way to become really helpful and usable. There are still lots of weak spots and at times experience is frustrating (rebuilding complete project for 2 minutes after a one line change is one of them), but at least designing and building stuff for iOS and Mac OS X is now a pleasurable experience.
If you are still using Appcelerator Titanium, consider going native with your next project. Both Android and iOS platforms give all you need to work on your projects efficiently now.
We are living through exciting times, ladies and gents!