Here at Redfin we have an awesome mobile team who does all of the features for our iPhone, iPad and Android apps. They are a relatively small team, and as you can imagine they have a lot of feature requests. I had been working on a social feature for about 8 months or so, and since social features are so widely used on mobile devices, I decided this feature should really be available on the iPad. Luckily at Redfin we’re allowed to pick a few side projects to work on every quarter, so last quarter I teamed up with a developer on the mobile team to create a prototype of the feature on our iPad app. Sadly, since it’s a prototype, this means that it hasn’t shipped as of the time of this post, but could at a later date.
At the time that I decided this, I was developing on Windows and had been a lifelong Windows user (except in elementary school, we played Oregon Trail on Macs, of course). To develop for iOS apps, you pretty much have to use a Mac, which I didn’t know when I signed up to do this. I had considered switching before but I didn’t think the benefit would outweigh the overhead of setting it up and learning how to use it. I was pleasantly surprised, because it wasn’t that hard. The command line is unix, which I was familiar with, and almost everything else was explained by a really nice Redfin engineer who wrote a document about it. Now that I have a Mac, the only thing I don’t like about switching is that I use a Windows computer at home, and I always press the wrong hotkeys now; it’s very confusing switching back and forth all the time! But it runs much faster than my Windows machine did, so I’m very happy with it overall.
Once I’m all set up with my Mac, I have to learn how to use Xcode. Xcode also has different hotkeys than Eclipse, which is what I usually use. And their tabbing system works like a browser tabbing system, so if you open a new file, it will open in the tab you have open currently. I found it nearly impossible to work with more than 5 tabs at a time. And if you are debugging, and the debugger hits a breakpoint in the code, it will open the file with the breakpoint in the tab you’re looking at. Thanks to Xcode I now have anxiety about opening tabs in Eclipse too, because I expect to lose files when I open new files.
Now that I’m set up with my Mac, and learning to deal with Xcode and its strange tabbing system, the next step is to learn Objective-C. Most of my experience so far has been web developing, and in school I mostly used Java. I’ve even done a small amount of Android development before, but this didn’t really prepare me for using Objective-C. The syntax is substantially different than Java. But syntax usually isn’t the difficult part. The biggest problem I had was that you have to do some amount of memory management, which I haven’t done a lot of before, so a lot of times the app would just crash while I was trying to debug something. And sometimes you don’t even get that to let you know something is wrong! On the positive side, I found displaying things to be easier than on the web because you can use a GUI builder to place the items where you want them, instead of writing all of your own HTML and using CSS to make it look the way to want it to.
GUI builder in Xcode
Overall, it really is satisfying to do iOS development because you get to test on an iPad, which I would recommend over the simulator if you can help it. There are a ton of APIs you can use, and open source code if you can’t find something you want offered by Apple directly. There is also great documentation for the APIs that Apple offers. The most satisfying part of iOS development is that you get to see your work on that beautiful screen, which makes you happy to be doing it!