An Introduction to iOS
Quite a bit going on the past few weeks. Of special note I’m very excited to be developing an iOS course for the incoming Software Business Accelerator (SoBA) student interns at the University of Oklahoma’s Center for the Creation of Economic Wealth (CCEW). The students will be part of a joint business / software team tasked with developing an application over the course of the Fall semester. They are computer science and engineering students with a background in object-oriented programming, but their experience is almost exclusively in Java.
We have four weeks to bring them up to speed on essential Objective-C skills, which they will then apply to product development for the next three months. This is going to be an intensive course with the aim of teaching the students the tools, the language, the APIs and the design patterns they’ll need to develop successful iOS applications. That’s four weeks to learn Xcode, Objective-C, Cocoa Touch and essential patterns such as Model-View-Controller and Data Source & Delegate.
Learning iOS Programming
The course will be based on the O’Reilly text Learning iOS Programming: From Xcode to App Store, 2nd Edition by Alasdair Allan. I am astonished at the quality, depth and breadth of this book, the clear choice after reviewing over a dozen introductory iOS texts.
The book met all my requirements. It introduces Xcode, on which we will be spending the first week. Previous experience with student teams has demonstrated that Xcode itself can be a major impediment to learning Objective-C. Any comprehensive tool like Xcode can be overwhelming to a new user. The students will learn how to put it to their advantage, and by the end of the first week they will understand Interface Builder, the Editor and Assistant Editor, and debugging.
The text then introduces Obj-C and what it means for a language to be dynamic. It covers basic object-oriented structures and the Obj-C collections NSArray and NSDictionary. Most importantly, this chapter contains a section devoted to memory management which covers both the Obj-C 2.0 features such as @property and @synthesize declarations as well as the underlying mechanism. It also introduces Automatic Reference Counting (ARC), which is employed throughout the book. Memory management often confuses students new to Obj-C, as it’s not something they must worry about in other modern languages such as Java, Python or Ruby. Our students will understand why Obj-C works the way it does and how to avoid pitfalls by using the current technologies.
Finally, the text covers critical Touch APIs and design patterns in depth, in particular the UITableView ecosystem, which every iOS developer must understand, all while building a sample application from the ground up. Additional APIs are introduced, with coverage of the most important View Controllers as well as chapters on networking, data management and hardware sensors. We will be focusing on UITableView and the Navigation and Tab Bar Controllers, and the additional material will serve as a reference which the students may draw upon as they develop their own ideas and own product during the semester.
Although the course is based on the book, it diverges in a number of places. Instead of building the included sample application, we will be building our own. Each week, as the students learn a new API or feature of the language, they will add to their budding project. By the end of the four weeks they will have developed a table based application, previously backed by a SQLite database, now backed by a networked database using Parse.
The students will go beyond the included APIs and learn how to leverage open source technologies and public services such as Github. Moreover, the students will learn how to work as a software development team and will be exposed to agile methods. They will receive their assignments in the form of specs and mocks, and they will be expected to program in pairs, iterate through development and work in short one week sprints.
What follows is an outline of the course in its present form:
Week 1: Xcode, Obj-C and Cocoa Design Patterns
Lesson 1: Xcode & Obj-C / Chapter 3: Your First iOS App / Assignment: Simple Interface
Lesson 2: Obj-C, Collections & Design Patterns / Chapter 4: Coding in Obj-C / Assignment: Breakpoints & Debugging
Week 2: Table Views, Nav Bars and Tab Bars
Lesson 3: Table Views / Chapter 5: Table View-Based Apps / Assignment: Table View
Lesson 4: Nav & Tab Bars / Chapter 6: Other View Controllers / Assignment: Nav Bar, Tab Bar
Week 3: SQL, API Overview and Github
Lesson 5: SQL, fmdb / Chapter 8: Handling Data ~ Storing / Assignment: SQL Backed Table
Lesson 6: API Overview / Browse Chapters 6 & 12 / Assignment: Write to SQL
Week 4: Networked Applications
Lesson 7: Networking, AFNetworking, Blocks / Chapter 7: Connecting to the Network / Assignment: Asynchronous Request
Lesson 8: Parse, Key-Value Coding / Browse Chapters 9 & 10 / Assignment: Parse Backed Table
A community program?
We have discussed opening up the course to auditors. A few individuals have already expressed interest in attending the course, and we are looking into ways to accommodate them. The course will run from August 21st to September 18th. Lessons will be held for approximately two hours in the evening on Tuesdays and Thursday, with time split between material and programming. If you’re interested in auditing this class, let me know and we’ll see what we can do.