With just over 100 pages, this book doesn’t mince any words; it gets straight to the details, so I will too.
Geolocation in iOS is a hot topic right now, so this short book is extremely topical. The author jumps right into the material. The book assumes prior knowledge of iOS, Xcode, and Objective C, so if you were hoping for a primer on those technologies, forget it.
The introduction takes us through a simple location application to get our feet wet, initially printing tuples of timestamp, latitude, longitude, altitude, horizontal accuracy, vertical accuracy, speed, and course to the console, and then demonstrating how to display that information in the iOS graphical user interface (GUI). Along the way, I wish the author had provided links (this is a general theme throughout the book) to specific external sources and references to help provide some additional context and detail. For example, on page three, there is a reference to the device support section of the iOS application programming interface (API) guide available from the iOS development center in a discussion of the supported platforms and the nuances between them for iOS locations. However, it is left to the reader to look up the link. A similar example appears later when the author refers to the GLONASSS positioning system as a potential alternative that is worth plugging in to future versions of the location API.
Chapter 1 is fluid, where the examples build off of one another. The actual example is simple and easy to understand; I enjoyed it. While I wish more detail had been provided, it’s refreshing to get down to the nuts and bolts right away.
Chapter 2 takes us into continuous location monitoring, and provides examples of how to store and retrieve location data in iOS via the provided SQLLite DB API. It started to hit me here that the examples thus far (and throughout the book, in fact) assume that everything “went right.” There is no real support for troubleshooting along the way. It would have been nice to provide some side notes, such as, “If this didn’t work for you...“ or ”If you don’t see what I am showing in Figure 2-10, then try a), b), or c).” The heat map example in this chapter is very informative (and actually includes a link to the referenced heat map API). The chapter concludes with a discussion on region monitoring.
Chapters 3 to 7 are somewhat brief. Chapter 3 adds a map to the user interface, a refreshing example to start out with. It then extends the map to add location to the current position and explains the use of the MapKit API in iOS. Map annotation using tooltips and overlays is also discussed. Chapter 4 discusses the digital compass, and how to write a compass application that uses the device magnetometer to determine heading and whether the iPhone is in portrait or landscape mode. The examples are discussed at a level of detail that is quite useful. Chapter 5 introduces the reader to geocoding, with simple examples for geocoding and reverse geocoding, and then shows how to add placemarks onto the previously displayed maps based on that positioning. Chapter 6 demonstrates the drawing of heat maps using an earthquake sample application that shows the magnitude of a recent earthquake in New England. This chapter also explains basic data manipulation and representation using the iOS .plist file, and a connection to a useful iOS external API called SHGeoUtils, written by George Polak of Skyhook Wireless and licensed under an MIT open-source license. The heat map in Figure 6-5 is visually attractive. Chapter 7 wraps up the book with a discussion of third-party geolocation software development kits (SDKs) ranging from Skyhook Wireless’ SpotRank, which predicts the density of people in a specified area worldwide at any hour and day of the week, to Local Faves, a location-aware and social-feature API; GeoLoqi, an app from a Portland startup that does real-time location tracking; MapBox, which adds custom maps to any application; Bing Maps API; ArcGIS for iOS by ESRI; Urban Airship, an app from another Portland startup that provides a geofenced push notification service; and finally client APIs for Foursquare (not officially supported by Foursquare) for iOS on Github.
Overall, this is a fast read and an excellent resource. I can’t call it a definitive guide, but it is a great primer on the most useful geolocation features in iOS, with a set of real-world examples.