You are previewing Head First iPhone Development.

Head First iPhone Development

Cover of Head First iPhone Development by Dan Pilone... Published by O'Reilly Media, Inc.
  1. Copyright
  2. Advance Praise for Head First iPhone Development
  3. The Authors
  4. how to use this book: Intro
    1. Who is this book for?
      1. Who should probably back away from this book?
    2. We know what you're thinking.
    3. And we know what your brain is thinking.
    4. Metacognition: thinking about thinking
      1. Here's what WE did:
    5. Here's what YOU can do to bend your brain into submission
    6. Read me
      1. System requirements
    7. The technical review team
    8. Acknowledgments
    9. Safari® Books Online
  5. 1. getting started: Going mobile
    1. 1.1. There's a lot of buzz and a lot of money tied up in the App Store...
    2. 1.2. Mobile applications aren't just ported desktop apps
      1. 1.2.1. iPhone apps are not small desktop apps
    3. 1.3. Anatomy of an iPhone app
      1. 1.3.1. First we have one or more views...
      2. 1.3.2. ...then the code that makes the views work...
      3. 1.3.3. ...and any other resources, all packaged into your application.
    4. 1.4. Mike can't make a decision
    5. 1.5. Make a good first impression
    6. 1.6. It all starts with the iPhone SDK
    7. 1.7. Xcode includes app templates to help you get started
    8. 1.8. Xcode is the hub of your iPhone project...
    9. 1.9. ...and plays a role in every part of writing your app
    10. 1.10. Build your interface using... Interface Builder
    11. 1.11. Add the button to your view
    12. 1.12. The iPhone Simulator lets you test your app on your Mac
    13. 1.13. What happened?
      1. 1.13.1. Unless the UI components are hooked up to the code, nothing is going to happen.
    14. 1.14. Use Interface Builder to connect UI controls to code
    15. 1.15. Interface Builder lists which events a component can trigger
    16. 1.16. Elements dispatch events when things happen to them
    17. 1.17. Connect your events to methods
    18. 1.18. Your iPhone Toolbox
  6. 2. iPhone app patterns: Hello @twitter!
    1. 2.1. First we need to figure out what Mike (really) wants
    2. 2.2. App design rules—the iPhone HIG
      1. 2.2.1. Application types
    3. 2.3. HIG guidelines for pickers and buttons
    4. 2.4. Create a new View-based project for InstaTwit
      1. 2.4.1. Start with the view layout
    5. 2.5. The life of a root view
    6. 2.6. First, get the data from Mike
    7. 2.7. Use pickers when you want controlled input
      1. 2.7.1. When in doubt, check out Apple's API documentation
    8. 2.8. Fill the picker rows with Mike's data
    9. 2.9. Pickers get their data from a datasource...
      1. 2.9.1. ...and tell their delegates when something happens.
    10. 2.10. There's a pattern for that
      1. 2.10.1. Controls have their own specific datasources and delegates
      2. 2.10.2. Protocols tell you what methods (messages) you need to implement
    11. 2.11. First, declare that the controller conforms to both protocols
      1. 2.11.1. Next, add Mike's activities and feelings to the implementation file
    12. 2.12. The datasource protocol has two required methods
    13. 2.13. Connect the datasource just like actions and outlets
    14. 2.14. There's just one method for the delegate protocol
    15. 2.15. The button needs to be connected to an event
      1. 2.15.1. Without an action, your button won't work!
    16. 2.16. Add the IBOutlet and property to our view controller
    17. 2.17. Connect the picker to our outlet
    18. 2.18. Use our picker reference to pull the selected values
    19. 2.19. Your iPhone Toolbox
  7. 3. objective-c for the iPhone: Twitter needs variety
    1. 3.1. Renee is catching on....
    2. 3.2. Make room for custom input
    3. 3.3. Header files describe the interface to your class
    4. 3.4. Auto-generated accessors also handle memory management
      1. 3.4.1. Objective-C can automatically release references, too.
    5. 3.5. To keep your memory straight, you need to remember just two things
    6. 3.6. But when Mike's finished typing...
    7. 3.7. Customize your UITextField
      1. 3.7.1. Next change the label on the return key
    8. 3.8. Components that use the keyboard ask it to appear...
      1. 3.8.1. passing messages to other objects
    9. 3.9. Ask the textField to give up focus
    10. 3.10. Messages in Objective-C use named arguments
    11. 3.11. Use message passing to tell our view controller when the Done button is pressed
    12. 3.12. Something's still not right
      1. 3.12.1. Build the tweet with strings
    13. 3.13. Your Objective-C Toolbox
  8. 4. multiple views: A table with a view
    1. 4.1. So, how do these views fit together?
    2. 4.2. The navigation template pulls multiple views together
    3. 4.3. The navigation template starts with a table view
    4. 4.4. A table is a collection of cells
      1. 4.4.1. Each drink gets its own cell... sorta
    5. 4.5. Just a few more drinks
    6. 4.6. Plists are an easy way to save and load data
    7. 4.7. Arrays (and more) have built-in support for plists
    8. 4.8. Use a detail view to drill down into data
    9. 4.9. A closer look at the detail view
    10. 4.10. Use the navigation controller to switch between views
    11. 4.11. Navigation controllers maintain a stack of views
      1. 4.11.1. We'll use the tap notification in the table view delegate
    12. 4.12. Instantiate a view controller like any other class
    13. 4.13. Dictionaries store information as key-value pairs
    14. 4.14. Debugging—the dark side of iPhone development
      1. 4.14.1. Warnings can help find problems without debugging
    15. 4.15. First stop on your debugging adventure: the console
    16. 4.16. Interact with your application while it's running
      1. 4.16.1. And when it's about to stop running
    17. 4.17. Xcode supports you after your app breaks, too
    18. 4.18. The Xcode debugger shows you the state of your application
    19. 4.19. What the heck is going on?
    20. 4.20. Your iPhone Toolbox
  9. 5. plists and modal views: Refining your app
    1. 5.1. It all started with Sam...
      1. 5.1.1. DrinkMixer
    2. 5.2. Use the debugger to investigate the crash
      1. 5.2.1. We're trying to stuff a dictionary into a string
    3. 5.3. Update your code to handle a plist of dictionaries
    4. 5.4. The detail view needs data
    5. 5.5. Each dictionary has all the information we need
    6. 5.6. We have a usability problem
    7. 5.7. Use a disclosure indicator if your cell leads to more information
    8. 5.8. Sales were going strong...
    9. 5.9. Use navigation controller buttons for editing
    10. 5.10. The button should create a new view
    11. 5.11. We need a view... but not necessarily a new view
    12. 5.12. The view controller defines the behavior for the view
    13. 5.13. A nib file contains the UI components and connections...
      1. 5.13.1. ...and information about the nib's File's Owner
    14. 5.14. You can subclass and extend views like any other class
    15. 5.15. Use Xcode to create a view controller without a nib
    16. 5.16. Modal views focus the user on the task at hand...
      1. 5.16.1. adding or editing items
    17. 5.17. Any view can present a modal view
    18. 5.18. Our view doesn't have a navigation bar
    19. 5.19. Create the save and cancel buttons
    20. 5.20. Write the save and cancel actions
    21. 5.21. Your iPhone Toolbox
  10. 6. saving, editing, and sorting data: Everyone's an editor...
    1. 6.1. Sam is ready to add a Red-Headed School Girl...
    2. 6.2. ...but the keyboard is in the way
    3. 6.3. We need to wrap our content in a scroll view
    4. 6.4. The scroll view is the same size as the screen
    5. 6.5. The keyboard changes the visible area
    6. 6.6. iPhone notifies you about the keyboard
    7. 6.7. Register with the default notification center for events
      1. 6.7.1. Then unregister when you're done
    8. 6.8. Keyboard events tell you the keyboard state and size
    9. 6.9. The table view doesn't know its data has changed
    10. 6.10. You need to ask the table view to reload its data
    11. 6.11. The array is out of order, too
      1. 6.11.1. We can sort our array using NSSortDescriptor
    12. 6.12. Table views have built-in support for editing and deleting
    13. 6.13. Your iPhone Development Toolbox
  11. 7. tab bars and core data: Enterprise apps
    1. 7.1. HF bounty hunting
    2. 7.2. Choose a template to start iBountyHunter
    3. 7.3. Drawing how iBountyHunter works...
    4. 7.4. Build the fugitive list view
    5. 7.5. Next up: the captured view
      1. 7.5.1. A view's contents are actually subviews
    6. 7.6. After a quick meeting with Bob...
    7. 7.7. Core Data lets you focus on your app
      1. 7.7.1. But wait, there's more!
    8. 7.8. Core Data needs to know what to load
      1. 7.8.1. We need to define our types...
    9. 7.9. Core Data describes entities with a Managed Object Model
    10. 7.10. Build your Fugitive entity
      1. 7.10.1. Exactly!
    11. 7.11. Whip up a Fugitive class without writing a line
      1. 7.11.1. Our generated Fugitive class matches our Managed Object Model
      2. 7.11.2. NSManagedObject handles storage and memory for generated properties
      3. 7.11.3. NSManagedObject also implements the properties
    12. 7.12. Use an NSFetchRequest to describe your search
      1. 7.12.1. Ask the Managed Object Context to fetch data using your NSFetchRequest
    13. 7.13. Add the database as a resource
      1. 7.13.1. Back to the Core Data stack
    14. 7.14. The template sets things up for a SQLite DB
      1. 7.14.1. iPhone Apps are read-only
    15. 7.15. The iPhone's application structure defines where you can read and write
      1. 7.15.1. Use the Documents directory to store user data
    16. 7.16. Copy the database to the correct place
    17. 7.17. To be continued...
    18. 7.18. Your Core Data Toolbox
  12. 8. migrating and optimizing with core data: Things are changing
    1. 8.1. Bob needs documentation
    2. 8.2. Everything stems from our object model
    3. 8.3. The data hasn't been updated
      1. 8.3.1. Core Data caught a mismatch between our DB and our model
    4. 8.4. Data migration is a common problem
    5. 8.5. We need to migrate the old data into the new model
      1. 8.5.1. Our two models need different versions
    6. 8.6. Xcode makes it easy to version the data model
    7. 8.7. Core Data can "lightly" migrate data
    8. 8.8. Bob has some design input
      1. 8.8.1. The Managed Object Context saves new or changed items
    9. 8.9. A quick demo with Bob
    10. 8.10. Use predicates for filtering data
      1. 8.10.1. NSFetchRequest concepts are nearly identical to SQL
    11. 8.11. We need to set a predicate on our NSFetchRequest
    12. 8.12. Core Data controller classes provide efficient results handling
      1. 8.12.1. Table views and NSFetchedResultsControllers are made for each other
    13. 8.13. Time for some high-efficiency streamlining
    14. 8.14. Next we need to change the search to use the controller...
    15. 8.15. Refactor viewWillAppear to use the controller
    16. 8.16. We need to refresh the data
      1. 8.16.1. NSFetchedResultsController can check for changes
    17. 8.17. Your Data Toolbox
  13. 9. camera, map kit, and core location: Proof in the real world
    1. 9.1. For Bob, payment requires proof!
      1. 9.1.1. Flip over for the detail view!
    2. 9.2. The way to the camera...
      1. 9.2.1. The iPhone isn't the only device using apps
    3. 9.3. There's a method for checking
    4. 9.4. Prompt the user with action sheets
      1. 9.4.1. We'll use action sheets to let the user pick the image source
    5. 9.5. Bob needs the where, in addition to the when
    6. 9.6. Core Location can find you in a few ways
      1. 9.6.1. Core Location relies on the LocationManager
    7. 9.7. Add a new framework
      1. 9.7.1. Then update the header file
    8. 9.8. Just latitude and longitude won't work for Bob
    9. 9.9. Map Kit is new with iPhone 3.0
    10. 9.10. A little custom setup for the map
    11. 9.11. Annotations require a little more finesse
    12. 9.12. Your extras Toolbox
    13. 9.13. It's been great having you here!
  14. A. leftovers: The top 6 things (we didn't cover)
    1. A.1. #1. Internationalization and Localization
      1. A.1.1. Localizing nibs
    2. A.2. Localizing string resources
    3. A.3. Generating your strings file
    4. A.4. #2. UIWebView
      1. A.4.1. Using UIWebView
    5. A.5. UIWebView properties
      1. A.5.1. Loading generated content
      2. A.5.2. The UIWebView supports a delegate, too
    6. A.6. #3. Device orientation and view rotation
      1. A.6.1. The view controller tells the iPhone OS what orientations it supports
    7. A.7. Handling view rotations
    8. A.8. Handling rotation with two different views
    9. A.9. #4. View animations
      1. A.9.1. Animating table view updates
      2. A.9.2. Animating view and control changes
    10. A.10. #5. Accelerometer
      1. A.10.1. All you need is the UIAccelerometer
    11. A.11. Understanding the device acceleration
    12. A.12. #6. A word or two about gaming...
      1. A.12.1. Multitouch
    13. A.13. Quartz and OpenGL
      1. A.13.1. Quartz
      2. A.13.2. OpenGL
      3. A.13.3. Game Kit
  15. B. preparing an app for distribution: Get ready for the App Store
    1. B.1. Apple has rules
      1. B.1.1. Start at the Apple Developer Portal
      2. B.1.2. First get your Development Certificate
    2. B.2. The Provisioning Profile pulls it all together
    3. B.3. Keep track in the Organizer
    4. B.4. A few final tips...
O'Reilly logo

Advance Praise for Head First iPhone Development

"The great thing about this book is its simple, step-by-step approach. It doesn't try to teach everything—it just launches you right into building iPhone applications in a friendly, conversational way. It's a fantastic book for people who already know how to write code and just want to get straight into the meat of building iPhone applications."

Eric Shephard, owner of Syndicomm

"Head First iPhone Development was clearly crafted to get you easily creating, using and learning iPhone technologies without needing a lot of background with Macintosh development tools."

Joe Heck, Seattle Xcoders founder

"This book is infuriating! Some of us had to suffer and learn iPhone development 'the hard way,' and we're bitter that the jig is up."

Mike Morrison, Stalefish Labs founder

"Head First iPhone Development continues the growing tradition of taking complex technical subjects and increasing their accessibility without reducing the depth and scope of the content. iPhone Development is a steep learning curve to climb by any measure, but with Head First iPhone Development, that curve is accompanied with pre-rigged ropes, a harness, and an experienced guide! I recommend this book for anyone who needs to rapidly improve their understanding of developing for this challenging and exciting platform."

Chris Pelsor,

Praise for other Head First books

"Head First Object Oriented Analysis and Design is a refreshing look at subject of OOAD. What sets this book apart is its focus on learning. The authors have made the content of OOAD accessible, usable for the practitioner."

Ivar Jacobson, Ivar Jacobson Consulting

"I just finished reading HF OOA&D and I loved it! The thing I liked most about this book was its focus on why we do OOA&D-to write great software!"

Kyle Brown, Distinguished Engineer, IBM

"Hidden behind the funny pictures and crazy fonts is a serious, intelligent, extremely well-crafted presentation of OO Analysis and Design. As I read the book, I felt like I was looking over the shoulder of an expert designer who was explaining to me what issues were important at each step, and why."

Edward Sciore, Associate Professor, Computer Science Department, Boston College

"All in all, Head First Software Development is a great resource for anyone wanting to formalise their programming skills in a way that constantly engages the reader on many different levels."

Andy Hudson, Linux Format

"If you're a new software developer, Head First Software Development will get you started off on the right foot. And if you're an experienced (read: long-time) developer, don't be so quick to dismiss this..."

Thomas Duff, Duffbert's Random Musings

"There's something in Head First Java for everyone. Visual learners, kinesthetic learners, everyone can learn from this book. Visual aids make things easier to remember, and the book is written in a very accessible style—very different from most Java manuals...Head First Java is a valuable book. I can see the Head First books used in the classroom, whether in high schools or adult ed classes. And I will definitely be referring back to this book, and referring others to it as well."

Warren Kelly,, March 2006

"Another nice thing about Head First Java, 2nd Edition is that it whets the appetite for more. With later coverage of more advanced topics such as Swing and RMI, you just can't wait to dive into those APIs and code that flawless, 100000-line program on that will bring you fame and venture-capital fortune. There's also a great deal of material, and even some best practices, on networking and threads—my own weak spot. In this case, I couldn't help but crack up a little when the authors use a 1950s telephone operator—yeah, you got it, that lady with a beehive hairdo that manually hooks in patch lines—as an analogy for TCP/IP ports... you really should go to the bookstore and thumb through Head First Java, 2nd Edition. Even if you already know Java, you may pick up a thing or two. And if not, just thumbing through the pages is a great deal of fun."

Robert Eckstein,, April 2005

"Of course it's not the range of material that makes Head First Java stand out, it's the style and approach. This book is about as far removed from a computer science textbook or technical manual as you can get. The use of cartoons, quizzes, fridge magnets (yep, fridge magnets ...). And, in place of the usual kind of reader exercises, you are asked to pretend to be the compiler and compile the code, or perhaps to piece some code together by filling in the blanks or ... you get the picture... The first edition of this book was one of our recommended titles for those new to Java and objects. This new edition doesn't disappoint and rightfully steps into the shoes of its predecessor. If you are one of those people who falls asleep with a traditional computer book then this one is likely to keep you awake and learning.", June 2005

"Head First Web Design is your ticket to mastering all of these complex topics, and understanding what's really going on in the world of web design...If you have not been baptized by fire in using something as involved as Dreamweaver, then this book will be a great way to learn good web design."

Robert Pritchett, MacCompanion, April 2009 Issue

"Is it possible to learn real web design from a book format? Head First Web Design is the key to designing user-friendly sites, from customer requirements to hand-drawn storyboards to online sites that work well. What sets this apart from other 'how to build a web site' books is that it uses the latest research in cognitive science and learning to provide a visual learning experience rich in images and designed for how the brain works and learns best. The result is a powerful tribute to web design basics that any general-interest computer library will find an important key to success."

Diane C. Donovan, California Bookwatch: The Computer Shelf

"I definitely recommend Head First Web Design to all of my fellow programmers who want to get a grip on the more artistic side of the business."

Claron Twitchell, UJUG

The best content for your career. Discover unlimited learning on demand for around $1/day.