Index

Symbols & Numerics

#pragma mark, 325

@ symbol, 36

_ (underscore character), 36

{} curly braces, 49

3.5-inch screens, previewing constraints, 144-145

A

about scene (CarValet project), creating, 263-264

about view, adding to universal CarValet app, 383-385

menu images, polishing, 385-387

abstracting out code, 84

accelerometer-simulator project (Google Code), 9

accessors, 49-50

dot notation, 53

Accounts pane (Xcode), 495-497

action selectors, implementing, 434-435

actions, 72-73, 484-485

adding to add/view scene (CarValet project), 74-77

IBAction identifier, adding to view controller, 112-115

ad hoc testing providers, 510

adapting cars table for iPad, 401-404

adding

cars to table (CarValet project), 287-288

color themes to navigation controllers, 264-267

German locale to CarValet project, 203-206

icons to asset catalog, 257-259

index to table views, 355-358

recognizers to DetailController, 446

references to constraints, 163-166

scroll view to edit scene (CarValet project), 231-234

search capability to tables, 361-369

sections, 347-349

add/view scene (CarValet project)

behaviors, adding, 72-77

actions, 72-77

outlets, 72-73

buttons, localizing, 195-197

car display behaviors, adding, 82-85

localization, 191-199

navigation controllers, 257

new cars, adding, 81-82

replacing with table view controller-based scene, 283-285

scroll view, adding, 227-230

toolbar

adding, 259-261

localization, 261-263

visual elements, adding

dividers, 71-72

labels, 68-70

allocating memory, 77-80

for objects, 38-39

animation, pulsing, 456-460

app ID, generating, 499

app listing

category, selecting, 516

creating, 513-520

description, adding, 517-518

details, adding, 515-520

EULA, 519

saving, 519-520

screenshots, 519

App Store, uploading apps to, 521-526

configuring the project, 521-522

setting up the project scheme, 522-523

Appearance protocol, 267

Apple iOS Developer Programs, 3

Apple Online Developer Program, 3

apps

bug reporting, 506-507

Core Data, preparing for use in, 323-325

designing, holistic goals, 66

launching in Instruments, 470

testing, 7-15, 479

tethering, 10

uploading to App Store, 521-526

Arabic internationalization, 215-223

Arabic strings, adding, 215-219

dates, formatting, 219-222

numbers, 219-222

text alignment, 222-223

ARC (Automatic Reference Counting), 31

arrows, using in toolbars, 263

asset catalog, adding icons, 257-259, 504-505

assigning blocks, 455-456

assistant editor preview mode, 145-148

atomicity of variables, 57-58

attaching recognizers to a view, 442

attributes of recognizers, 427

audio, differences among platforms, 16

audio system on iOS Simulator, 9

auto layout, 117-131

constraints, 120-131

Assistant editor preview mode, 145-148

bottom layout guides (IB), 176-178

changing for orientation, 162-163

completeness of specification, 133-134

content compression resistance, 150

content hugging, 150

creating, 122-123

dragging out, 130-131

intrinsic content size, 134

invisible container views, 137

previewing, 144-145

references, adding, 163-166

relationships, 120-122

top layout guides (IB), 176-178

values, changing, 128-130

issues popup (IB), 154-155

B

base initializer, CarValet project, 49

Base localization, 184

batteries, energy considerations for mobile app development, 13

behaviors

adding to add/view scene (CarValet project), 72-77

actions, 72-77

outlets, 72-74

car display behaviors, adding (CarValet project), 82-85

editor behaviors, adding to edit scene (CarValet project), 94-97

of table views, 277

blocks, 453

assigning, 455-456

calling, 454

declaring, 453-454

defining, 455-456

pulsing animation, adding, 456-460

replacing protocols with, 462-466

variables, 460-462

scoped variables, modifying, 462

writing, 455-460

Boolean type (Objective-C), 34

bottom layout guides (IB), 176-178

bounce scrolling, 227-230

adding to CarValet project scenes, 230

breakpoints, 483-484

exception breakpoints, 486

symbolic breakpoints, 485

bug reporting, 506-507

build number, 526

buttons

localizing in add/view scene (CarValet project), 195-197

Next Car button, adding to CarValet project, 86-89

Previous Car button, adding to CarValet project, 86-89

text color, changing, 266-267

Xcode

Editor buttons, 27

Run button, 26

C

calling

blocks, 454

functions in Objective-C, 32-35

camel case, 36

camera, differences among platforms, 16

canalys.com, 18

Car class, adding to CarValet project, 42-44

car detail controller, iPad-specific, 407-424

closing, 419-420

disabling car editing, 420-421

layout, 409-414

loading cars, 416-417

polishing, 418-419

popover behavior modifications, 421-424

preparing the picker, 414-416

saving cars, 417-418

car display behaviors, adding (CarValet project), 82-85

car image scene (CarValet project), scrolling, 240-249

paging, 243-244

rotation, handling, 248-249

scroll view, populating, 241-243

updating label with index of current car image, 249-250

zoom, adding, 245-248

car view cell, adding to table view controller (CarValet project), 285-287

cars table

adapting for iPad, 401-404

adding cars to, 287-288

converting for Core Data, 326-332

accessing data with managed property context, 327-328

adding and deleting cars, 328-329

adding managed property context, 326

switching to CDCar object class, 330

index, displaying year in, 357-358

removing cars from, 288-291

searching, 361-369

details for found car, displaying, 365-367

predicate, adding to fetched results controller, 362-365

updating, 306-307

user-initiated editing, 289-291

CarValet project. See also universal CarValet app, creating

about scene, 263-264

accessors, 49-50

add/view scene

behaviors, adding, 72-77

buttons, localizing, 195-197

navigation controllers, 257

new cars, adding, 81-82

replacing with table view controller-based scene, 283-285

scroll view, adding, 227-230

visual elements, adding, 67-72

Arabic internationalization, 215-223

Arabic strings, adding, 215-219

dates, formatting, 219-222

numbers, 219-222

text alignment, 222-223

base initializer, 49

Car class, adding, 42-44

cars

creating, 53-54

removing from table, 288-291

cars table

adding cars to, 287-288

displaying year in index, 357-358

updating, 306-307

user-initiated editing, 289-291

constraints

adjusting for screen height, 155

designing, 134-138

implementing, 141-144

New Car button, 151

top-level view constraints, 138-141

for Total Cars label, 151

view car area, 151-154

Core Data, adding CDCar model, 321-324

creating, 41-42

disclosure indicator, adding to car data cell, 291-292

edit scene, 89-106

resizing scroll view for keyboard, 234-240

scroll view, adding, 227-230

German internationalization, 203-215

formatting numbers, 213-215

German locale, adding, 203-206

label constraints, changing, 209-213

Localizable.strings, updating, 207-209

header file, 44-45

HybridCar class, 58-62

implementation file, 59-61

implementation file, 46-50

landscape orientation, 156-180

constraints, adding, 169-172

constraints, creating, 167-169

constraints, designing, 158-159

top-level view constraints, 159-162

localization, 189-202

add/view scene, 191-199

strings, 189-191

make and model edit scene

creating, 296-307

delegate, preparing, 300-303

transitions, 305-306

ViewCarProtocol, adding, 303-305

model year edit scene, 307-314

picker, implementing, 309-312

year edit protocol, adding, 312-314

year editor, setting up, 308-309

Next Car button, adding, 86-89

properties, 50-53

encapsulation, 51

qualifiers, 55-56

tab bar

adding, 270

car images, moving to, 271-272

dynamically updating items, 272-273

table view controller, adding car view cell, 285-287

view car scene

creating, 292-294

populating, 294-296

swipes, enabling support for, 428-438

categories, 324

caution icon (IB), 149

CDCar model, adding to CarValet project, 321-324

cells

car view cell, adding to table view controller (CarValet project), 285-287

creating, 279-281

custom cells, 341-345

populating, 345

visual elements, adding, 343-344

deletions, 289

index paths, 282

certificates, 494

changing

constraints

rotation, handling, 162-163, 172-176

values, 128-130

device language, 206-207

table views, groups, 349-355

Chisnall, David, 419

chitika.com, 18

Clair, Robert, 31

class clusters, 40

classes, 31, 35-41

#pragma mark, 325

camel case, 36

categories, 324

forward references, 95

implementation file, 35

defining, 37-38

inheritance, 39-40, 59-62

navigation controller classes, 256-257

NSCalendar, 189

NSDate, 189

NSDateComponents, 189

NSDateFormatter, 188

NSLayoutConstraint, 120

NSNumberFormatter, 188

NSTimeZone, 189

objects, creating, 38-39

prefixes, 24

reducing dependencies between, 332

singletons, 387

superclasses

initializing, 40

responding to open and closed keyboard, 237-239

UIGestureRecognizer, 427

ViewController class, modifying, 110-112

closed keyboard, responding to, 237-239

Cocoa Touch, 7

color themes, adding to navigation controllers, 264-267

comparing

iOS device platforms

audio, 16

camera, 16

Core Location, 17

Core Motion, 17

OpenGL ES, 18

processor speeds, 17-18

screen size, 15-16

telephony, 16-17

vibration support, 17

landscape and portrait orientation constraints, 161

VCL and full specification, 168

conferences, 528-529

configuring form views, 233-234

constants, gesture state constants, 440-441

constraints, 120-131. See also VCL (Visual Constraint Language)

Assistant editor preview mode, 145-148

bottom layout guides (IB), 176-178

completeness of specification, 133-134

content compression resistance, 150

content hugging, 150

creating, 122

in IB, 122-123

designing for CarValet project

adjusting for screen height, 155

edit scene, 155-156

landscape orientation, 156-180

New Car button, 151

portrait orientation, 134-138

top-level view constraints, 138-141, 159-162

Total Cars label, 151

view car area, 151-154

dragging out, 130-131

generating from strings, 170-172

intrinsic content size, 134

invisible container views, 137

landscape orientation

comparing with portrait orientation, 161

creating, 167-169

top-level view constraints, 159-162

troubleshooting, 178-180

portrait orientation, 131-132

previewing, 144-145

references, adding, 163-166

relationships, 120-122

for scroll views, 235

top layout guides (IB), 176-178

troubleshooting, 149-150

auto layout issues popup, 154-155

values, changing, 128-130

containers, invisible container views, 137

content compression resistance, 150

content hugging, 150

content views, 233-232

Continuous Flow state (recognizers), 439

controller layer (MVC), 318

converting

cars table for Core Data, 326-332

accessing data with managed property context, 327-328

adding and deleting cars, 328-329

adding managed property context, 326

switching to CDCar object class, 330

between coordinate spaces, 236-237

coordinate spaces, converting between, 236-237

Core Data, 317-320

CDCar model, adding to CarValet project, 321-324

classes, 319

converting cars table for use, 326-332

accessing data with managed property context, 327-328

adding and deleting cars, 328-329

adding managed property context, 326

switching to CDCar object class, 330

entities, 319

fetched results controller, 332-339

NSFetchedResultsController, integrating, 333-335

NSFetchedResultsController-Delegate, implementing, 336-339

initializing for use, 323-325

managed objects, 319-320

stores, 319

Core Location, differences among platforms, 17

Core Motion, differences among platforms, 17

CoreData framework, adding to projects, 320-321

count-based labels, 87-88

Cox, Brad J., 31

creating

app listing, 513-520

details, adding, 515-520

cars for CarValet project, 53-54

cells, 279-281

constraints, 122

in IB, 122-123

landscape orientation, 167-169

distribution provisioning profile, 501-503

format strings, 88-89

Hello World project, 21-25

objects, 38-39

outlets, 73-74

return gesture recognizer, 442-447

table views

cells, 279-281

sections, 281-283

universal CarValet app, 374-382

about view, adding, 382-387

app section navigation, adding, 379-382

car images view controller, adding, 397-400

Cars tab, adding, 400-424

menu, accessing in portrait, 387-396

split view controller, adding, 376-379

custom cells, 341-345

populating, 345

visual elements, adding, 343-344

custom getters, 56-58

custom recognizers, 441-442

return gesture recognizer

creating, 442-447

return gesture recognizer, creating, 442-447

custom setters, 56-58

D

data access, designing for mobile apps, 11-12

date formats, 187-189

david-smith.org, 18

debugger (iOS SDK), 7, 479-486

actions, 484-485

breakpoints, 483-484

EXC_BAD_ACCESS errors, troubleshooting, 489-491

gauges, 481-482

process view, 480

variables view, 480-481

debugging strokes, 447

declaring

blocks, 453-454

methods, 36-37

properties, 50

defaults, 79

defining

blocks, 455-456

implementation file, 37-38

delegates, 46

make and model edit scene (CarValet project), preparing for, 300-303

protocols, 107-112

deleting

cell data, 289

sections, 347-349

description, adding to app listing, 517-518

designing for mobile apps

application considerations, 13-14

constraints, 132-133

data access considerations, 11-12

energy considerations, 13

holistic goals, 66

interaction considerations, 12-13

memory considerations, 12

storage considerations, 11

use behavior considerations, 14-15

detail view controller, 372

DetailController

adding recognizers to, 446

implementing in universal CarValet project, 388-396

consolidating code, 393-396

singleton, setting up, 391-393

UISplitViewControllerDelegate, adding, 389-391

Developer Enterprise Program, 4-5

Developer University Program, 5

development certificate, generating, 495-497

devices

adding to provisioning profile, 497-498

language, changing, 206-207

dimensions, resizing. See auto layout

disabling

car editing, 420-421

recognizers, 438

disclosure indicator, adding to car data cell, 291-292

displaying

section headers, 346-347

year in cars table index, 357-358

distribution provisioning profile, 497-498

creating, 501-503

dividers, adding to add/view scene (CarValet project), 71-72

documentation, iOS Human Interface Guidelines, 494-495

dot notation, 51-53

double strings, faking localization with, 193-195

drag gesture recognizers, 448-450

dragging out constraints, 130-131

dynamically updating tab bar items, 272-273

E

edit scene (CarValet project), 89-106

constraints, 155-156

editor behaviors, adding, 94-97

localization, 200-202

scroll view

adding, 230-240

resizing for keyboard, 234-240

scroll view, adding, 227-234

visual elements, adding, 91

editing CarValet project header file, 44-45

editor behaviors, adding to edit scene (CarValet project), 94-97

Editor buttons (Xcode), 27

enabling support for swipe gestures, 428-438

encapsulation, 51

protocols, 107-108

entities (Core Data), 319

enumerated types, 303

EULA (end user license agreement), 519

event aggregators, 529

EXC_BAD_ACCESS errors, troubleshooting, 486-491

with debugger, 489-491

with Zombies Instrument template, 486-489

exception breakpoints, 486

exchanging data with protocols, 108-112

F

faking localization with double strings, 193-195

fetched results controller, 332-339

NSFetchedResultsController, integrating, 333-335

NSFetchedResultsControllerDelegate, implementing, 336-339

predicate, adding, 362-365

section headers, displaying, 346-347

finding icons, 259

flurry.com, 18

form view, configuring for scroll view, 233-234

format strings, 88-89

forward references, 95

frames, 235-239

functional testing, 509-510

functions, calling in Objective-C, 32-35

G

gartner.com, 18

gathering metrics, 508-509

gauges (debugger), 481-482

generating

app ID, 499

constraints from strings, 170-172

development certificate, 495-497

German internationalization, 203-215

formatting numbers, 213-215

German locale, adding, 203-206

label constraints, changing, 209-213

Localizable.strings, updating, 207-209

gestures, 427

dragging, 448-450

iPhone action selectors, enabling, 434-435

recognizers

adding to DetailController, 446

attaching to a view, 442

attributes, 427

custom recognizers, 441-442

disabling, 438

responding to, 446-447

states, 439-441

strokes, debugging, 447

swipes, enabling support for, 428-438

target/action pairs, 428

getter methods, 36, 56-58

Google Code, accelerometer-simulator project, 9

groups, 345

changing, 349-355

H

header files, 35

CarValet project, 44-45

Hello World project

creating, 21-25

labeling, 28-30

hierarchies of content, 254-255

leaf nodes, 254

root scene, 255

holistic goals for app design, 66

hooking scenes together, 98-105

prepareForSegue:sender method, 103-105

transitions, 102-103

HybridCar class

creating for CarValet project, 58-62

implementation file, 59-61

I

IB (Interface Builder), 6

bottom layout guides, 176-178

constraints

creating, 122-123

troubleshooting, 149-150

Size inspector, 150-151

toolbar

auto layout issues popup, 154-155

constraints, adding, 126-127

pin popup, 127-128

top layout guides, 176-178

IBAction identifier, 72-73

adding to view controller, 112-115

IBOutlet identifier, 72-73

ibtool, localizing storyboard strings with, 198

icons

adding to asset catalog, 257-259, 504-505

caution icon (IB), 149

magnifying glass, adding to indexes, 367-369

sizes, 503-504

sources of, 259

idc.com, 18

identifying constraint issues, 149-150

implementation file, 35

CarValet project, 46-50

defining, 37-38

dot notation, 52-53

encapsulation, 51

for HybridCar class, 59-61

implementing

constraints for CarValet project, 141-144

picker for model year edit scene (CarValet project), 309-312

index paths, 282

indexes

cars table, displaying year in, 357-358

magnifying glass, adding, 367-369

properties, 356

inheritance, 39-40, 59-62

initializing

Core Data, 323-325

superclasses, 40

installing Xcode, 1-2

instance variables, properties, 50-53

Instruments, 469-479

EXC_BAD_ACCESS errors, troubleshooting with Zombies template, 486-489

fixing problems with, 476-478

launching apps in, 470

prefetching, 476-477

problem isolation, 474-476

templates, 471

Time Profiler, 472-478

tree mining, 475-476

integrating NSFetchedResultsController, 333-335

integration testing, 510-512

interaction, designing for mobile apps, 12-13

interface, Xcode, 25-27

Editor buttons, 27

Navigator, 27

Run button, 26

status area, 26

utilities area, 27

internationalization, 189

Arabic internationalization, 215-223

Arabic strings, adding, 215-219

dates, formatting, 219-222

numbers, 219-222

text alignment, 222-223

German internationalization, 203-215

label constraints, changing, 209-213

localizable.strings, updating, 207-209

intrinsic content size, 134

invisible container views, 137

iOS Developer Programs, 3

Developer Enterprise Program, 4-5

Developer University Program, 5

registration, 5

standard iOS Developer Program, 4

iOS Human Interface Guidelines, 7, 494-495

iOS SDK, 2-7

iOS Simulator, 6

limitations of, 8-10

audio system, 9

keychain security, 9

localization, 9

testing apps, 7-15

Video Out emulation, 10

iPad

returning to default state with custom recognizer, 442-447

universal CarValet app, creating, 374-382

about view, adding, 382-387

app section navigation, adding, 379-382

car images view controller, adding, 397-400

Cars tab, adding, 400-424

menu, accessing in portrait, 387-396

split view controller, adding, 376-379

iPhone action selectors, enabling, 434-435

iSimulate, 9

ISO 639.2 standard, 185

isolating problems with Instruments, 474-476

J-K

Jobs, Steve, 31

keyboard

handling for scroll views, 234-240

support on iOS devices, 12

keywords, @ symbol, 36

KVC (Key Value Coding), 419

L

labeling

add/view scene (CarValet project), 68-70

count-based labels, 87-88

Xcode projects, 28-30

landscape orientation

CarValet project, 156-180

constraints, designing, 158-159

constraints

adding to CarValet project, 169-172

comparing with portrait orientation, 161

creating, 167-169

troubleshooting, 178-180

VCL, 166-168

language support. See localization

launch images, 505-506

launching apps in Instruments, 470

leaf nodes in hierarchies of content, 254

limitations of iOS Simulator, 8-10

audio system, 9

keychain security, 9

literals, 31

localization. See also internationalization

Base, 184

CarValet project, 189-202

add/view scene, 191-199

edit scene, 200-202

strings, 189-191

faking with double strings, 193-195

formats, 187-189

on iOS Simulator, 9

ISO 639.2 standard, 185

language preferences, setting, 183-184

redirection, 184-187

string tables, 186-187

toolbars, 261-263

version control, 192

via formats, 187-189

M

Macintosh Developer Program, 4

macosrumors.com, 18

macros, localed string macros, 202

macworld.com, 18

magnifying glass, adding to indexes, 367-369

MainMenuViewController, creating for universal CarValet app, 383-385

make and model edit scene (CarValet project)

creating, 296-307

delegate, preparing, 300-303

MakeModelEditViewController class, 297-300

transitions, 305-306

ViewCarProtocol, adding, 303-305

MakeModelEditViewController class, 297-300

managed objects, 319-320

managing memory, 77-80

marketing, 511-513

interest, 513

open-source projects, 511

master view controller, 372

memory

allocating for objects, 38-39

leaks, 79-80

managing, 77-80

mobile apps, designing for, 12

message-based navigation, 263-264

messages

protocols, 46

sending, 47

sending with Objective-C, 32-35

methods, 33

accessor methods, 49-50

dot notation, 53

camel case, 36

declaring, 36-37

inheritance, 39-40

parameters, 34-35, 45

prepareForSegue:sender method, 103-105

metrics gathering, 508-509

mobile apps, designing for

application considerations, 13-14

constraints, 132-133

data access considerations, 11-12

energy considerations, 13

interaction considerations, 12-13

memory considerations, 12

storage considerations, 11

use behavior considerations, 14-15

modal presentation, 275

model layer (MVC), 318

model year edit scene (CarValet project), 307-314

picker, implementing, 309-312

year edit protocol, adding, 312-314

year editor, setting up, 308-309

modifying

scoped variables of blocks, 462

ViewController class, 110-112

moving car images to tab bar, 271-272

multiple string tables for localization, 202

multitasking, 13-14

MVC (Model-View-Controller), 318

controller layer, 318

model layer, 318

view layer, 318

N

navigation controllers, 253-267

color themes, adding, 264-267

dynamically updating items, 272-273

hierarchies of content, 254-255

leaf nodes, 254

message-based navigation, 263-264

tab bar controller, 267-273

adding to CarValet project, 270

car images, moving to, 271-272

toolbars, 257-263

arrows, 263

populating, 259-261

UINavigationController, 256

Navigator (Xcode), 27

NDA (non-disclosure agreement), 8

new cars, adding to table (CarValet project), 287-288

NeXT, 31

Next Car button, adding to CarValet project, 86-89

nonatomic properties, 57-58

nonretina icon sizes, 503-504

notifications, 14

responding to open and closed keyboard, 237-239

NSCalendar class, 189

NSDate class, 189

NSDateComponents class, 189

NSDateFormatter class, 188

NSFetchedResultsController, 332-339

integrating, 333-335

NSFetchedResultsControllerDelegate, implementing, 336-339

NSIndexPath object, 282

NSLayoutConstraint class, 120

NSManagedObjectContext class, 319

NSManagedObjectModel class, 319

NSNumberFormatter class, 188

NSPersistentStoreCoordinator class, 319

NSTimeZone class, 189

numbers

Arabic internationalization, 219-222

formats, 187-189

German internationalization, 213-215

O

Objective-C, 30-41

@ symbol, 36

Boolean type, 34

camel case, 36

classes, 35-41

implementation file, 35

functions, calling, 32-35

implementation file, defining, 37-38

messages, sending, 32-35

methods, 33

declaring, 36-37

inheritance, 39-40

parameters, 34-35

objects, 35-41

pointing to, 40-41

selector, 47

underscore character (_), 36

object-oriented programming, 31

objects, 31, 35-41

creating, 38-39

defaults, 79

delegates, 46

dot notation, 51-53

managed objects, 319-320

memory, allocating, 38-39

NSIndexPath, 282

pointing to, 40-41

targets, 428

observers, responding to open and closed keyboard, 237-239

open keyboard, responding to, 237-239

OpenGL ES, differences among platforms, 18

opening XIB files, 263-264

orientation. See also portrait orientation, constraints; landscape orientation

constraints, changing to handle rotation, 162-163

rotation

constraints, changing to handle rotation, 172-176

scroll views, handling, 248-249

outlets, 72-73

creating, 73-74

P

paging, 240-241, 243-244

parameters of methods, 34-35, 45

performance, metrics gathering, 508-509

performance tools (iOS SDK), 6

persistence, Core Data, 318-320

CDCar model, adding to CarValet project, 321-324

converting cars table for use, 326-332

entities, 319

fetched results controller, 332-339

managed objects, 319-320

stores, 319

pickers, 308

implementing for model year edit scene, 309-312

pin popup (IB), 127-128

pixels, 120

platforms (iOS devices)

differences in

audio, 16

camera, 16

Core Location, 17

Core Motion, 17

OpenGL ES, 18

processor speeds, 17-18

screen size, 15-16

telephony, 16-17

vibration support, 17

versions of iOS, 18-19

Plausible Crash Reporter project, 506

pointing to classes, 40-41

points, 120

populating

custom cells, 345

scroll views, 241-243

toolbars, 259-261

view car scene (CarValet project), 294-296

popups (IB)

auto layout issues popup, 154-155

creating constraints, 126-128

portrait orientation, constraints, 131-132

designing for CarValet project, 134-141

implementing for CarValet project, 141-144

previewing, 144-145

postlaunch activities, 525

predefined cells, creating (TableTry project), 279

predicate, adding to fetched results controller, 362-365

prefetching, 476-477

prefixes, 24

prelaunch activities

bug reporting, 506-507

marketing, 511-513

interest, 513

open-source projects, 511

metrics gathering, 508-509

QA testing, 509-512

functional testing, 509-510

integration testing, 510-512

unit testing, 509-510

prepareForSegue:sender method, 103-105

preparing

Core Data for apps, 323-325

make and model edit scene (CarValet project) for delegate, 300-303

previewing constraints, 144-145

Previous Car button, adding to CarValet project, 86-89

printing cars for CarValet project, 53-54

privacy laws, 509

private keys, 494

process view (debugger), 480

processor speeds, differences among platforms, 17-18

Project Editor, 6

projects

CarValet. See CarValet project

localization, 184-185

TableTry, 277-283

universal projects, creating, 374-382

Xcode

creating, 21-25

labeling, 28-30

options, 23-25

properties, 50-53

declaring, 50

dot notation, 51-53

encapsulation, 51

qualifiers, 55-56

read-only, 55-56

setters, 56-58

of table indexes, 356

variables

atomicity, 57-58

temporary, 78

protocols, 46, 107-112

Appearance protocol, 267

encapsulation, 107-108

exchanging data with, 108-112

replacing with blocks, 462-466

reusability, 107

ViewController class, modifying, 110-112

year edit protocol, adding to model year edit scene, 312-314

provisioning profile, adding devices to, 497-498

public keys, 494

pulsing animation, adding, 456-460

Push notifications, 14

Q

QA (quality assurance) testing, 509-512

integration testing, 510-512

unit testing, 509-510

qualifiers, 55-56

memory-related, 78

R

read-only properties, 55-56

recognizers, 427-428

adding to DetailController, 446

attaching to a view, 442

attributes, 427

custom recognizers, 441-442

return gesture recognizer, creating, 442-447

disabling, 438

drag gesture recognizers, 448-450

responding to, 446-447

states, 439-441

redirection

Base localization, 184

ISO 639.2 standard, 185

project-level localization, 184-185

string tables, 186-187

reducing dependencies between classes, 332

references, adding to changing constraints, 163-166

registering for iOS Developer Programs, 5

removing

cars from table (CarValet project), 288-291

sections, 347-349

replacing

add/view scene (CarValet project) with table view controller-based scene, 283-285

protocols with blocks, 462-466

reporting bugs, 506-507

resizing

dimensions. See auto layout

keyboard for scroll views, 234-240

scroll views, 239-240

resources

books, 525-527

conferences, 528-529

social media, 529-530

websites, 527-528

responding

to open and closed keyboard, 237-239

to recognizers, 446-447

retain cycles, 79-80

retina, 120

icon sizes, 503-504

return gesture recognizer

creating, 442-447

return gesture recognizer, creating, 442-447

reusability of protocols, 107

right-to-left languages, internationalization, 215-223

Roadley, Tim, 318

root views, 255

tabs, 268-273

rotation

constraints, changing for orientation, 162-163, 172-176

scroll views, handling, 248-249

rows, creating, 281-282

Run button (Xcode), 26

S

Sadun, Erica, 456

saving app listing, 519-520

scenes, 66-67

about scene (CarValet project), 263-264

add/view scene (CarValet project)

behaviors, adding, 72-77

buttons, localizing, 195-197

car display behaviors, adding, 82-85

dividers, 71-72

labels, 68-70

localization, 191-199

new cars, adding, 81-82

replacing with table view controller-based scene, 283-285

scroll view, adding, 227-230

toolbar, adding, 259-261

car image scene (CarValet project), scrolling, 240-249

edit scene (CarValet project), 89-106

constraints, 155-156

localization, 200-202

scroll view, adding, 227-234

hooking together, 98-105

prepareForSegue:sender method, 103-105

transitions, 102-103

make and model edit scene (CarValet project)

creating, 296-307

delegate, preparing, 300-303

transitions, 305-306

ViewCarProtocol, adding, 303-305

model year edit scene (CarValet project), 307-314

picker, implementing, 309-312

year edit protocol, adding, 312-314

year editor, setting up, 308-309

view car scene (CarValet project)

creating, 292-294

populating, 294-296

scoped variables, modifying, 462

screen size

auto layout, 117-131. See also auto layout

differences among platforms, 15-16

intrinsic content size, 134

standard distance, 119

toggling (view controllers), 145

screens, 65

screenshots, providing for app listing, 519

scroll views

adding

to add/view scene (CarValet project), 227-230

to edit scene (CarValet project), 227-234

constraints, 235

form view, configuring, 233-234

paging, 240-241, 243-244

populating, 241-243

resizing, 239-240

for keyboard, 234-240

rotation, handling, 248-249

zooming content, 226, 245-248

scrolling, bounce scrolling, 227-230

SDKs

iOS Developer Programs, 3

Developer Enterprise Program, 4-5

Developer University Program, 5

Macintosh Developer Program, 4

registration, 5

standard iOS Developer Program, 4

iOS SDK, tools, 6-7

searching table views, 358-369

index, adding, 367-369

predicate, adding to fetched results controller, 362-365

sections, 346-349

adding and deleting, 347-349

creating, 282-283

in tables, 281-282

groups, changing, 349-355

index paths, 282

segues, 103-106

selecting category for your app, 516

selectors, 47

iPhone action selectors, enabling, 434-435

responding to open and closed keyboard, 237-239

self-configuring content views, 233-232

sending messages, 47

with Objective-C, 32-35

setter methods, 36, 56-58

setting language preferences, 183-184

simulator, changing device language, 206-207

singletons, 387

DetailController singleton, implementing, 388-396

Size Inspector, 150-151

sizes of icons, 503-504

Smalltalk, 31

Smith, David, 18

sorting, 345

sources of icons, 259

split view controller, 372-374

detail view controller, 374

master view controller, 373

universal CarValet app, creating

car detail controller, 407-424

car images view controller, adding, 397-400

DetailController singleton, implementing, 388-396

standard distance, 119

standard iOS Developer Program, 4, 59-61

status area (Xcode), 26

storage

Core Data, 317-320

CDCar model, adding to CarValet project, 321-324

classes, 319

converting cars table for use, 326-332

entities, 319

fetched results controller, 332-339

managed objects, 319-320

mobile apps, designing for, 11

stores (Core Data), 319

storyboards, 65-67

auto layout, 124-126

scenes, 66-67

edit scene (CarValet project), 89-106

hooking together, 98-105

transitions, 102-103

screens, 65

strings, localizing with ibtool, 198

string tables

localization, 186-187

multiple string tables, 202

strings

Arabic strings, adding for internationalization, 215-219

format strings, 88-89

generating constraints from, 170-172

localization

CarValet project, 189-191

faking localization with double strings, 193-195

storyboard strings, localizing with ibtool, 198

VCL, 166-167

strokes, debugging, 447

strong qualifier, 78

subclasses, inheritance, 39-40, 59-62

subscripting, 31

superclasses, 40

initializing, 40

responding to open and closed keyboard, 237-239

swipes, 428-438

iPhone action selectors, enabling, 434-435

recognizers

custom recognizers, 441-442

disabling, 438

states, 439-441

symbolic breakpoints, 485

syntax

methods, 36-37

Objective-C methods, 32-35

T

tab bar controller, 267-273

adding to CarValet project, 270

car images, moving to tab bar, 271-272

dynamically updating items, 272-273

table view controllers, adding car view cell, 285-287

table views, 275-277, 282-283

behaviors, 277

CarValet project

new cars, adding, 287-288

removing cars from, 288-291

user-initiated editing, 289-291

cells

creating, 279-281

deleting, 289

custom cells, 341-345

populating, 345

visual elements, adding, 343-344

groups, 345

changing, 349-355

index paths, 282

indexes

adding, 355-358

properties, 356

rows, creating, 281-282

searching, 358-369

index, adding, 367-369

predicate, adding to fetched results controller, 362-365

sections, 346-349

adding and deleting, 347-349

creating, 281-283

sorting, 345

updating, 306-307

TableTry project, 277-283

cells, creating, 279-281

index paths, 282

predefined cells, creating, 279

rows, creating, 281-282

sections, creating, 281-283

target audience for iOS Developer Programs, 3

targets, 428

telephony, differences among platforms, 16-17

templates (Instruments), Time Profiler, 472-478

temporary variables, 78

ternary operators, 83

testing

apps, 479

tethering, 10

apps with iOS Simulator, 7-15

functional testing, 509-510

unit testing, 509-510

tethering, 10

text alignment, Arabic internationalization, 222-223

text color of buttons, changing, 266-267

text fields, adding to edit scene (CarValet project), 91

third-party bug reporting services, 507

Time Profiler template (Instruments), 472-478

problem isolation, 474-476

toggling between screen sizes (view controllers), 145

toolbar (IB)

auto layout issues popup, 154-155

constraints, adding, 126-127

pin popup, 127-128

toolbars, 257-263

arrows, 263

color themes, 264-267

localization, 261-263

populating, 259-261

top layout guides (IB), 176-178

top-level view constraints (CarValet project)

landscape orientation, 159-162

portrait orientation, 138-141

touchscreen interaction, designing for mobile apps, 12-13

transitions, 102-103

adding to view cars scene (CarValet project), 305-306

tree mining, 475-476

troubleshooting

constraints, 149-150

auto layout issues popup, 154-155

landscape orientation, 178-180

EXC_BAD_ACCESS errors, 486-491

with debugger, 489-491

with Zombies Instrument template, 486-489

with Instruments, 474-476

search code, 361

tuaw.com, 18

U

UI (user interface), Xcode, 25-27

Editor buttons, 27

Navigator, 27

Run button, 26

status area, 26

utilities area, 27

UIBarButton class, 256

UIGestureRecognizer class, 427

UILabel, 82

UINavigationBar class, 256

UINavigationController, 253, 256

hierarchies of content, 254-255

UINavigationItem class, 256

UIPickerView, 307

UIScrollView, 225-226, 240-250

paging, 243-244

zooming, 245-248

UISplitViewController, 371

UITabBar class, 269

UITabBarController, 253, 268-273

UITabBarItem class, 269

UITextField, 91

UIToolBar class, 256

underscore character (_), 36

unit testing, 509-510

universal apps, 374-382

universal CarValet app, creating

about view, adding, 382-387

MainMenuViewController, creating, 383-385

menu images, polishing, 385-387

app section navigation, adding, 379-382

car detail controller, 404-406

iPad-specific, 407-424

car images view controller, adding, 397-400

Cars tab, adding, 400-424

car table, adapting to iPad, 401-404

menu, accessing in portrait, 387-396

DetailController singleton, implementing, 388-396

split view controller, adding, 376-379

updating

form views, 233-234

labels of car image scene, 249-250

Localizable.strings, 207-209

tab bar items, 272-273

table views, 306-307

uploading apps to App Store, 521-526

configuring the project, 521-522

setting up the project scheme, 522-523

user-initiated editing (cars table), 289-291

utilities

ibtool, localizing storyboard strings with, 198

Instruments, 469-479

utilities area (Xcode), 27

V

variables, 31

atomicity, 57-58

block access to, 460-462

properties, 50-53

temporary, 78

variables view (debugger), 480-481

VCL (Visual Constraint Language), 166-168

versus full specification, 168

strings, 166-167

version control, 192

versions of iOS, 18-19

vibration, support for in iOS devices, 17

Video Out emulation (iOS Simulator), 10

videos, WWDC, 5

view car area (CarValet project), constraints, 151-154

view car scene (CarValet project)

creating, 292-294

populating, 294-296

swipes, enabling support for, 428-438

view controllers

IBAction identifier, adding, 112-115

responding to open and closed keyboard, 237-239

scenes, 66-67

ViewController class, modifying, 110-112

view layer (MVC), 318

ViewCarProtocol, adding to make and model edit scene (CarValet project), 303-305

views

attaching recognizers to, 442

constraints, 120-131

Assistant editor preview mode, 145-148

bottom layout guides (IB), 176-178

changing for orientation, 162-163

completeness of specification, 133-134

content compression resistance, 150

creating, 122-123

dragging out, 130-131

intrinsic content size, 134

previewing, 144-145

references, adding, 163-166

relationships, 120-122

top layout guides (IB), 176-178

values, changing, 128-130

content views, 233-232

frames, 235-239

invisible container views, 137

root view, 255

screen sizes, toggling, 145

scroll views

adding to add/view scene (CarValet project), 227-230

adding to edit scene (CarValet project), 227-230

constraints, 235

paging, 240-241, 243-244

populating, 241-243

resizing, 239-240

zooming content, 226, 245-248

table views

behaviors, 277

groups, 345

index, adding, 355-358

searching, 358-369

sections, 346-349

sorting, 345

updating, 306-307

UIPickerView, 307

UIScrollView, 225-226

visual elements

adding

to custom cells, 343-344

to edit scene (CarValet project), 91

add/view scene (CarValet project)

dividers, 71-72

labels, 68-70

W

Wain, Joseph, 259

weak qualifier, 78

websites, 527-528

canalys.com, 18

chitika.com, 18

flurry.com, 18

gartner.com, 18

glyphish.com, 259

idc.com, 18

macosrumors.com, 18

macworld.com, 18

Plausible Crash Reporter project, 506

tuaw.com, 18

workspaces, 21

writing blocks, 455-460

WWDC (World Wide Development Conference) videos, 5

X

Xcode

Accounts pane, 495-497

debugger, 7

Hello World project

creating, 21-25

IB, 6

bottom layout guides, 176-178

constraints, creating, 122-123

top layout guides, 176-178

installing, 1-2

interface, 25-27

Editor buttons, 27

Navigator, 27

Run button, 26

status area, 26

utilities area, 27

iOS Simulator, 6

limitations of, 8-10

localization, 9

testing apps, 7-15

Video Out emulation (iOS Simulator), 10

performance tools, 6

Project Editor, 6

projects, labeling, 28-30

workspaces, 21

XIB files, opening, 263-264

Y-Z

year editor, setting up for model year edit scene, 308-309

Zombies template (Instruments), troubleshooting EXC_BAD_ACCESS errors, 486-489

zooming content with scroll views, 226, 245-248