So after my first iPhone (2G) broke almost 1.5 years ago, i finally got another iPhone a few days back. My dad's company (ESIRION AG) is really busy developing all kinds of fancy webapps, so he asked me if i could work my brain into developing applications for the iPhone. I've already looked at Xcode a year back, so this would be a good opportunity to earn some money with developing mobile applications.
Me and the iPhone
First off, a little story about my luck with iPhones. When i first got my 2G (AT&T) as an early christmas present from my dad right after it came out, i was stunned. Although i had to Jailbreak and Unlock it to use it with my german Vodafone-SIM, i had fun with it. Until one day the Baseband-flash went wrong.
After a few weeks of diddling, flashing and i-dont-remeber, i got the Baseband back working again. Anyhow, the phone died a few weeks later. It just wont turn back on..
That phone aside, i got a used greek iPhone 3G last year, sadly the SIMs-lot is somehow whacky since it sometimes looses network connection or audio during calls (my voice can't be heard anymore).
Since i have like 20 cell-phone shops in walking distance, i started scouting for Android phones since they are more affordable and less dictated. When i finally went into a independent Vodafone-Store, they had an iPhone 3GS 16GB in the showcase. So i asked an employee since when Vodafone has iPhones. The Phone was actually sold by her privately and it was supposed to be "unlocked". Apparently she meant that "it is possible to unlock and jailbreak it". This doesn't help! As a developer i need to be able to use latest/beta firmwares.. so it makes no sense to wait a few weeks or months until a new Baseband unlock is out. Anyway, i returned the phone 60 minutes after i bought it.
Ultimately i am now stuck with the broken 3G where the SIM is whacky. It works as an iPod Touch and for development tho.
Xcode - and everybody was like "yeaaaah!"
So there i was, used to vim, NetBeans, IntelliJ Idea, Scala, Java, Ruby, being stuck with an IDE which is worse than Eclipse. Yes, that's possible! It's components do not only crash for no reason, they also don't seem to do what they're supposed to.
Copy or Reference?
When you copy files from one project window to another (in order to add them to the project), Xcode asks if you want to reference them, or if you want to copy them. I am not sure how many of you just reference everything in your project from outside your versioning, but hey.. there must be some insane reason that by default it does not copy the files, but references them with the full OS path. Sadly, when i copied (!) some files from project A to B and checked the box for copy, it did reference them.
God know's why.. i've had this like 10 times over the past week.
The Interface Builder
I've never felt so disgraced when i saw that piece of GUI crap. Sorry folks, this stuff is more complicated to use than to write it in code.. Except for random crashes, i didn't have any problems with it.. Except the clicking of course.
I can imagine tho, that Interface Builder is a nice way to make design layouts to give developers a better idea of what things should look like. For that part it is simply amazing. Pretty good if you can actually discuss the layout during a presentation and change it to get everyone's feedback right away.
So i wanted to comment like 500 lines of code. Unless you know that you have to Edit -> Insert Text Macro -> C -> Comment Selection (from a huge list), you're pretty lost. Sure, if you know about Cmd + Shift + 7 this is a piece of cake, but sadly this info cost me 15 minutes of Google Searches.
I find it bad, that you actually have to select the a macro according to your language. Doesn't Xcode know what filetype it's editing? How does the syntax-highlighting module know how to color the code?
Even for a company that is restrictive but flexible like Apple, it's pretty exceptionally stupid to not let people write plugins. Didn't Steve jobs say in his iPad presentation that Apple wants the product to fit the customer, not the customer the product? Then how is it, that i can't customize Xcode to use mercurial or git? I'm sorry but isn't git used in a really lot of projects? Does Apple really believe that someone would start committing his project with images (binary) data and stuff to Subversion or CVS?
Tho i love working in the shell, when i code in an IDE, i want to work with the the VCS of my choice from right within, especially if the IDE is supposed to as "innovative" as Apple always tells us.
After having almost worked two straight weeks in Xcode, i find it daunting to use. Apple's intentions might be good on Xcode (unlike the iPhone and iPad), but it's done in a terrible way.
Also, not having an open plugin support is really nasty since Apple always talks about products that fit the customer, not the other way around.
Anyhow, i will dig deeper into mobile development and may even put more efforts into that area. After i've done some work with Android i'll be sure what phone to get.
I am really looking forward tackel the problems of mobile devices in combination with live-data gotten from Akka-powered Liftweb-Application! This is going to be so interesting!