If you ever find yourself not appreciating Xcode, try doing iOS development on an iPad.
Today was the first day where I attempted a real development task on the iPad. The goal was to start building a new UIView subclass. I used Screens to create a new Xcode project, and add the necessary files. Then I switched to Textastic to implement it. The experience was workable, but I wouldn't consider it to be ideal.
Again, I'll start with what went well.
I was surprised to find out that Textastic includes a rudimentary form of code completion. It knows a bit about Objective-C keywords and it's smart enough to offer those as suggestions while you are typing. That's very cool. It even works with properties, as seen above. But what it lacks is true auto-completion with support for Cocoa classes, methods, types, etc. That's a big deal when you forget if it's "UIAutoresizingFlexibleWidth" or "UIViewAutoresizingFlexibleWidth".
My deployment system works. I was able to initiate a build from the command line on Prompt and then download the built app about a minute later. That's not an ideal turnaround time, but it's not terrible. I actually wasn't expecting it to be as good as it is.
Documentation wasn't really an issue either. The app DocSets is really fantastic. I think that's a must-install for any developer. It's available for free on Github, but if you like it then consider buying it on the App Store to support the project. https://github.com/omz/DocSets-for-iOS
So what didn't go well?
What I missed most was the instant feedback that you get from Xcode and having a real compiler as part of your tool chain. I wasn't as comfortable with the uncertainty of wondering if NSUserDefaults had a method for setString:, or if it was actually setObject:. In many of those cases I could look up the answer using DocSets, but that's still less efficient then letting Xcode just tell you which methods are available in-line while you're typing.
But the killer for me were the unknowns that lead to compilation issues. A couple of times I would do things like forget a parenthesis, or a square bracket, or slightly mis-spell a variable or method name. Some of the time the output from Xcodebuild and Bamboo is enough to see what the issue is, but in one case I did have to open up Screens and check the logs in Xcode to see what the issue was. Not having that instant feedback is a big loss once you're used to having it around. Or maybe this will help teach me to write perfect code with my eyes closed?
My goal with this experiment is to use the native iPad apps as much as possible and to rely on Screens and remote access to a Mac as little as possible. To me, Screens is my security blanket. I'm trying to ween myself off of it. Yesterday I turned to Screens pretty often at the sign of trouble. I'm happy to report that today I didn't need to as much. I only had to go to screens to create the new project, fix the above build issue, and to convert a file type that I had on my Mac at home. I'm hoping that by the end of the week I can go a whole day without having to use Screens for any of my work.
Aside from development tasks, the iPad performed very well for me today. One new addition to my work-load was taking notes. There were two meetings I attended today where I needed to take some notes. I'd left my bluetooth keyboard at my desk however, so I had to do it all forefinger style. I read a great suggestion some time ago on how to type quickly on the iPad. On a physical keyboard we are taught to use all 5 fingers to hit the various keys. The iPad keyboard isn't big enough for that though, so what the author suggested was using just your first three fingers to do your typing and ignore your thumb and pinky. That system works extremely well for me, and I was very happy with the accuracy of my typing and the speed at which I was able to take notes today using that method. Here's a link to the aforementioned article: http://whowritesforyou.com/2011/08/24/ipad-typing-tip-use-three-fingers/
I paid a bit closer attention to how I was using the iPad today. Yesterday I spent more of my time leaving my iPad at my desk as if it were a laptop. Today I made it a point to carry it around with me everywhere. What I noticed was that having a tablet made me more likely to share my work with others, and by share I mean literally handing them my iPad to show them what I was doing. I think this is a great way that the iPad can add value in the work place, especially for software development. Software Engineers are infamously shy and tend to keep to themselves. Couple those tendencies with the fact that it's difficult sometimes to crowd around a laptop to share your work with others and you have a recipe for poor communication between engineers. I like how the iPad solves the issue of sharing with a Laptop or an iMac because rather than crowd around a monitor I could just pull up a source file or a Google doc and hand the iPad to someone to get their opinion. Social interaction is a hallmark of mobility, and a perfect example of where tablets can add value to our work as software developers.
Tomorrow I'm going to attempt some more development work, with the goal of trying out Diet Coda as opposed to Textastic, and hopefully using Screens a bit less than before. We'll see how it goes :)