No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical, photocopying, or otherwise, without prior written permission of the publisher. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in the book, and Manning Publications was aware of a trademark claim, the designations have been printed in initial caps or all caps. User Friendly artwork, characters, and cartoon strips are used in this book by permission from UserFriendly.org. All rights reserved. Recognizing the importance of preserving what has been written, it is Manning’s policy to have the books we publish printed on acid-free paper, and we exert our best efforts to that end. Recognizing also our responsibility to conserve the resources of our planet, Manning books are printed on paper that is at least 15 percent recycled and processed without elemental chlorine.
Manning Publications Co. 20 Baldwin Road PO Box 261 Shelter Island, NY 11964
Development editors: Technical proofreader: Copyeditor: Typesetter: Cover designer:
ISBN: 9781935182986 Printed in the United States of America 1 2 3 4 5 6 7 8 9 10 – MAL – 18 17 16 15 14 13
Scott Stirling, Susanna Kline James Hatheway Tiffany Taylor Marija Tudor Leslie Haimes
To my mother, Josephine, who taught me what was truly important —L.F.
To my love Elanit, and to Amalya, who wants me to create a game about pirates —E.M.
Brief contents PART 1 HELLO! IPHONE 1 1 Hello! iPhone
2 Thinking like an iPhone developer 3 Coding in Objective-C
PART 2 IPHONE APPLICATIONS: STEP BY STEP 59 4 Writing an app with multiple views 5 Polishing your app
6 Working with databases and table views 7 Creating a photo-based application
8 Moving, rotating, editing, and animating images 9 Working with location and maps 10 Accessing the internet
PART 3 GOING FROM XCODE TO THE APP STORE 265 11 Debugging and optimizing your application 12 Building for the device and the App Store Appendix Online resources for iOS app developers vii
Contents preface xv acknowledgments xvi about this book xviii about Hello! books xxii
PART 1 HELLO! IPHONE 1 1 Hello! iPhone
Turning your Mac into an iPhone app factory 5 Installing the iPhone SDK 7 ❍ Running Xcode for the first time 9 ❍ Using application templates 9 ❍ Learning Xcode’s user interface 12 ❍ Looking at Xcode’s menus 13 ❍ Running Xcode’s iPhone simulator 15
Introducing Interface Builder 16 Making Hello, World! 18 Editing, building, and running 20
2 Thinking like an iPhone developer
Using model-view-controller to dissect apps 22 Thinking about apps as models, views, and controllers Test yourself on models, views, and controllers 27
Designing apps with objects 29 Establishing class relationships headers and modules 34
Organizing classes in
Avoiding crashes by understanding object lifetime 35 ix
Applying object-oriented design 38 Preparing to code object-oriented designs 40
3 Coding in Objective-C
Creating classes to match your designs 42 Declaring a message 44 ❍ Declaring a view-controller message for your views to send 48 ❍ Using properties to save data in objects 49
Connecting code to views in Interface Builder 51 Using the Connections Inspector in Interface Builder 52 Creating outlets and actions using the assistant 54
Defining the action message 56
PART 2 IPHONE APPLICATIONS: STEP BY STEP 59 4 Writing an app with multiple views
Designing a flashcard application 62 Creating classes to match your designs 67 Declaring a view-controller message for your views to send Creating your other views and controllers 71
Creating the model classes 74 Implementing FCAnswerKey 78
The FCGame class 81
Connecting code to Interface Builder 83 Connecting the FCCardViewController view 85 the FCResultViewController view 87
Orchestrating your app with controllers 88 Handling card events in the FCCardViewController 90 Showing the result in the FCResultViewController 93
Reflecting on your progress 96
5 Polishing your app
Setting up your application’s images 99 Replacing the default application icon 99 application seem to load faster 101
Using images for buttons 103 Preparing a stretchable image 104 image for a button 106
Using a stretchable
Adding animation 109 Sliding views instead of instantly switching 110 ❍ Flipping a view to show its back 113 ❍ Using custom animations 114
Making your apps look professional with graphic design 117
6 Working with databases and table views
Keeping track of data in the FlashCards app 120 Deciding what to store 120 ❍ Sketching how the app will look 121 ❍ Designing new models 122
Introducing Core Data 126 Creating a data model 126 ❍ Adding entities and attributes 127 ❍ Using relationships 129 ❍ Generating data classes 130 ❍ Adding Core Data support to your app 131 ❍ Saving your game results 136
Fetching and viewing data 140 Viewing in a table
Navigating to related data
Changing your data model 152 Versioning your data model 153 versions 153
Planning for what’s next 154
7 Creating a photo-based application
Designing the application 156 Sketching Disguisey 156 ❍ Defining the behavior of your application 157 ❍ Designing your application’s models, views, and controllers 159
Creating an app with tab-based navigation 161 Renaming classes with the refactoring tool 162 Storyboarding your app in Interface Builder 163 ❍ Making images for the tabs 167 ❍ Making the face view 168 Making the disguise views 170 ❍ Changing tabs with code 171
Incorporating models 173 Coding DIDisguise and DIDisguiseElement 173
Working with photos 177 Getting images from the Photos application disguise elements to the photo 181
Wrapping it up, and what’s next 186
8 Moving, rotating, editing, and animating images Improving Disguisey 188 Sketching your new ideas 188 ❍ Updating models for the new features 190 ❍ Thinking about what you don’t know 193
Using animation to make disguises grow 195 Visualizing the animation
Coding the animation 196
Recognizing touch gestures 198 Picking the right gesture 198 ❍ Attaching gesture recognizers 199 ❍ Moving a disguise into place 202 Pinching the DIDisguise to resize it 206 ❍ Using a menu to remove parts of a disguise 208
Saving the disguised face 212 Displaying a Save menu 212 another 214
Overlaying one image onto
Moving on from Disguisey 216
9 Working with location and maps
Designing a map application 219 Sketching Parkinator 219 ❍ Looking at how it works 219 Designing the models, views, and controllers 220
Creating an app with a map 222 Using the Utility Application template 222 ❍ Adding the proper frameworks to your app 223 ❍ Placing an MkMapView on the main view 224 ❍ Showing the current location 226
Flipping the view to take a picture 229 Adding a UIImageView 229 Getting a photo 232
Adding a camera button 231
Showing the parking spot on the map 234 Using the flipped view’s image 235 ❍ Creating a map annotation model 236 ❍ Adding the pin to the map 239 Showing the pin 239
Making the data in Parkinator useful to others 241
10 Accessing the internet
Overview of an internet-enabled Parkinator 242 Updating the main view 243 ❍ Tweeting an empty parking spot 243 ❍ Getting a list of open spaces 244 Using HTML for Help 244
Adding buttons on a toolbar 245 Creating a toolbar 245 ❍ Adding buttons for send, search, and help 246 ❍ Improving the toolbar layout 247
Using web views in your app 248 Making the Help view 248 ❍ Setting up the Help view 249 Making an HTML resource 252
Integrating with Twitter 255 Looking at iOS support for Twitter 256 ❍ Composing and sending a tweet 257 ❍ Searching Twitter 259 Parsing individual tweets 261 ❍ Displaying locations in the Map View 262
What’s next 264
PART 3 GOING FROM XCODE TO THE APP STORE 265 11 Debugging and optimizing your application
Debugging without tools 268 Intentionally introducing a bug 268 ❍ Logging messages 269 ❍ Using assertions 271 ❍ Popping up dialogs 273
Debugging with Xcode 274 Setting breakpoints 275 ❍ Stepping through code 275 Watching variables 276 ❍ Breaking when something happens 277
Speeding up your app 278 Profiling your code 278 ❍ Finding bottlenecks Optimizing memory usage 282
What’s next 284
12 Building for the device and the App Store
Running your app on a device 285 Getting developer certificates 286 ❍ Provisioning your device 289 ❍ Installing your program 293 Distributing to testers who don’t have Xcode 293
Submitting your app to the App Store 296 Making sure everything is in order 296 ❍ Creating your App Store application record 298 ❍ Submitting your app to the App Store 299
Appendix Online resources for iOS app developers index 309
Preface We came to iOS development from two different paths. Lou is a commercial software developer with a traditional CS background and degree, and Eitan has a mixed design and technology background and a career in academia. Lou is from NYC, and Eitan is from LA. We both decided to settle in a small town in Western Massachusetts, and although we live less than a mile from each other, we never met. Troy Mott, a development editor at Manning, contacted Lou, an iOS developer and blogger, about Manning’s Hello series. The whimsical take on programming education and Troy’s persuasion convinced Lou that it would be a worthwhile project. After Lou got started, though, he became convinced he needed a coauthor, and he set out to find one. Late last year, a chance mention of this coauthor search to a mutual friend led to an introduction to Eitan. An hour or so after sharing a coffee at a local cafe, we knew we wanted to write this book together. So, a coauthor search that began over the web and with global reach via social networking ended the old-fashioned way—over brunch and faceto-face networking. And, in a time where virtual collaboration is the norm, we were lucky to be able to meet when we needed to. We hope you find that our different backgrounds each bring something to this book. Between us, we have decades of programming, designing, writing, and teaching experience, and we needed it all to fit the vast domain of iOS development into something a little gentler than most other books—and, we hope, a lot more fun. xv
Acknowledgments We would like to acknowledge all the folks at Manning who expertly guided us through the development and production processes: Troy Mott, Sebastian Stirling, Susanna Kline, Tiffany Taylor, Toma Mulligan, Mary Piergies, Marija Tudor, and Janet Vail, and many others who worked on our book and whose names we do not know. Special thanks to our technical proofreader, James Hatheway, who made sure the technical content in our manuscript was up to par and who checked the code examples shortly before the book went into production. And we would like to acknowledge our peer reviewers, who took the time to read our manuscript at various stages of its development and who provided invaluable feedback: Al Scherer, Christopher Haupt, Craig Smith, David Barkol, David Strong, Frank Ableson, Lester Lobo, Nikolaos Kaintantzis, Paul Stusiak, Peter Friese, Premkumar Rajendran, Ray Booysen, Robert McGovern, Sanchet Dighe, Santosh Shanbhag, and Sarah Forst. Finally, thanks to J.D. “Illiad” Fraser of User Friendly for letting Manning use the User Friendly cartoons in the Hello! series and for allowing us to put our own words in the characters’ mouths in this book. LOU FRANCO I would like to thank my wife, Jennifer Rippel, whose seriousness and self-motivation are daily inspirations to me. Thanks also to my mom, who did so much to help me find my life’s work, from touch-typing lessons to xvi
getting me the TRS-80 color computer I learned to program on. Also, thanks to my extended family for their warmth and lifelong support. Thanks to my colleagues at Atalasoft and the rest of Kofax, who make my work day rewarding and productive. And finally, a very grateful thanks to Dominique Thiebaut for introducing me to Eitan, without whom this book would not exist. EITAN MENDELOWITZ I would like to thank my colleagues at Smith College who encouraged me to work on this project; and my Mobile Computing students, who were both patient and helpful as I was developing material for this book. Most of all, I am grateful for the fantastic iOS developer community, whose creativity and experimentation are a continual source of inspiration.
About this book How this book is organized
Part 1 of this book is your introduction to the world of iOS development. By the end of this section, you’ll know your way around Xcode, its GUI building tools, and enough of Objective-C and object-oriented development to build an app: ❂
Chapter 1 introduces Xcode, the main tool you’ll be using to develop iOS apps. We show you how to write Hello World!, the first app that programmers generally learn to write. Chapter 2 explains the model-view-controller pattern used to organize iOS apps. Chapter 3 introduces Objective-C so you can add interactivity to your apps. We’ll take Hello World! and show you how to connect up buttons, labels, and text fields to make it more useful.
Part 2 takes you through the main features of iOS as you build three apps. Each chapter will show you all the steps, from sketching a GUI, through object-oriented design, and, finally, how to code the final result: ❂
Chapter 4 starts with a simple flashcard app that teaches US state capitals. By the end of the chapter, you’ll know how to use outlets and actions to react to the user and simple navigation to get from screen to screen. You can adapt this app for any subject. Chapter 5 shows how to polish the look of your app with imagery, custom buttons, and animations.
About this book
Chapter 6 takes the flashcard app and adds a local database using iOS’s Core Data framework. You’ll also learn how to show database information in table views. Chapter 7 starts with a new app, Disguisey, that lets you put mustaches, hats, wigs, and other disguise elements onto any photo. In this chapter, we’ll cover tabbed interfaces and accessing the device’s camera or photo album. Chapter 8 adds gesture recognition to Disguisey. You’ll learn how to recognize long press, pinch, and pan gestures to interact with your face photo and disguise elements. Chapter 9 explores iOS’s location and mapping frameworks in a new app, Parkinator. You’ll learn how to show a map and put a new pin on it to remember where you parked your car. Chapter 10 adds networking capabilities to Parkinator. You’ll learn how to show web pages and how to search and post to Twitter.
Part 3 shows you that once you’ve built an app, there’s a lot more to learn. This part guides you around some of the tools that make sure your app doesn’t have bugs and explains how to get the app into the App Store: ❂
Chapter 11 examines Xcode’s debugger and instruments. You’ll purposely add problems to your completed app and then find them using Xcode’s tools. Chapter 12 shows you everything you need to know to get your app into the App Store.
Finally, the appendix provides a list of external resources that will help you make a great app. What you'll need
In order to follow along with this book, you’ll need to have access to a Mac with the latest Xcode on it (we’ll show you how to get Xcode). This means you must have at least Lion. Most of what we do works on slightly older versions, but the screenshots may not match exactly.
About this book
If you want to put any of these apps on your iOS device, you’ll need an iOS developer account, which costs $99 per year. None of the apps in this book require that—you can run all the code in the Simulator. There are parts, like taking a picture with the camera, that we show you how to fake if you aren’t running on a device. If you want to make a real app, you’ll need to join the developer program. Code conventions and downloads
This book contains all the source code for three iOS apps, built up over a few chapters each. Code samples are annotated so you can easily follow along. Code in listings and in text is set in a monospaced font like this to distinguish it from ordinary text. If you want to download the source, it’s available on GitHub at http:// github.com/loufranco/hello-ios-source. The code uses the MIT open source license so you can grab whatever you need for your projects or use any of the example apps as a starting point for your own app. You can also download a zip file with the source code for this book from the publisher’s website at www.manning.com/HelloiOSDevelopment. Author Online
Purchase of Hello! IOS Development includes free access to a private web forum run by Manning Publications where you can make comments about the book, ask technical questions, and receive help from the authors and from other users. To access the forum and subscribe to it, point your web browser to www.manning.com/HelloiOSDevelopment This page provides information on how to get on the forum once you’re registered, what kind of help is available, and the rules of conduct on the forum. Manning’s commitment to our readers is to provide a venue where a meaningful dialogue between individual readers and between readers and the authors can take place. It’s not a commitment to any specific amount of participation on the part of the authors whose contribution to the book’s forum remains voluntary (and unpaid). We suggest you try asking the authors some challenging questions, lest their interest stray!
About this book
The Author Online forum and the archives of previous discussions will be accessible from the publisher’s website as long as the book is in print. About the authors
LOU FRANCO runs Atalasoft imaging and PDF toolkit development for Kofax and has been a mobile app developer for over a decade. He lives in Northampton, MA. EITAN MENDELOWITZ is an assistant professor of computing and the arts at Smith College, where he teaches courses situated at the intersection of computer science and media art. These include “Seminar on Mobile and Locative Computing,” which uses iOS as its development platform. Eitan is currently developing mobile platforms to enable citizen science.
About Hello! books At Manning, we think it should be just as much fun to learn new tools as it is to use them. And we know that fun learning gets better results. Our Hello! Series demonstrates how to learn a new technology without getting bogged down in too many details. In each book, User Friendly cartoon characters offer commentary and humorous asides, as the books moves quickly from Hello World! into practical techniques. Along the way, readers build a unique hands-on application that leverages the skills learned in the book. Our Hello! books offer short, lighthearted introductions to new topics, with the authors and cartoon characters acting as your guides.
Hello! iPhone his part of the book will help you get started being an iPhone application developer. By the time you’re finished with this part, you’ll have done the following: ❂ ❂ ❂ ❂
Seen the Apple Developer website and tools Set up your machine for development Learned about the basic concepts required to create applications Created two simple applications
Chapter 1 is focused on getting your machine ready for development. You’ll learn to navigate the Apple Developer website, download and install the Apple tools that you need to create apps, and take a tour through the two most important tools, Xcode and Interface Builder. At the end of the chapter, you’ll have created a Hello World! application. Chapter 2 will help you start thinking about iPhone apps like a developer. You’ll begin by learning the basics of the model-view-controller model of GUI development and object-oriented design. Then we’ll move on to the topic of object lifetime, and you’ll apply what you’ve learned. Then, in chapter 3, we’ll move on to the syntax of Objective-C, the programming language you use to write apps. We’ll end by showing you how to use these new concepts in Xcode and Interface Builder to create a slightly more complex application.