Introduction 1
HOUR 1: Preparing Your System and iDevice for Development 5
Welcome to the iOS Platform . . . . . . . 5
Becoming an iOS Developer . . . . . . . . . . . . . . . . . . . . . . . . . 9
Running an iOS App . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Developer Technology Overview . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . 23
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
HOUR 2: Introduction to Xcode and the iOS Simulator 29
Using Xcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Using the iOS Simulator . . . . . . . . . . . . . . . . . . . . . . . . 63
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Summary . . . . . . . . . . . . . . . . . . . . . . . . . 71
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
HOUR 3: Discovering Swift and the iOS Playground 77
Object-Oriented Programming and Swift . . . . . . . . . . . . . . . .. . . . . . . . . . . 77
The Terminology of Object-Oriented Development . . . . . . . . . . . . . . . .. . . . . . . . . 79
Exploring the Swift File Structure . . . . . . . . . . . . . . . . . . . . . . . . . 82
Swift Programming Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Memory Management and Automatic Reference Counting . . . . . . . . . . . . . . . 107
Introducing the iOS Playground . . . . . . . . . . . . . . . . . . . . . . . . 108
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Q&A . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Workshop . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Activities . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
HOUR 4: Inside Cocoa Touch 117
What Is Cocoa Touch? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Exploring the iOS Technology Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Tracing the iOS Application Life Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Cocoa Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Exploring the iOS Frameworks with Xcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Further Exploration . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . 143
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
HOUR 5: Exploring Interface Builder 147
Understanding Interface Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Creating User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Customizing the Interface Appearance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Connecting to Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
HOUR 6: Model-View-Controller Application Design 185
Understanding the MVC Design Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
How Xcode Implements MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Using the Single View Application Template . . . . . . . . . . . . . . . . . . . . . . . 191
Further Exploration . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 209
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . 210
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
HOUR 7: Working with Text, Keyboards, and Buttons 215
Basic User Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Using Text Fields, Text Views, and Buttons . . . . . . . . . . . . . . . . . . . . . . . . . 217
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
HOUR 8: Handling Images, Animation, Sliders, and Steppers 251
User Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Creating and Managing Image Animations, Sliders, and Steppers . . . . . . . . . . . . . 253
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Summary . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
HOUR 9: Using Advanced Interface Objects and Views 281
User Input and Output (Continued) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Using Switches, Segmented Controls, and Web Views . . . . . . . . . . . . . . .. . . . . 287
Using Scrolling Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Q&A . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
HOUR 10: Getting the User's Attention 317
Alerting the User . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Exploring User Alert Methods . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . 328
Further Exploration . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
HOUR 11: Implementing Multiple Scenes and Popovers 349
Introducing Multiscene Storyboards . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . 350
Using Segues . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . 377
Popovers, Universal Applications, and iPhones . . . . . . . . . . . . . . . .. . . . . . . . 390
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
HOUR 12: Making Choices with Toolbars and Pickers 401
Understanding the Role of Toolbars . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Exploring Pickers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Using the Date Picker . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Using a Custom Picker . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
HOUR 13: Advanced Storyboards Using Navigation and Tab Bar Controllers 445
Advanced View Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Exploring Navigation Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Understanding Tab Bar Controllers . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 452
Using a Navigation Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Using a Tab Bar Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 481
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . 483
HOUR 14: Navigating Information Using Table Views and Split View Controllers 485
Understanding Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Exploring the Split View Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
A Simple Table View Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
Creating a Master-Detail Application . . . . . . . . . . . . . . . . . . . . . . . . . . 507
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . 523
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
HOUR 15: Reading and Writing Application Data 527
iOS Applications and Data Storage . . . . . . . . . . . . . . . . . . . . . . . . 527
Data Storage Approaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
Creating Implicit Preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
Implementing System Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Implementing File System Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
HOUR 16: Building Responsive User Interfaces 573
Responsive Interfaces . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 573
Using Auto Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
Programmatically Defined Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
HOUR 17: Using Advanced Touches and Gestures 611
Multitouch Gesture Recognition . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 611
Adding Gesture Recognizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Using Gesture Recognizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
HOUR 18: Sensing Orientation and Motion 639
Understanding Motion Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
Accessing Orientation and Motion Data . . . . . . . . . . . . . . . . . . . . . . . . . . 643
Sensing Orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Detecting Acceleration, Tilt, and Rotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
Summary . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
Activities . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
HOUR 19: Working with Rich Media 669
Exploring Rich Media . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
The Media Playground Application . . . . . . . . . .. . . . . . . . . . . . . . . 683
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
Activities . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
HOUR 20: Interacting with Other iOS Services 713
Extending iOS Service Integration . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 713
Using the Address Book, Email, Social Networking, and Maps . . . . . . . . . . . . . . . . . . . . 730
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
Workshop . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749
HOUR 21: Implementing Location Services 751
Understanding Core Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
Creating a Location-Aware Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
HOUR 22: Building Background-Ready Applications 783
Understanding iOS Backgrounding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783
Disabling Backgrounding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789
Handling Background Suspension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
Implementing Local Notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
Using Task-Specific Background Processing. . . . . . . . . . . . . . . . . . . . . 795
Completing a Long-Running Background Task . . . . . . . . . . . . . . . . . . . . . . . 800
Performing a Background Fetch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
HOUR 23: Building Universal Applications 815
Universal Application Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
Size Classes . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . 819
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . 833
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 834
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
HOUR 24: Application Tracing, Monitoring, and Debugging 837
Instant Feedback with NSLog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
Using the Xcode Debugger . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . 841
Further Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862
Index 863
ONLINE APPENDIX A: Introducing Xcode Source Control