Online Sample Chapter
Xcode 4 Unleashed: Starting an iOS Application
Sample Pages
Download the sample pages (includes Chapter 8 and Index)
Table of Contents
Introduction 1
Part I First Steps
1 Getting Xcode 9
Before You Do Anything 9
Requirements 10
Installing Xcode. 10
What You Get 11
Removing Xcode. 12
Apple Developer Programs 12
Through an Installer Package 13
Summary 15
2 Kicking the Tires 17
Starting Xcode 17
Hello World 19
A New Project 19
Quieting Xcode Down 21
Building and Running 21
The Real Thing 23
Getting Rid of It 23
Summary 24
3 Simple Workflow and Passive Debugging 25
Building 28
Running 30
Simple Debugging 32
Summary 33
4 Active Debugging 35
A Simple Test Case 35
Going Active 35
Setting a Breakpoint. 36
The Variables Pane 37
Stepping Through 38
Fixing the Problem 40
Behaviors 40
The Fix 42
Summary 43
5 Compilation 45
Compiling 46
Linking 50
Dynamic Loading 51
Xcode’s Refinements 52
Compiler Products 55
Intermediate Products 55
Precompiled Headers 56
Summary 56
6 Adding a Library Target 57
Adding a Target 57
Targets 58
Target Membership 58
Adding Files to a Target 59
Headers in Targets 61
A Dependent Target 62
Adding a Library 63
Debugging a Dependent Target 63
Summary 64
7 Version Control 65
Taking Control 66
Creating a Git Repository by Hand 66
The State of Your Files 68
How Subversion Views Files 68
How Git Views Files 68
How Xcode Views Files 69
Your First Commit 70
Adding a Remote Repository 71
Setting Up the Remote 71
Pushing to the Remote 72
Starting from a Repository 74
Merges and Conflicts 75
User A 75
User B 75
Merging 76
Conflicts 77
The Versions View 79
Comparison 79
Blame 81
Log 82
Branching 82
Summary 84
Part II The Life Cycle of an iOS Application
8 Starting an iOS Application 87
Planning the App 87
Model-View-Controller 87
The Model 88
The Views 89
The Controllers 90
Starting a New iPhone Project 90
Target Editor 92
Copyright, Again 93
One More Thing 97
Summary 98
9 An iOS Application: Model 99
Implementing the Model 99
Entities 100
Attributes 100
Relationships 102
Managed-Object Classes 105
Creating the Classes 105
Extending the Classes 106
Some Test Data 108
Making the Model Easier to Debug 111
Summary 111
10 An iOS Controller 113
Renaming Symbols 113
Refactoring a Method Name 114
Refactoring a Class Name 114
Editing the View Controller 116
The Table View 116
Setting Up the Passer List 117
Creating a New Passer 117
Live Issues and Fix-it 118
The Real Passer Rating 120
Another Bug 120
Running Passer Rating 123
Summary 125
11 Building a New View 127
Adding a View Controller 127
XIB Files 128
Building a View 130
Lots of Labels 132
First Tryout 134
Outlets 134
Checking Connections 137
Connecting GameListController 137
Code Completion and Snippets 139
Testing the Passer Detail View 141
Summary 141
12 Adding Table Cells 143
The Game Table 143
Schemes 147
A Custom Table Cell 149
Summary 154
13 Unit Testing 155
Logic Testing 156
Test Data 158
Testing the CSV Reader 159
Application Testing 166
SenTestingKit Assertions 168
Simple Tests 169
Equality 169
Exceptions 169
Summary 170
14 Measurement and Analysis 173
Speed 173
Memory 182
Allocations 182
Leaks 187
Zombies 189
Analysis 193
The Analyzer 193
Automatic Reference Counting 195
Summary 196
15 Storyboard 197
What Storyboard Is 197
A Storyboard Project 199
Reconstructing Passer Rating 201
Workspaces 201
Copying the Model 203
Coding the Passer List 205
Copying Views 205
A Custom Table View Cell 207
Adding a Passer Editor 210
Creating the Editor View 210
Coding the Editor Controller 212
Adding a Segue 215
Editing an Existing Passer 217
Summary 219
16 Provisioning 221
Developer Programs 221
Organizations 221
Individuals 222
The Enterprise Program 222
The Provisioning Story 222
Automatic Device Provisioning 223
The Provisioning Portal 225
Development Certificates 225
Distribution Certificates 225
Device IDs 226
Application IDs 227
Development Profiles 228
Distribution Profiles 229
Using a Signing Identity 230
Distribution Builds 231
Sharing Identities and Profiles 233
Preparing an App Store Release 234
Final Provisioning 234
iTunes Connect 234
Validating and Submitting 235
Summary 236
Part III Xcode for Mac OS X
17 Starting a Mac OS X Application 239
The Goal 239
Getting Started 240
Model 243
Porting from iOS 243
Automatic Reference Counting 246
Making the Application Twitch 248
Wiring Up a Menu 248
Loading Data into LeagueDocument 250
Summary 251
18 Wiring a Mac Application with Bindings 253
Filling the Document Window 253
A Table View 254
Autoresizing 255
Your First Object Controller 258
Binding the Team Table 260
Running Bindings 260
Laying Out Views 263
The Passer and Game Array Controllers 264
Binding the Passer Table 266
The Game Table—Truncation and Dates 268
The Game Popover 269
Summary 273
19 A Custom View for Mac OS X 275
A Graphing View 276
Back to the View Controller 279
Using PasserGraphController 281
Custom View Properties 282
Summary 283
20 Localization and Autolayout 285
Adding a Localization 286
Trying It Out 287
Localizing MainMenu.xib 288
Localizing the Window XIBs 291
Translating View Strings 291
Making the Text Fit—by Hand 292
Making the Text Fit—Autolayout 292
Localizing Info.plist 300
Strings in Code 302
Summary 306
21 Bundles and Packages 307
A Simple Package: RTFD 308
Bundles 309
Application Bundles 309
The Info.plist File 311
Localizing Info.plist 312
Info.plist Keys 312
Keys for All Bundles 312
Keys for iOS and Mac OS X Applications 314
Keys for Mac OS X Applications 315
iOS Keys 320
Keys for Plug-ins 322
Keys for Preference Panes 323
Keys for Dashboard Widgets 323
Summary 324
22 Frameworks 325
Adding a Framework Target 326
Populating the Framework 326
Using the Framework 327
Installing a Framework 327
Running the Application Alone 328
Where Frameworks Are Found 330
Putting the Framework in the Application 331
Building Mac Passer Rating 332
One More Thing 332
Summary 336
23 Property Lists 337
Property List Types 337
Editing Property Lists 338
A Brand New Property List 341
Why Not the Property List Editor? 345
Other Formats 348
Text Property Lists 348
Binary Property Lists 348
Specialized Property Lists 349
Summary 350
Part IV Xcode Tasks
24 Xcode 4 for Xcode 3 Veterans 353
The Desktop and the Browser 353
Start Slow 354
The Sorcerer’s Apprentice 355
The Editor 355
The Assistant Editor 355
More Than One Editor 356
Building 358
Where Did Everything Go? 358
Groups & Files 358
Detail View 360
Info Windows 360
Special-Purpose Editors 362
Browsers 364
Source Control 364
Interface Builder. 365
Other Changes 366
Summary 368
25 Documentation in Xcode 369
Intrinsic Help 369
The Quick Help Inspector 369
The Quick Help Popover 370
Open Quickly 371
Help 372
Xcode How-To’s. 373
The Documentation Organizer 373
Browsing Documentation 373
Searching Documentation 374
Bookmarks 375
Keeping Current 375
Generating Documentation 377
Installing Doxygen 378
What Doxygen Does 378
Configuring Doxygen: The Wizard 381
Configuring Doxygen: Expert Settings 383
Running Doxygen 384
Installing a Docset 385
Making Doxygen Part of Your Builds 386
Summary 388
26 The Xcode Build System 389
Xcode Build Variables 392
Settings Hierarchy 393
Editing Build Variables 395
Configurations 396
Adjusting Configurations 396
Adding Configurations 398
Configuration Files 398
Creating a Configuration File 398
SDK- and Architecture-Specific Settings 399
Preprocessing xcconfig Files 399
The xcodebuild Tool 400
Custom Build Rules 401
The Build Log 403
A Simple Build Transcript 404
Resources 406
Precompiled Header 407
Compiling Source Files 408
Linking 409
Making a Universal Binary 410
Touch 410
Summary 410
27 Instruments 411
What Instruments Is 411
Running Instruments 412
The Trace Document Window 413
The Library 419
Instrument Configuration 420
Recording 421
Saving and Reopening 423
The Instruments 424
Core Data. 424
Custom Instruments 425
Dispatch 425
File System 425
Garbage Collection 426
Graphics 426
Input/Output 426
Master Tracks 426
Memory 426
System 427
Threads/Locks 429
UI Automation 429
User Interface. 430
Instruments Available to iOS 430
Custom Instruments 431
The Templates 433
For Both Mac and iOS 433
iOS Only 434
Mac Only 435
Summary 435
28 Snippets 437
Tricks 437
General 437
The Jump Bar 440
Code Folding Ribbon 440
The Assistant Editor 441
Interface Builder 442
Instruments and Debugging 443
Building 445
Managing Schemes 447
Traps 448
Part V Appendixes
A Objective-C 455
The Basics 456
A Class Interface 457
A Class Implementation 458
Objective-C 2.0 and Cocoa. 460
Key-Value Coding 461
Memory Management 462
Attribute Accessors and Memory Management 463
Properties 464
Fast Enumeration 467
Foundation Data Types 468
Dynamic Dispatch 470
Objective-C++. 471
Summary 471
B Some Build Variables 473
Useful Build Variables 475
Environment 475
Build Targets 477
Source Locations 478
Destination Locations 478
Bundle Locations 479
Compiler Settings 480
Search Paths 481
Deployment 482
Info.plist 482
Source Trees 483
C Project and Target Templates 485
iOS Project Templates 487
Application 487
Framework & Library 488
Other 488
Mac OS X Project Templates 489
Application 489
Framework & Library 490
Application Plug-in 491
System Plug-in 492
Other 492
Target Templates 493
iOS File Templates 493
Cocoa Touch 493
C and C++. 494
Core Data. 495
Resource 495
Other 496
Mac OS X File Templates 496
Cocoa 496
C and C++. 496
User Interface 497
Core Data 497
Resource 497
Other 497
The File Template Library 497
D Resources 499
Books 499
On the Net 500
Forums 500
Mailing Lists 501
Developer Technical Support 501
Sites and Blogs 502
Face-to-Face 503
Meetings 503
Classes 503
Other Software. 504
Text Editors 504
Accessories 505
Index 507