These projects were initiated by the Stanford University’s CS193P, iPhone Application Development class. There are two projects, in three repositories.
GraphCalculator was the first project. GraphCalculator is a simple two screen application that ushered me into Objective-C and iOS application development. This project gave me a glimpse to the syntax of Objective-C, Xcode, and the cocoa framework.
Places and CoreDataPlaces were completed after GraphCalculator. The main difference between the two part project is the mechanism of persistence. Places uses NSUserDefaults while CoreDataPlaces uses Core Data. Whilst following the lectures supplied by Stanford, I also attempted to experiment with the suggestions detailed in Clean Code: A Handbook of Agile Software Craftsmanship and The Pragmatic Programmer: From Journeyman to Master.
The Places application allows the user to navigate through the recent pictures taken in the top places designated by Flickr. The Flickr API is provided by Stanford University. The specifications to this assignment can be found on the CS193P page.
In the user's perspective, Places has two tabs with Top, and Most Recents. The Places application is constituted with three custom UITableViewControllers and one UIViewController with UIScrollView as its main view. These controllers reside in UINavigationControllers and a custom UITableBarController allowing navigation between the model-view-controllers (MVC). The three custom UITableViewController are subclasses of IndexedViewController. On top of inheritance, it utilizes three strategy objects to optimize code reuse.
The following lists outlines my first-time attempts, and experiments executed throughout the course of completing the projects.
- Objective-C
- Xcode
- Git / Github
- Dash for framework documentation lookup
- Model-View-Controller design/implementation
- Delegation
- Notification
- Strategy design pattern
- Factory design pattern
- Multi-MVC application - Places & CoreDataPlaces
- Multithreading with Grand Central Dispatch
- Algorithm utilizing NSDictionary
- Key-Value-Observing
- Objective-C category
- iPad/iPhone universal application
- UIView
- Multi-touch gestures
- Core Data implementation with SQLite database
- Image cache with NSFileManager
- Utilization of NSZombie
- nib/xib file based UI design
- TDD -> Refactoring development cycle - Production code, Test code (MostRecentPhotos files)
- OCMock objects
- Integration Tests with Keep It Functional (KIF) by Square
- Descriptive coding applied to variable, class, protocol, method and constant names