Beginning iOS 5 Application Development

  

  BEGINNING

  IOS 5 APPLICATION DEVELOPMENT

  

INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi

  CHAPTER 1 Getting Started with iOS 5 Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 CHAPTER 2 Writing Your First Hello World! Application . . . . . . . . . . . . . . . . . . . . . . . . .17 CHAPTER 3 Understanding Views, Outlets, and Actions . . . . . . . . . . . . . . . . . . . . . . . 35 CHAPTER 4 Exploring the Diff erent View Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . 67 CHAPTER 5 Enabling Multi-Platform Support for the iPhone and iPad . . . . . . . . . . 109 CHAPTER 6 Handling Keyboard Inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 CHAPTER 7 Supporting Screen Rotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 CHAPTER 8 Displaying and Persisting Data Using the Table View . . . . . . . . . . . . . 163 CHAPTER 9 Using Application Preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 CHAPTER 10 File Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 CHAPTER 11 Database Storage Using SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 CHAPTER 12 Programming iCloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 CHAPTER 13 Performing Simple Animations and Video Playback . . . . . . . . . . . . . . . 295 CHAPTER 14 Accessing Built-In Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317 CHAPTER 15 Accessing the Sensors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 CHAPTER 16 Using Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 CHAPTER 17 Bluetooth Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 CHAPTER 18 Bonjour Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 CHAPTER 19 Programming Remote Notifi cations Using Apple Push Notifi cation Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 CHAPTER 20 Displaying Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 CHAPTER 21 Programming Background Applications . . . . . . . . . . . . . . . . . . . . . . . . . 487 APPENDIX A Testing on an Actual Device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 APPENDIX B Getting Around in Xcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533 APPENDIX C Crash Course in Objective-C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 APPENDIX D Answers to Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587

INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601

  

BEGINNING

iOS 5 Application Development

  

BEGINNING

iOS 5 Application Development

  

Wei-Meng Lee

John Wiley & Sons, Inc.

  Beginning iOS 5 Application Development Published by John Wiley & Sons, Inc. 10475 Crosspoint Boulevard Indianapolis, IN 46256 Copyright © 2012 by John Wiley & Sons, Inc., Indianapolis, Indiana Published simultaneously in Canada

ISBN: 978-1-118-14425-1

  ISBN: 978-1-118-22571-4 (ebk)

  ISBN: 978-1-118-23584-3 (ebk)

  ISBN: 978-1-118-26369-3 (ebk) Manufactured in the United States of America 10 9 8 7 6 5 4 3 2 1

No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means,

electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108

of the 1976 United States Copyright Act, without either the prior written permission of the Publisher, or authorization

through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to the Publisher for permission should be addressed to the Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011, fax (201) 748-6008, or onlin

  Limit of Liability/Disclaimer of Warranty: The publisher and the author make no representations or warranties with respect to the accuracy or completeness of the contents of this work and specifically disclaim all warranties, including without limitation warranties of fitness for a particular purpose. No warranty may be created or extended by sales or promotional materials. The advice and strategies contained herein may not be suitable for every situation. This work is sold with the understanding that the publisher is not engaged in rendering legal, accounting, or other professional

services. If professional assistance is required, the services of a competent professional person should be sought. Neither

the publisher nor the author shall be liable for damages arising herefrom. The fact that an organization or Web site is referred to in this work as a citation and/or a potential source of further information does not mean that the author or the publisher endorses the information the organization or Web site may provide or recommendations it may make.

  Further, readers should be aware that Internet Web sites listed in this work may have changed or disappeared between when this work was written and when it is read. For general information on our other products and services please contact our Customer Care Department within the United States at (877) 762-2974, outside the United States at (317) 572-3993 or fax (317) 572-4002.

Wiley also publishes its books in a variety of electronic formats and by print-on-demand. Not all content that is available

in standard print versions of this book may appear or be packaged in all book formats. If you have purchased a version

of this book that did not include media that is referenced by or accompanies a standard print version, you may request

this media by visiting .

  Library of Congress Control Number: 2011944672 Trademarks: Wiley, the Wiley logo, Wrox, the Wrox logo, Wrox Programmer to Programmer, and related trade dress

are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the United States and other

countries, and may not be used without written permission. All other trademarks are the property of their respective owners. John Wiley & Sons, Inc., is not associated with any product or vendor mentioned in this book.

  Dedicated to Steve Jobs, whose vision changed the

way we use computers and inspires many to follow his

footsteps. Thank you for the inspiration!

ABOUT THE AUTHOR WEI-MENG LEE

  is a technologist and founder of Developer Learning Solutions ( www

  .learn2develop.net ), a technology company specializing in hands-on training on

  the latest mobile technologies. Wei-Meng has many years of training experience and his training courses place special emphasis on the learning-by-doing approach. His hands-on approach to learning programming makes understanding the subject much easier than reading books, tutorials, and documentation. His name regularly appears in online and print publications such as DevX.com, MobiForge.com, and CoDe Magazine. Wei-Meng Lee is frequently invited to speak at technological conferences, and recently participated in Mobile Connections in the United States and DevTeach/DevMobile in Montreal, Canada. Contact Wei-Meng at weimenglee@learn2develop.net .

ABOUT THE TECHNICAL EDITOR TRENT SHUMAY

  is the founder and Chief Architect at Finger Food Studios, Inc., in the Vancouver, BC, area. After graduating from the UBC Computer Science program, Trent spent 13 years in the gaming and interactive entertainment space, where handheld gaming devices ignited his passion for mobile development. Today, Finger Food Studios focuses on developing media-rich, interactive mobile and web applications. You can reach Trent directly at trent@fingerfoodstudios.com .

  CREDITS

EXECUTIVE EDITOR PRODUCTION MANAGER

  Robert Elliott Tim Tate

  SENIOR PROJECT EDITOR

  VICE PRESIDENT AND EXECUTIVE GROUP PUBLISHER

  Ami Frank Sullivan Richard Swadley

  TECHNICAL EDITOR

  VICE PRESIDENT AND EXECUTIVE

  Trenton Shumay

  PUBLISHER PRODUCTION EDITOR

  Neil Edde Kathleen Wisor

  ASSOCIATE PUBLISHER COPY EDITOR

  Jim Minatel Luann Rouff

  PROJECT COORDINATOR, COVER EDITORIAL MANAGER

  Katie Crocker Mary Beth Wakefi eld

  PROOFREADER FREELANCER EDITORIAL MANAGER

  Nancy Carrasco Rosemarie Graham

  INDEXER ASSOCIATE DIRECTOR OF MARKETING

  Robert Swanson David Mayhew

  COVER DESIGNER MARKETING MANAGER

  Ryan Sneed Ashley Zurcher

  BUSINESS MANAGER COVER IMAGE

  Amy Knies © -M-I-S-H-A- /iStockPhoto

  ACKNOWLEDGMENTS OVER THE PAST YEAR OR SO, the development landscape of Apple’s iOS has changed greatly.

  The successful iOS is now in its fifth iteration, and the Xcode IDE has transitioned to a much easier-to-use version 4, with a tight integration of Interface Builder. I have received a lot of feedback from readers of the previous edition of this book, many of whom appreciate the hands-on approach that it takes. I also have received feedback from readers who are stumped by the changes that have occurred between Xcode versions 3 and 4; but such confusion epitomizes the rapid pace of change that all developers experience.

  This new edition of the book was revised to cover both new technologies and the various feedback I have received. I had a thorough relook at the exercises readers were having issues with, to ensure that they can be easily followed and achieve the effect I intended. I also took this opportunity to revise all the examples using Xcode 4, which is the IDE included with iOS 5. Of course, this book covers new iOS 5 features — notably, the new iCloud feature that ships with iOS 5. I have also added some topics that would interest most iOS developers, such as how to import and export documents from within your application, programming the various sensors in iOS, and using JSON web services.

  Writing a book is always exciting, but along with the excitement are long hours of hard work, straining to get things done accurately and on time. I would like to take this opportunity to thank a number of people who helped to make this book possible. First, I want to thank my Executive Editor Robert Elliott, who started off as a stranger, but is now my good friend. Robert is not the usual AE, disappearing after the contract is signed. He has been involved throughout the entire writing process and is always ready to help. I can’t say enough good things about Robert, so I will just say thank you, Robert! Next, a huge thanks to Ami Sullivan, my project editor, who is always a pleasure to work with. Ami is the force behind the scenes, who makes the book appear on time on shelves in the bookstores! Thanks, Ami! I also thank copy editor Luann Rouff and technical editor Trenton Shumay. They have been eagle- eye editing the book, ensuring that every sentence makes sense — both grammatically as well as technically. Thanks, Luann and Trent! Last, but not least, I want to thank my parents, and my wife, Sze Wa, for all the support they have given me. They have selflessly adjusted their schedules to accommodate my busy schedule when I was working on this book. My wife, as always, has stayed up with me on numerous nights as I furiously worked to meet a deadline, and for this I would like to say to her and my parents: “I love you all!” Finally, to our lovely dog, Ookii, thanks for staying by our side. Now that the book is done, sorry . . . daddy needs to write another book. . .

  CONTENTS

CHAPTER 2: WRITING YOUR FIRST HELLO WORLD! APPLICATION

  24 Customizing Your Application Icon

  61 Summary 62

  57 Understanding View Hierarchy

  55 Adding Views Dynamically Using Code

  46 Using the Web View

  45 Page Control and Image View

  41 Using the Action Sheet

  40 Using the Alert View

  36 Using Views

  35 Outlets and Actions

  28 Summary 33

  26 Displaying Launch Images

  20 Writing Some Code

  

INTRODUCTION xxi

  17 Using Interface Builder

  17 Getting Started with Xcode

  14 Summary 15

  14 Screen Resolutions

  13 Testing on Real Devices

  13 Versions of iOS

  11 Some Useful Information before You Get Started

  9 Instruments 10 Architecture of the iOS

  4 Interface Builder

  3 Xcode 3 iOS Simulator

  2 Components of Xcode

  1 Obtaining the Tools and SDK

  CHAPTER 1: GETTING STARTED WITH IOS 5 PROGRAMMING

CHAPTER 3: UNDERSTANDING VIEWS, OUTLETS, AND ACTIONS

  CONTENTS xvi

CHAPTER 4: EXPLORING THE DIFFERENT VIEW CONTROLLERS

  68 Application Delegate

  Dismissing the Keyboard 127 Automatically Displaying the Keyboard When the View Window Is Loaded

  159 Fixing the View Window to a Specifi c Orientation 159 Summary 160

  Programmatically Rotating the Screen 159 Rotating during Runtime

  CHAPTER 7: SUPPORTING SCREEN ROTATIONS 149 Responding to Device Rotations 149 Rotating to a Diff erent Screen Orientation 152 Handling Rotations 153

  Summary 145

  Using the Scroll View 134 Scrolling Views When the Keyboard Appears 138

  133 Detecting the Presence of the Keyboard 133

  CHAPTER 5: ENABLING MULTI-PLATFORM SUPPORT FOR THE IPHONE AND IPAD 109 Technique 1 — Modifying the Device Target Setting 109 Detecting the Platform Programmatically 114 Technique 2 — Creating Universal Applications 116 Choosing a Porting Technique 120 Summary 120 CHAPTER 6: HANDLING KEYBOARD INPUTS 123 Using the Keyboard 124 Customizing the Type of Inputs 125

  71 Controlling Your UI Using View Controllers

  67 The Single View Application Template

  89 Displaying Some Items in the Master-Detail Application

  87 The Master-Detail Application Template

  81 Animating the Switching of Views

  77 Adding a View Controller and Views Programmatically

  74 The Empty Application Template

  98 The Tabbed Application Template 103 Summary 107

  CONTENTS

  CHAPTER 8: CREATING AND PERSISTING DATA USING THE TABLE VIEW 163 Creating a Simple Table View 164

  Adding a Header and Footer 169 Adding an Image 169 Displaying the Item Selected

  171 Indenting 173 Modifying the Height of Each Row 173

  Using the Table View in a Master-Detail Application 173 Displaying Sections 174

  Adding Indexing 183 Adding Search Capability 183 Disclosures and Checkmarks 194 Navigating to Another View 195

  Summary 199

CHAPTER 9: USING APPLICATION PREFERENCES 201 Creating Application Preferences 202 Programmatically Accessing the Settings Values 209 Loading the Settings Values

  214 Resetting the Preferences Settings Values 216 Saving the Settings Values

  217 Summary 218

CHAPTER 10: FILE HANDLING

  221 Understanding the Application Folders 222 Using the Documents and Library Folders 223 Storing Files in the Temporary Folder 227 Which Folder Should You Use: Documents or tmp? 228

  Using Property Lists 228 Copying Bundled Resources 235 Importing and Exporting Files 237

  Exporting Documents 239 File Sharing 242 Importing Documents 245 Importing Self-Defi ned Documents 248

  Summary 251 xvii

  CONTENTS xviii

  CHAPTER 11: DATABASE STORAGE USING SQLITE 253 Linking to the SQLite3 Library 254 Creating and Opening a Database 256 Examining the Database Created 258 Creating a Table 258 Inserting Records

  259 Bind Variables 260 Retrieving Records

  263 Bundling SQLite Databases with Your Application 265 Summary 266

  CHAPTER 12: PROGRAMMING ICLOUD 269 Storing and Using Documents in iCloud 270 Enabling iCloud Storage for Your Application 270 Setting Project Entitlements 273 Managing iCloud Documents Using the UIDocument Class 276

  Storing Documents on iCloud 278 Storing Key-Value Data in iCloud 289 Summary 292

  CHAPTER 13: PERFORMING SIMPLE ANIMATIONS AND VIDEO PLAYBACK 295 Using the NSTimer Class 295

  Animating the Visual Change 302 Transforming Views

  302 Translation 303 Rotation 305 Scaling 307

  Animating a Series of Images 307 Playing Video on the iPhone 310 Summary 314

  CHAPTER 14: ACCESSING BUILT-IN APPLICATIONS 317 Sending E-Mail 317

  Invoking Safari 324 Invoking the Phone 324 Invoking SMS 324

  CONTENTS Accessing the Camera and the Photo Library 327 Accessing the Photo Library

  327 Accessing the Camera 332

  Summary 335

  CHAPTER 15: ACCESSING THE SENSORS 339 Using the Gyroscope and Accelerometer 339 Visualizing the Sensor Data 345 Using the Shake API to Detect Shakes 350 Summary 356

  CHAPTER 16: USING WEB SERVICES 359 Basics of Consuming XML Web Services 360 Using SOAP 1.1 361 Using SOAP 1.2

  363 Using HTTP POST 364

  Consuming a Web Service in Your iOS Application Using SOAP 365 Parsing the XML Response 373 Consuming JSON Web Services 377 Integrating Twitter into Your Application 383 Summary 389

  CHAPTER 17: BLUETOOTH PROGRAMMING 393 Using the Game Kit Framework 393 Searching for Peer Devices 394 Sending and Receiving Data

  401 Implementing Voice Chatting 404 Summary 412

  CHAPTER 18: BONJOUR PROGRAMMING 415 Creating the Application 415 Publishing a Service

  417 Browsing for Services 420 Summary 425

  CHAPTER 19: PROGRAMMING REMOTE NOTIFICATIONS USING APPLE PUSH NOTIFICATION SERVICES 427 Using Apple Push Notifi cation Service 428 Generating a Certifi cate Request 428 Generating a Development Certifi cate 429 xix

  CONTENTS Creating an Application ID

  431 Confi guring an App ID for Push Notifi cations 433 Creating a Provisioning Profi le 435 Provisioning a Device

  437 Creating the iOS Application 438 Creating the Push Notifi cation Provider 443 Summary 447

  CHAPTER 20: DISPLAYING MAPS 449 Displaying Maps and Monitoring Changes Using the Map Kit 449 Getting Location Data 455

  Specifying the Hardware Requirement for Location Tracking 460 Displaying Location Using a Map 460 Getting Directional Information 464 Rotating the Map

  468 Displaying Annotations 474 Reverse Geocoding 478 Displaying a Disclosure Button 482

  Summary 484

  CHAPTER 21: PROGRAMMING BACKGROUND APPLICATIONS 487 Understanding Background Execution on the iOS 488 Examining the Diff erent Application States 488 Opting Out of Background Mode 491 Detecting Multitasking Support 492 Tracking Locations in the Background 492 Making Your Location Apps More Energy Effi cient 496 Local Notifi cation 498 Notifying Other Objects Using the NSNotifi cation Class 505 Summary 509 APPENDIX A: TESTING ON AN ACTUAL DEVICE 511 APPENDIX B: GETTING AROUND IN XCODE 533 APPENDIX C: CRASH COURSE IN OBJECTIVE-C 559 APPENDIX D: ANSWERS TO EXERCISES 587

  INDEX 601 xx

INTRODUCTION APPLE FIRST OFFICIALLY ANNOUNCED

  the iOS 5 at the Worldwide Developers Conference (WWDC) in June 2011. After 7 betas and with much anticipation, Apple finally rolled out iOS 5 with the vastly improved iPhone 4S. With 200 new features added to the iOS, Apple is set to reign as the king of the mobile platform for the foreseeable future. This means developers also have vast potential for their applications — if you know how to program for the iOS platform. This book will show you how.

  When I first started learning about iPhone and iPad development, I went through the same journey that most developers go through: Write a Hello World application, play around with Xcode and Interface Builder, try to understand what the code is doing, and repeat that process. I was also overwhelmed by the concept of a View Controller, and wondered why it was needed if I simply wanted to display a view. My background in developing for Windows Mobile and Android did not help much, and I had to start working with this concept from scratch.

  This book was written to help jump-start beginning iPhone and iPad developers. It covers the various topics in a linear manner that enables you to progressively learn without being overwhelmed by the details. I adopt the philosophy that the best way to learn is by doing — hence, the numerous hands-on “Try It Out” sections in each chapter, which first demonstrate how to build something and then explain “How It Works.” Although iPhone and iPad programming is a huge topic, my aim in this book is to get you started with the fundamentals, help you understand the underlying architecture of the SDK, and appreciate why things are done in a certain way. It is beyond the scope of any one book to cover everything under the sun related to iPhone and iPad programming, but I am confident that after reading this book (and doing the exercises), you will be well equipped to tackle your next iPhone or iPad programming challenge.

WHO THIS BOOK IS FOR

  This book is for the beginning iPhone and iPad developer who wants to start developing applications using the Apple iOS SDK. To truly benefit from this book, you should have some background in programming and at least be familiar with object-oriented programming concepts. If you are totally new to the Objective-C language, you might want to jump straight to Appendix

  C, which provides an overview of the language. Alternatively, you can use Appendix C as a quick reference while you tackle the various chapters, checking out the syntax as you try the exercises. Depending on your learning style, one of these approaches should work best for you. While most of the chapters are geared toward developing for the iPhone, the concepts apply to iPad development as well. In cases where specific features are available only on the iPad, they are pointed out.

  INTRODUCTION

  NOTE All the examples discussed in this book were written and tested using the iOS SDK 5.0. While every eff ort has been made to ensure that the screen shots are as current as possible, the actual screen that you see may diff er when the iOS SDK is revised.

WHAT THIS BOOK COVERS

  This book covers the fundamentals of iPhone and iPad programming using the iOS SDK. It is divided into 21 chapters and four appendices.

  Chapter 1: Getting Started with iOS 5 Programming covers the various tools found in the iOS SDK and explains their uses in iPhone and iPad development.

Chapter 2: Write Your First Hello World! Application gets you started with Xcode and Interface

Builder to build a Hello World application. The focus is on giving you some hands-on practice

  getting a project up and running quickly. More details on the various project components are covered in subsequent chapters.

  Chapter 3: Understanding Views, Outlets, and Actions covers the fundamental concepts of iPhone

  and iPad programming: outlets and actions. You learn how outlets and actions allow your code to interact with the visual elements in Interface Builder and why they are an integral part of every iPhone and iPad application. You will also learn about the various UI widgets known as views that make up the user interface of your application.

  Chapter 4: Exploring the Different View Controllers discusses the various View Controllers

  available in the iOS SDK. You will learn how to develop different types of applications — Single View, Master-Detail, as well as Tabbed applications.

  Chapter 5: Enabling Multi-Platform Support for the iPhone and iPad shows how you can port your

  iPhone applications to the iPad platform. You will also learn how to create universal applications that will run on both the iPhone and the iPad.

  

Chapter 6: Handling Keyboard Inputs shows you how to deal with the virtual keyboard in your

  iPhone or iPad. You learn how to hide the keyboard on demand and how to ensure that your views are not blocked by the keyboard when it is displayed.

  

Chapter 7: Supporting Screen Rotations demonstrates how you can reorient your application’s UI

  when the device is rotated. You learn about the various events that are fired when the device is rotated, and how to force your application to be displayed in a certain orientation.

  Chapter 8: Displaying and Persisting Data Using the Table View explores one of the most

  powerful views in the iOS SDK — the Table View. The Table View is commonly used to display rows of data. In this chapter, you also learn how to implement search capabilities in your Table View.

  xxii

  INTRODUCTION

  

Chapter 9: Using Application Preferences discusses the use of application settings to persist application

  preferences. Using application settings, you can access preferences related to your application through the Settings application available on the iPhone and iPad.

  Chapter 10: File Handling shows how you can persist your application data by saving the data

  to files in your application’s sandbox directory. You also learn how to access the various folders available in your application sandbox.

  Chapter 11: Database Storage Using SQLite covers the use of the embedded SQLite3 database library to store your data. Chapter 12: Programming iCloud discusses and demonstrates how to store your documents and application-specific data on Apple’s new iCloud feature.

Chapter 13: Performing Simple Animations and Video Playback provides an overview of the various

  techniques you can use to implement basic animations on the iPhone and iPad. You also learn about the various affine transformations supported by the iOS SDK. In addition, you learn how to play back video on the iPhone and iPad.

  Chapter 14: Accessing Built-In Applications describes the various ways you can access the iPhone

  and iPad’s built-in applications, such as the Photo Library, Contacts, and others. You also learn how you can invoke built-in applications such as Mail and Safari from within your applications.

  Chapter 15: Accessing the Sensors shows how you can access the accelerometer and gyroscope

  sensors that are included with every iPhone and iPad. You will also learn how to detect shakes to your device.

  

Chapter 16: Using Web Services teaches you how to consume web services from within your iPhone

  and iPad application. You will learn the various ways to communicate with four web services — JSON, SOAP, HTTP GET, and HTTP POST. You will also learn how to parse the XML result returned by the web service.

  Chapter 17: Bluetooth Programming explores the use of the Game Kit framework for Bluetooth

  programming. You will learn how to enable two devices to communicate using a Bluetooth connection, and how to implement voice chatting over a Bluetooth connection.

  Chapter 18: Bonjour Programming shows how you can publish and find services on the network using the Bonjour protocol. Chapter 19: Programming Remote Notifications Using Apple Push Notification Services

  explains how you can implement applications that use push notifications. The APNs enables your applications to continuously receive status updates from a service provider even though the application may not be running.

  

Chapter 20: Displaying Maps demonstrates how to build a location-based services application using

  the Map Kit framework. You will also learn how to obtain geographical location data and use it to display a map.

  Chapter 21: Programming Background Applications shows how to build applications that can

  continue to run in the background when the user switches to another application. You will also

  xxiii

  INTRODUCTION

  learn how to use the local notifications feature to schedule notifications that will fire at specific time intervals.

  Appendix A: Testing on an Actual Device outlines the steps you need to take to test your application on a real device. Appendix B: Getting Around in Xcode provides a quick run-through of the many features in Xcode and Interface Builder.

Appendix C: Crash Course in Objective-C offers a brief tutorial in Objective-C. Readers who are

new to this language should read this material before getting started.

Appendix D: Answers to Exercises contains the solutions to the end-of-chapter exercises found in

every chapter except Chapter 1.

HOW THIS BOOK IS STRUCTURED

  This book breaks down the task of learning iPhone and iPad programming into several smaller chunks, enabling you to digest each foundational topic before delving into a more advanced topic. In addition, some chapters cover topics already discussed in a previous chapter. That’s because there is usually more than one way of doing things in Xcode and Interface Builder, so this approach enables you to learn the different techniques available for developing iPhone and iPad applications. If you are a total beginner to iOS programming, start with Chapters 1 and 2. After you are comfortable with the basics, head to the appendices to read more about the tools and language you are using. Once you are ready, you can continue with Chapter 3 and gradually move into more advanced topics.

  A useful feature of this book is that all the code samples in each chapter are independent of those discussed in previous chapters. That gives you the flexibility to dive right into the topics that interest you and start working on the Try It Out projects.

WHAT YOU NEED TO USE THIS BOOK

  Most of the examples in this book run on the iPhone Simulator (which is included with the iOS SDK). For exercises that access the hardware (such as the accelerometer and gyroscope), you need a real iPhone or iPad. In general, to get the most out of this book, having a real iPhone or iPad device is not necessary (although it is definitely required for testing if you plan to deploy your application on the App Store).

  CONVENTIONS

  To help you get the most from the text and keep track of what’s happening, we’ve used a number of conventions throughout the book.

  xxiv

  INTRODUCTION xxv TRY IT OUT These Are Exercises or Examples for You to Follow

  The Try It Out sections, which appear once or more per chapter, provide hands-on exercises that demonstrate the concept under discussion as you follow the text.

  1. They consist of numbered steps.

  2. Follow the steps with your copy of the project files.

  How It Works After each Try It Out section, these sections explain the code you’ve typed in detail.

  As for other conventions in the text: ➤ New terms and important words are highlighted in italics when first introduced.

  ➤ Keyboard combinations are treated like this: Control-R. ➤ Filenames, URLs, and code within the text are treated like so: persistence.properties . ➤ Code is presented in two different ways: We use a monofont type with no highlighting for most code examples.

  We use bold to emphasize code that is of particular importance in the present context.

  WARNING Boxes like this one hold important, not-to-be forgotten information that is directly relevant to the surrounding text.

  NOTE Notes, tips, hints, tricks, and asides to the current discussion look like this.

SOURCE CODE AND ANSWERS APPENDIX

  As you work through the examples in this book, you may choose either to type in all the code manually or to use the source code files that accompany the book. All the source code used in this book is available for download athen at the site, simply locate the book’s title (use the Search box or one of the title lists) and click the Download Code link on the book’s detail

  INTRODUCTION

  page to obtain all the source code for the book. Code that is included on the website is highlighted by the following icon and/or CodeNote, as shown following the icon: Listings include the filename in the title. If it is just a code snippet, you’ll find the filename in a CodeNote such as this:

  

Code zip filename available for download at wrox.com

  After you download the code, just decompress it with your favorite compression tool. Alternatively, go to the main Wrox code download page at www.wrox.com/dynamic/books/download.aspx to see the code available for this book and all other Wrox books. Please note that Appendix D, “Answers to the Exercises,” is available as a PDF for download.

  NOTE Because many books have similar titles, you may fi nd it easiest to search by ISBN; this book’s ISBN is 978-1-118-14425-1.

  ERRATA

  We make every effort to ensure that there are no errors in the text or the code. However, no one is perfect and mistakes do occur. If you find an error in one of our books, such as a spelling mistake or a faulty piece of code, we would be very grateful for your feedback. By sending in errata, you may save another reader hours of frustration and at the same time help us provide even higher-quality information. To find the errata page for this booknd locate the title using the Search box or one of the title lists. Then, on the book details page, click the Book Errata link. On this page, you can view all errata that has been submitted for this book and posted by Wrox editors. A complete book list, including links to each book’s errata, is also available at www.wrox.com/ misc-pages/booklist.shtml.

  If you don’t spot “your” error on the Book Errata page, go to www.wrox.com/contact/ techsupport.shtml and complete the form there to send us the error you have found. We’ll check the information and, if appropriate, post a message to the book’s errata page and fix the problem in subsequent editions of the book.

  xxvi

INTRODUCTION P2P.WROX.COM

  For author and peer discussion, join the P2P forums at p2p.wrox.com. The forums are a web-based system for you to post messages relating to Wrox books and related technologies and interact with other readers and technology users. The forums offer a subscription feature to email you topics of interest of your choosing when new posts are made to the forums. Wrox authors, editors, other industry experts, and your fellow readers are present on these forums. At p2p.wrox.com, you will find a number of different forums that will help you not only as you read this book, but also as you develop your own applications. To join the forums, just follow these steps:

  1. Go to p2p.wrox.com and click the Register link.

  2. Read the terms of use and click Agree.

  3. Complete the required information to join as well as any optional information you want to provide and click Submit.

  

4. You will receive an email with information describing how to verify your account and

complete the joining process.

  After you join, you can post new messages and respond to messages that other users post. You can read messages at any time on the web. If you want to have new messages from a particular forum emailed to you, click the Subscribe to This Forum icon by the forum name in the forum listing. For more information about how to use the Wrox P2P, be sure to read the P2P FAQs for answers to questions about how the forum software works as well as for many common questions specific to P2P and Wrox books. To read the FAQs, click the FAQ link on any P2P page.

  xxvii

1 Getting Started with iOS 5 Programming WHAT YOU WILL LEARN IN THIS CHAPTER

  How to obtain the iOS SDK - Software Development Kit

  ➤

  Components included in the iOS SDK

  ➤

  Features of the development tools — Xcode, Interface Builder, and

  ➤

  iOS Simulator Capabilities of the iOS Simulator

  ➤

  Architecture of iOS

  ➤

  Characteristics of the iPhone and iPad

  ➤

  Welcome to the world of iOS programming! That you are now holding this book shows that you are fascinated with the idea of developing your own iPhone and iPad applications and want to join the ranks of the tens of thousands of developers whose applications are already deployed in the App Store.

  As the Chinese adage says, “To accomplish your mission, fi rst sharpen your tools.” Successful programming requires that you fi rst know your tools well. Indeed, this couldn’t be truer for iOS programming — you need to be familiar with quite a few tools before you can even get started. Hence, this chapter describes the various relevant tools and information you need to jump on the iOS development bandwagon. Without further ado, it’s time to get down to work.

  GETTING STARTED WITH IOS 5 PROGRAMMING

2 CHAPTER 1

  ❘

OBTAINING THE TOOLS AND SDK

  To develop for iOS, you need to download the iOS SDK. The iOS SDK comes with free Xcode from the Mac App Store (see Figure 1-1).

  FIGURE 1-1

  Before you download and install Xcode, make sure you satisfy the following system requirements:

  ➤ Only Intel Macs are supported, so if you have another processor type (such as the older G4 or G5 Macs), you’re out of luck. ➤ Your system is updated with the latest Mac OS X Lion release.

  An actual iPhone/iPod touch/iPad is highly recommended, although not strictly necessary. To test your application, you can use the included iOS Simulator (which enables you to simulate an iPhone or an iPad). However, to test certain hardware features like the accelerometer and gyroscope, you need to use a real device.

  When Xcode is downloaded, proceed with installing it. Accept a few licensing agreements and then select the destination folder in which to install the SDK. If you select the default settings during the installation phase, the various tools will be installed in the /Developer/Applications folder (see Figure 1-2).

  FIGURE 1-2

  3 Components of Xcode

COMPONENTS OF XCODE

  The Xcode package includes a suite of development tools to help you create applications for your iPhone, iPod touch, and iPad. It includes the following:

  Xcode IDE — Integrated development environment (IDE) that enables you to manage, edit, ➤

  and debug your projects

  

Dashcode — Integrated development environment (IDE) that enables you to develop

  web-based iPhone and iPad applications and Dashboard widgets. Dashcode is beyond the scope of this book.

  iOS Simulator — Provides a software simulator to simulate an iPhone or an iPad on your ➤

  Mac

  Interface Builder — Visual editor for designing user interfaces for your iPhone and iPad ➤

  applications

  Instruments — Analysis tool to help you both optimize your application and monitor for ➤

  memory leaks in real time The following sections discuss each tool (except Dashcode) in more detail.

  Xcode

  To launch Xcode, double-click the Xcode icon located in the /Developer/Applications folder (refer to Figure 1-2). Alternatively, go the quicker route and use Spotlight: Simply type Xcode into the search box and Xcode should be in the Top Hit position.

  Figure 1-3 shows the Xcode Welcome screen.

  FIGURE 1-3

  GETTING STARTED WITH IOS 5 PROGRAMMING

4 CHAPTER 1

  ❘

  Using Xcode, you can develop different types of iPhone, iPad, and Mac OS X applications using the various project templates shown in Figure 1-4.

  FIGURE 1-4

  For iOS applications, each template gives you the option to select the platform you are targeting — iPhone, iPad, or Universal (runs on both iPhone and iPad). The IDE in Xcode provides many tools and features that make your development life much easier. One such feature is Code Sense, which displays a popup list showing the available classes and members, such as methods, properties, and so on.

  NOTE For a more comprehensive description of some of the most commonly used features in Xcode, refer to Appendix B.

  iOS Simulator

  The iOS Simulator, shown in Figure 1-5, is a very useful tool that you can use to test your application without using your actual iPhone/iPod touch/iPad. The iOS Simulator is located in the /Developer/Platforms/iPhoneSimulator.platform/Developer/Applications folder. Most of the time, you don’t need to launch the iOS Simulator directly — running (or debugging) your application in Xcode automatically brings up the iOS Simulator. Xcode installs the application on the iOS Simulator automatically.

  5 Components of Xcode

  FIGURE 1-5 THE IOS SIMULATOR IS NOT AN EMULATOR

  To understand the difference between a simulator and an emulator, keep in mind that a simulator tries to mimic the behavior of a real device. In the case of the iOS Simulator, it simulates the real behavior of an actual iPhone/iPad device. However, the Simulator itself uses the various libraries installed on the Mac (such as QuickTime) to perform its rendering so that the effect looks the same as an actual iPhone. In addition, applications tested on the Simulator are compiled into x86 code, which is the byte-code understood by the Simulator. A real iPhone device, conversely, uses ARM-based code.

  In contrast, an emulator emulates the working of a real device. Applications tested on an emulator are compiled into the actual byte-code used by the real device. The emulator executes the application by translating the byte-code into a form that can be executed by the host computer running the emulator.

  To understand the subtle difference between simulation and emulation, imagine you are trying to convince a child that playing with knives is dangerous. To simulate this, you pretend to cut yourself with a knife and groan in pain. To emulate this, you actually cut yourself.

  The iOS Simulator can simulate different versions of the iOS (see Figure 1-6. To support older versions of the SDK, you need to install the previous versions of the SDKs). This capability is useful if you need to support older versions of the platform, as well as test and debug errors reported in the application on specifi c versions of the OS.

  GETTING STARTED WITH IOS 5 PROGRAMMING

6 CHAPTER 1

  ❘ FIGURE 1-6

  In addition, the iOS Simulator can simulate different devices — iPad (see Figure 1-7), iPhone (3G and 3GS), and iPhone 4 with Retina display (see Figure 1-8).

  FIGURE 1-7 FIGURE 1-8 Features of the iOS Simulator

  The iOS Simulator simulates various features of a real iPhone, iPod touch, or iPad device. Features you can test on the iOS Simulator include the following:

  ➤ Screen rotation — left, right, top, and upside down

  Components of Xcode

  7 ➤ Support for gestures: ➤ Tap