Learning iOS Programming Alasdair Allan Editor Shawn Wallace Editor Brian Jepson Copyright © 2012 Alasdair Allan O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (http://my.safaribooksonline.com). For more information, contact our corporate/institutional sales department: (800) 998-9938 or [email protected]. Nutshell Handbook, the Nutshell Handbook logo, and the O’Reilly logo are registered trademarks of O’Reilly Media, Inc. Learning iOS Programming, the image of a lapwing, and related trade dress are trademarks of O’Reilly Media, Inc. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and O’Reilly Media, Inc., was aware of a trademark claim, the designations have been printed in caps or initial caps. While every precaution has been taken in the preparation of this book, the publisher and authors assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. O'Reilly Media A Note Regarding Supplemental Files Supplemental files and examples for this book can be found at http://examples.oreilly.com/0636920018490/. Please use a standard desktop web browser to access these files, as they may not be accessible from all ereader devices. All code files or examples referenced in the book will be available online. For physical books that ship with an accompanying disc, whenever possible, we’ve posted all CD/DVD content. Note that while we provide as much of the media content as we are able via free download, we are sometimes limited by licensing restrictions. Please direct any questions or concerns to [email protected]. Preface The arrival of the iPhone changed everything. Or, at the very least, it changed the direction of software development for mobile platforms, which is a pretty big thing. It has spawned an entire generation of copycat devices and brought an entire multibillion-dollar industry to its knees. Despite this, it still fits in your pocket. Second Edition Despite the title change to Learning iOS Programming, the book you hold in your hands is the second edition of Learning iPhone Programming, although there have been sweeping changes along the way. While the iPhone is just four years old, to me that sometimes seems like a lifetime. The changes made in this second edition reflect the fact that a lot has happened since the first edition was published: the release of the iPad, a major release of Xcode, two revisions of the operating system itself, and the arrival of Apple’s iCloud. This book has therefore been refreshed, renewed, and updated to reflect these fairly fundamental changes to the platform, and all of the example code was rewritten from the ground up for Xcode 4 and iOS 5 using ARC. Who Should Read This Book? This book gives a rapid introduction to programming for the iPhone, iPod touch, and iPad for those with some programming experience. If you are developing on the Mac for the first time, drawn to the platform because of the iPhone, or alternatively are an experienced Mac programmer making the transition to the iOS, this book is for you. What Should You Already Know? The book assumes some knowledge of C, or at least passing knowledge of a C-derived language. Additionally, while I do give a crash course, some familiarity with object- oriented programming concepts would be helpful. What Will You Learn? This book will guide you through developing your first application for the iOS from opening Xcode for the first time to submitting your application to the App Store. You’ll learn about Objective-C and the core frameworks needed to develop for the iOS by writing applications that use them, giving you a basic framework for building your own applications independently. What’s in This Book? Here’s a short summary of the chapters in this book and what you’ll find inside: Chapter 1, Why Go Native? This chapter discusses the need for native applications and compares building native applications to building web applications. Chapter 2, Becoming a Developer This chapter walks you through the process of registering as an iOS developer and setting up your work environment, from installing Xcode and the iOS SDK to generating the developer certificates you’ll need to build your applications and deploy them onto your own iPhone, iPod touch, or iPad. Chapter 3, Your First iOS App This chapter allows you to get hands-on as quickly as possible and walks you through building your first Hello World application, including how to deploy and run the application on your iPhone, iPod touch, or iPad. Chapter 4, Coding in Objective-C This chapter provides a crash course in the basics of the Objective-C language, and if you’re familiar with another C-derived language (and perhaps with object-oriented programming), it should be enough to get you up and running with Objective-C and the Cocoa Touch frameworks. Chapter 5, Table View–Based Applications The UITableView and associated classes are perhaps the most commonly used classes when building user interfaces for iOS applications. Due to the nature of the applications, these classes can be used to solve a large cross section of problems, and as a result, they appear almost everywhere. In this chapter, we dive fairly deeply into the table view classes. Chapter 6, Other View Controllers After discussing the table view controller in detail, we discuss some of the other view controllers and classes that will become useful when building your applications: simple two-screen views, single-screen tabbed views, modal view controllers, and a view controller for selecting video and images. Chapter 7, Connecting to the Network This chapter discusses connecting to the Internet, browsing the Web, sending email, and retrieving information. Chapter 8, Handling Data This chapter discusses how to handle data input, both from the application user and programmatically, and how to parse XML and JSON documents. The chapter also covers storing data in flat files and storing data with the SQLite database engine. Chapter 9, Using Sensors This chapter discusses how to determine what hardware is available and illustrates how to deal with the major sensors on iOS devices: the accelerometer, magnetometer, camera, and GPS. Chapter 10, Geolocation and Mapping This chapter walks you through the process of building applications that make use of the Core Location and MapKit frameworks. Chapter 11, Introduction to iCloud This chapter provides a brief introduction to integrating Apple’s iCloud service into your own applications. iCloud is a service that helps you synchronize your data across devices, making documents and data available to all of your subscribed devices. Chapter 12, Integrating Your Application This chapter shows you some of the tricks to integrate your application with iOS’s software ecosystem, how to present user preferences with Settings Bundles, and how to use custom URL schemes to launch your application. It also discusses how to make use of the Media Player and Address Book. Chapter 13, Distributing Your Application This chapter talks about how to add some final polish to your application and walks you through the process of building your application for distribution, either via ad hoc distribution or for the App Store. Chapter 14, Going Further This chapter provides a collection of pointers to more advanced material on the topics we covered in the book, as well as material covering some of those topics that we didn’t manage to talk about in the book. Conventions Used in This Book The following typographical conventions are used in this book: Italic Indicates new terms, URLs, email addresses, filenames, and file extensions Constant width Used for program listings, as well as within paragraphs to refer to program elements such as variable or function names, databases, data types, environment variables, statements, and keywords Constant width bold Shows commands or other text that should be typed literally by the user Constant width italic Shows text that should be replaced with user-supplied values or by values determined by context NOTE This icon signifies a tip, suggestion, or general note. WARNING This icon signifies a warning or caution.