Embracing the struggle
Week 8 of the Code Fellows iOS Development Accelerator has been traversed and the beginning of a new path is here. This program has been the most challenging endeavor I have ever undertaken. The pace was very intense and "the struggle is real," as my instructor Brad Johnson warned us it would be.
A very large amount of ground was covered, in a relatively short period of time, to get me where I am today. Due to the current state of iOS, we covered two languages, Swift and Objective-C. Each week we made an app that had significant functionality. Some of the frameworks utilized include: Core Image, UIKit, Foundation, MapKit, Photos, Accounts, Social and WebKit.
To drill down a little further I will provide some examples of what was accomplished with these. In the first week we made a Twitter Clone, in Swift, which leveraged table views to display tweets that were fetched using the Social framework, Twitter's API, Oauth and, JSON serialization and parsing. A Xib was used to make custom cells that displayed the tweet's user image, name and tweet text. Images were lazy loaded for better performance.
Auto layout was used for displaying view contents dynamically in portrait and landscape orientations. Views were imbedded in a UI Navigation Controller which implicitly introduced us to the stack data structure through pushing views onto it. Swift optionals and down casting were great for the handling of JSON data. Closures made swift work of asynchronous callbacks and switch statements enable dynamic handling of HTTP response codes.
Week 5 was a traumatically awesome plunge into Objective-C. We built a "Location Based Reminders" app that included Apple Watch integration through WatchKit. The Core Location and MapKit frameworks provided the main functionality for this program. MKMapView was utilized for the display of the map and we started off by having 3 interesting locations to select on it. A button for each initiated an animated traversal to the location with a set region to show. I decided to switch to satellite view for this as my locations looked great using this.
For the next part, CLLocationManager and map annotations with callouts were used to place and track locations on the map. When the user long pressed a spot on the map, a gesture recognizer initiated an annotation at that point. The callout could be selected and a CLCircularRegion would be created, and registered with NSNotificationCenter, around the annotation for monitoring. This region was displayed with a rendered MKCircle overlay, and when crossed, it would trigger a local notification. Using WatchKit, we displayed the dropped annotation in a map view on the watch simulator.