CocoaConf DC Objective-C and Interface Builder Presentations

CocoaConf DC wrapped up on Saturday, and I thought I’d post the slides and Xcode projects from my presentations here. The conference had an awesome lineup of speakers, and I was a little bummed that prior commitments kept me from attending most of the other sessions. The couple I did manage to get to were excellent though.

Anyway, the first presentation I did was an introduction to Interface Builder targeted to beginners, and the second was an intermediate-level session exploring some cool features of the Objective-C runtime system. You can download the slides and the code from the links below.

Understanding Interface Builder

Understanding Interface Builder Slides

Understanding IB Xcode Projects

Objective-C Runtime Magic

Objective-C Runtime Magic Slides

Objective-C Runtime Magic Examples


Can a Non-Programmer Learn iOS Development By Taking a Class?

Someone just posted what I thought was an interesting question on the About Objects website:

In a nutshell, I do not come from a programming background but I am very technical and I have a strong desire to learn iOS programming.

My concern is that if I attend the complete catalog of classes starting with ANSI-C through iOS programming that I wouldn’t have the nuts and bolts background to absorb the training.

I have several ideas for apps to develop and the cost of app development far exceeds that cost of your courses.

Any insight or advice would be appreciated.

Here’s what I wrote in reply:

Great question, thanks!

ANSI C and Objective-C are the nuts and bolts of iOS development, which is precisely why we offer courses on those two topics. In fact, I’d say the distinguishing characteristic of About Objects training in general is the degree to which it focuses on fundamentals. And from what I’ve directly observed, our training does help compensate to a certain degree for a lack of programming background.

But I think your question a wise one because ultimately, as the old saying goes, there’s no substitute for experience. And in my mind it typically takes six months to a year to become reasonably good at iOS development. The problem though for a lot of folks isn’t an unwillingness to spend that much time learning their craft; it’s that they find themselves unable to make any real progress because the initial learning curve is just too steep.

So I see the role of our intro-level training classes as being a means to get people over the hump so that they have enough of a grounding to make rapid progress on their own, and to have a deep enough understanding of the underlying technologies that they can reason their way out of corners.

Having trained hundreds of developers at this point, we’ve seen good results even for most of the 10-20% (as a rough guesstimate) with no programming background. Obviously, not everyone is cut out to be a developer, so there’ll always be some folks who ultimately don’t stick with it, but most of our non-programmers have done fairly well; a growing number have apps on the iTunes App Store.

Regarding your point about cost, I certainly agree — developing a native iOS app capable of holding anyone’s attention is an expensive undertaking. Read Craig Hockenberry’s excellent response to a question on Stackoverflow if you want some added perspective.

About Objects Student’s First iOS App Goes Live on App Store

About Objects student Jeff Richardson has developed a truly impressive app that’s now available for download on the App Store for $2.99. It’s a remarkably polished first effort that makes it easy to create landscape designs right on your iPhone.

App: Home Outside Design – Create the Landscape You Love.

Developer’s Website: Julie Moir Messervy Design Studio

Jeff’s Website: All Dreams Digital

Objective-C Tutorial Videos

I was in Dallas last week teaching iOS (iPhone/iPad) development at Neiman Marcus, and due to the wonderful, wintry weather (hm, nice alliteration), the second day of the class had to be cancelled. So I pushed out some homework assignments and PDFs of the course material via Dropbox, and put these videos together for some of the trickier bits on Objective-C.

Customizing Xcode Text Macros

Students in our classes often ask how to customize Xcode’s text macros for block structured statements (e.g., method and function bodies, bodies of if, for, and while statements, etc.) in order to push the opening curly brace to the next line. Here’s a little command-line fu using OS X’s defaults mechanism:

defaults write XCCodeSenseFormattingOptions '{ "BlockSeparator" = "\n" ; }'

This tells Xcode to use a newline character as the ‘block separator’ between the opening curly brace and whatever preceded it.

iPhone Development Tutorials Hit The Mark

I’m accustomed to getting occasional emails expressing appreciation for our iPhone development tutorials, but this one I received last week really blew me away. Here it is in its entirety:

Dear Mr. Lehr:

A small note to convey my sentiments regarding your tutorials.

The internet is rife with many iPhone tutorials. Unfortunately, many of them appear to be a re-hashing of the same tutorials and code providing little value. Almost all of them also use Interface Builder, which, though useful and has its valued purpose, is not always helpful in terms of a teaching instrument the way its applied (which appears to have more to do with reducing the needed educational content and replacing it with a few click and drags).

Your tutorials are unique in that they approach the programming tasks from the programmatic perspective instead of the Interface Builder perspective. This is novel and exposes your genuine interest in providing an actual education regarding the subject matter. This alone is outstanding, setting you apart from almost every other tutorial offering available. Indeed, it’s been my experience that only the “real pros” that offer the programmatic approach in tandem or as an alternative to the Interface Builder approach.

Your tutorial projects are complete. By way of example, Editable TableView, is a complete project which illustrates the commonly required aspects of this kind of project. Most tutorials available on the internet are incomplete, showing only a small portion of a project, or worse: offering a code snippet, and therefore devoid of the broader application context.

Your tutorials are well annotated, in a manner many commercial firms would use. Your comments are as complete as the code and projects, always being sure to convey the underlying code issues and therefore always explaining the real issues at hand.

It would not be fair to complain about the quality of other tutorials as they are often provided free and represent an effort by people in the community to provide something to others at their own expense. That said, sometimes the tutorials are nothing more than resources designed for commercial purposes, such as selling a book, and this interest comes through as a more pressing priority than the tutorial itself rendering them to various stages of uselessness. Whilst I would suggest yours are also provided for commercial purposes, the efforts put forward allows your offerings to standalone as quality work in and of themselves. This underscores your professionalism and again underscores your commitment to training.

Pretty remarkable, isn’t it? Someone who doesn’t know you taking 20 minutes to tell you. at length, how impressive your tutorials are and why. That’s a result of the impact you have made — your doing. I only wish I would have found them when I had started working with the iPhone a couple of years ago! In the meantime, I have become a professional on the nature and quality of other tutorials and can speak from a position of experience.

Please kindly accept my commendations on such a terrific job on your tutorials. Your contribution is as outstanding as it is impressive. You certainly set a new bar, which, though perhaps not hard to move, clearly took considerable effort and skill to move it to where you have. Very nice work. Thanks for setting such a fine new standard. I wish you the very best.


[Name withheld by request]

Vancouver, BC, Canada

It’s incredibly gratifying to know that someone has gotten that much out of the tutorials. And I really, really appreciate the feedback. Thanks!

About Objects Student’s iPhone App Featured on the App Store

Craig McLeod, a developer at Resort Technology Partners who attended the About Objects Objective-C for Beginners and iPhone Programming Workshop classes back in October, sent me an email last week to let me know that his team’s very cool REALSI app is now available on Apple’s App Store. Here’s what he wrote:

January 26, 2010

Hey all,

My company started on a complex iPhone app, REALSKI, an Augmented Reality iPhone app, weeks before I went to my About Objects class. When I came back, I was able to jump into development become a key member of the project!

Apple has featured REALSKI under New & Noteworthy apps in iTunes as of yesterday. I don’t know how long it will stay there, but there is a possibility of Apple featuring it more prominently later on. They contacted us about promoting it last week.

It’s kind of a big deal to have a featured app so I’m telling people. The app requires an iPhone 3Gs and it is free. It comes with 5 ski resort maps included and there are over 80 more ski resorts available for download at $0.99 each.

What is augmented reality?
With the iPhone it is data/information layered over your iPhone camera’s current live view. We have taken ski run GPS data so that when you are at a ski resort you can hold up your iPhone and see the runs/lifts/buildings around you labeled accurately to what you are looking at through your iPhone’s camera.

The web page:

This is me showing an early demo to Olympic and X-Games gold medalist Shaun White here in Vail this season. All the Olympic hopefuls are training down the road at Copper Ski Mountain and the Burton (original snowboard company) Team came over to Vail.

Here is a pic of it being used a the World Cup ski race at Beaver Creek this season.

The direct link to the app in iTunes

Craig McLeod demoing his team's (apparently jaw-dropping) REALSKI augmented reality iPhone app for Olympic medalist Shaun White and unidentified friend.

The picture of Craig demoing the app to Shaun White is too cool to leave as just a tweetphoto link (see above), so I just had to include it inline here.

Needless to say, I’m thrilled that Craig feels our training helped get him up to speed on iPhone development quickly enough to be a key contributor to a cool app that shipped just a few months later, though ultimately the credit goes to Craig. Nothing makes a teacher look so good as a great student. Way to go, Craig!

iPhone 101 Xcode Projects


As promised, here are the example Xcode projects from the recent iPhone 101 class I gave at the Denver 360iDev conference.

Morning Session:
Introduction to Objective-C (45KB)

Afternoon Session:
Introduction to iPhone Programming (21KB)

[Edit: Broken links fixed Oct. 14, 2009]

Slides from iPhone 101 at 360iDev

Here are the slides from the morning and afternoon sessions of the iPhone 101 class I gave at the 360iDev conference in Denver a couple of weeks ago. The morning session consisted of an introduction to programming in Objective-C. In the afternoon, we got into to iPhone development with UIKit.

Morning Session (PDF, 3MB)

Slides from the morning session of iPhone 101 (Introduction to Objective-C)

Afternoon Session (PDF, 5.2MB)

Slides from the afternoon session of iPhone 101 (Introduction to iPhone Programming)

I’ve cleaned up the Xcode projects I demoed during the lab exercise sessions and I even added numerous comment statements to the code to make things easier to follow. I’ll zip those projects up and post them as well, shortly.

Reactions to September iPhone Classes

[picapp src=”c/6/e/d/Apples_New_3GS_d087.jpg?adImageId=4908693&imageId=5005244″ width=”250″ height=”176″ /]

I just finished teaching a two-week series of iPhone training courses last Friday, and I’m going to be heading out to Cupertino, CA on Sunday to deliver another one. (Okay, who’s the nut who schedules this stuff? Oh wait … that would be me.) Well, in spite of the grueling schedule I thought the class went really well, and feedback from the students was really great!

One of the unusual things about the class was that nearly half the attendees were from outside the U.S. (with the U.S. contingent including people from NASA and Penn State University). While it’s not uncommon for us to have students fly in from Canada, folks in this class came from an assortment of countries, including Ireland, France, and Venezuela. I think we all enjoyed the international flavor!

The training consisted of a series of courses: a 4-day ANSI C Programming course, a 2-day Objective-C for Beginners course, and a 5-day iPhone Programming Workshop course, presented back-to-back over a 12-day period with a one-day break. It’s an intense schedule, but seems to be the only way to cram all the material into a two-week delivery. And for most people that seems to be the outer limit of the amount of time they’re able to be away from their regular day jobs to attend.

Taking the full series tends to be most appealing to folks who are either relatively new to programming, or who don’t have a great deal of recent experience coding in compiled languages such as C, C++, C#, or Java. One of the participants who attended the most recent class wrote a series of blog entries about the experience, concluding with these thoughts:

11 days with 1 day off in between. 4 days in ANSI C (fantastic fun, learn do a lab, learn do a lab). Then 2 days in Objective C. Then 1 day off (Washington DC baby!). Then 5 days on the trot of iPhone programming starting not with the graphical Interface Builder but doing everything by hand. For me, this was THE way of learning and building real understanding and strength.

I came home with no sleep on the overnight return to Belfast, severely jetlagged but started coding Monday morning (since I was awake at 5am anyhow). I now feel comfortable in Xcode and very comfortable in Interface Builder. I know my view from my view controller from my UIVIEW from my App Delegate. When the error messages come (and they do, oh yes) I understand their complaint and I know where to heal their little bruises. [so far I hasten to add]

Read more

Here’s the complete set of postings on the class from Max O’Malley’s blog:

And here’s a sampling of feedback from some of the other attendees:

    “The course format is arguably the best in the market today. The course should be a must for people intending to build serious and robust applications for the iPhone.” — V. Suresh

    “Good course, good value. Thanks!!” — Misty Patcyk

    “Well presented. The pace and content were perfect for my needs. This was the most enjoyable course I’ve taken in years.” — Robin Winsor

    “The material is just perfect….In two weeks I learned more than in one university semester.” — Nicos Palimidis

    “[The instructor was] extremely knowledgeable. Really knows his stuff.” — Lynn Jenner

    “If you want to learn Objective-C, this is the course” — Steve Nelson

    “This course has been very important in shaping my thoughts for the future. It confirmed my love of coding and enabled me to begin my C/ObjC/iPhone journey.” — Richard Johnston

    “Great starting point for beginners.” — John Dutchak

Thanks everyone! Meanwhile, the iPhone Programming Workshop in Cupertino has already sold out more than a week before the start of class, so looks like we’re going to have another full house. Should be fun!