Tải bản đầy đủ

Hello iOS development


Hello! IOS Development



Hello! IOS Development
Lou Franco
Eitan Mendelowitz



For online information and ordering of this and other Manning books, please visit
www.manning.com. The publisher offers discounts on this book when ordered in
quantity. For more information, please contact:
Special Sales Department
Manning Publications Co.
20 Baldwin Road
PO Box 261
Shelter Island, NY 11964
Email: orders@manning.com
©2013 by Manning Publications Co. All rights reserved.

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:
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

To my love Elanit, and to Amalya,
who wants me to create a game about pirates



Brief contents
1 Hello! iPhone


2 Thinking like an iPhone developer
3 Coding in Objective-C



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



11 Debugging and optimizing your application
12 Building for the device and the App Store
Appendix Online resources for iOS app developers






preface xv
acknowledgments xvi
about this book xviii
about Hello! books xxii

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




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

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


Making your


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

Migrating between

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

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

Congratulations! 305

Appendix Online resources for iOS app developers
index 309



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.


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.
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




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.
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


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.



Part 1

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
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.





Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay