Contents at a Glance |
|
iv | |
Contents |
|
v | |
Foreword |
|
xi | |
About the Technical Reviewer |
|
xii | |
Preface |
|
xiii | |
|
|
1 | (36) |
|
Everything You Ever Wanted to Know About Practicle Systems |
|
|
3 | (34) |
|
Adding Life to Your Game with Particles |
|
|
5 | (2) |
|
Basic Particle Systems and You |
|
|
7 | (14) |
|
Overview of the Sample Code |
|
|
8 | (1) |
|
|
9 | (1) |
|
The Anatomy of a Particle System |
|
|
10 | (2) |
|
|
12 | (3) |
|
Slight Tangent About Degenerates |
|
|
15 | (1) |
|
|
16 | (3) |
|
Random Numbers and Initial Conditions |
|
|
19 | (1) |
|
|
20 | (1) |
|
Tweaking Your Particle System |
|
|
21 | (7) |
|
May the Force Be with Your Particles |
|
|
25 | (3) |
|
Amazing Technicolor Dream Particle |
|
|
28 | (7) |
|
Off on a Tangent: Lerping |
|
|
28 | (2) |
|
|
30 | (5) |
|
|
35 | (2) |
|
|
37 | (26) |
|
Chess on the `Net: Correspondence Gaming with Deep Green |
|
|
39 | (24) |
|
Deep Green, an Already Awesome Application |
|
|
40 | (2) |
|
|
42 | (2) |
|
Inviting a Friend to a Game |
|
|
43 | (1) |
|
|
43 | (1) |
|
|
43 | (1) |
|
|
43 | (1) |
|
|
44 | (1) |
|
Stop Talking, Start Coding! |
|
|
45 | (16) |
|
|
45 | (2) |
|
|
47 | (7) |
|
Accepting the Challenge on the Device |
|
|
54 | (3) |
|
|
57 | (4) |
|
|
61 | (2) |
|
|
63 | (36) |
|
Audio Streaming: An Exploration into Core Audio |
|
|
65 | (34) |
|
Hey, I Could Write an App to Play Music |
|
|
66 | (1) |
|
MPMoviePlayerController: Hey, This Is Easy! Right? |
|
|
66 | (2) |
|
Finding a Better Approach |
|
|
68 | (6) |
|
|
69 | (1) |
|
AVAudioPlayer: The Not-Available-in-Beta Way |
|
|
69 | (5) |
|
Doing It the Cowboy Way with Core Audio |
|
|
74 | (19) |
|
Getting Halfway There: Audio Queue Services |
|
|
74 | (7) |
|
Getting the Rest of the Way There: Audio File Stream Services |
|
|
81 | (12) |
|
Putting It All into an App |
|
|
93 | (3) |
|
|
93 | (3) |
|
|
96 | (1) |
|
iPhone 3.0 and Further Work |
|
|
96 | (1) |
|
|
97 | (2) |
|
|
99 | (40) |
|
You Go Squish Now! Debugging on the iPhone |
|
|
101 | (38) |
|
|
102 | (2) |
|
|
104 | (1) |
|
While You're Writing That Code |
|
|
105 | (4) |
|
|
105 | (2) |
|
|
107 | (1) |
|
|
108 | (1) |
|
|
109 | (3) |
|
Getting a Crash Log from Your Testers |
|
|
109 | (1) |
|
You Have Been Saving Your dSYM Files, Right? |
|
|
110 | (1) |
|
Symbolicating a Crash Log |
|
|
110 | (1) |
|
|
111 | (1) |
|
|
112 | (1) |
|
|
112 | (1) |
|
|
113 | (1) |
|
|
113 | (1) |
|
The Scientific Method of Debugging |
|
|
113 | (2) |
|
|
113 | (1) |
|
Creating a Test for Your Hypothesis |
|
|
114 | (1) |
|
Proving or Disproving Your Hypothesis |
|
|
115 | (1) |
|
Increasing the Probability of the Crash |
|
|
115 | (1) |
|
Go, You Have a Call Stack |
|
|
115 | (22) |
|
|
115 | (3) |
|
|
118 | (4) |
|
|
122 | (1) |
|
Tools to Detect Memory Problems |
|
|
123 | (8) |
|
|
131 | (4) |
|
|
135 | (2) |
|
|
137 | (2) |
|
|
139 | (42) |
|
Building Data-Driven Applications with Active Record and SQLite |
|
|
141 | (40) |
|
A Short Road Off a High Cliff (How I Got Here) |
|
|
141 | (1) |
|
Ready! Set! Wait, What? (Why I Decided to Write a To-Do Application) |
|
|
142 | (1) |
|
Data-Driven Applications on the iPhone |
|
|
143 | (1) |
|
Active Record: A Simple Way of Accessing Data |
|
|
144 | (1) |
|
Writing a Database Wrapper Around the C API: ISDatabase |
|
|
144 | (14) |
|
Setting Up the Example Project |
|
|
145 | (3) |
|
Creating and Initializing the Database |
|
|
148 | (1) |
|
Opening a Database Connection |
|
|
149 | (3) |
|
|
152 | (6) |
|
|
158 | (6) |
|
Preventing Duplicate Create Statements |
|
|
158 | (2) |
|
|
160 | (2) |
|
|
162 | (1) |
|
Grouping Statements into Transactions |
|
|
163 | (1) |
|
Writing a Simple Active Record Layer: ISModel |
|
|
164 | (12) |
|
Maintaining the Database Connection |
|
|
165 | (1) |
|
The Model Object: Grocery Item |
|
|
165 | (1) |
|
|
166 | (2) |
|
|
168 | (2) |
|
|
170 | (1) |
|
|
170 | (1) |
|
|
171 | (3) |
|
|
174 | (2) |
|
Simple Migration Handling |
|
|
176 | (3) |
|
Alternative Implementations |
|
|
179 | (1) |
|
|
180 | (1) |
|
|
181 | (28) |
|
Core Data and Hard-Core Design |
|
|
183 | (26) |
|
Where Did Core Data Come From? |
|
|
184 | (1) |
|
|
184 | (1) |
|
A Very First Core Data App |
|
|
185 | (9) |
|
First, Steal Code (Not Music!) |
|
|
186 | (1) |
|
A View to an Object, Any Object |
|
|
187 | (6) |
|
Our Very First Crash, or Perhaps Not! |
|
|
193 | (1) |
|
CoreData Tutorial for iPhone OS: Managing Model Migrations |
|
|
194 | (5) |
|
The Easy Migrations Are Easy |
|
|
194 | (3) |
|
|
197 | (2) |
|
Using Key-Value Coding to Create a Reusable Object |
|
|
199 | (4) |
|
Remote Databases: It's All Net! |
|
|
203 | (3) |
|
|
206 | (3) |
|
|
209 | (38) |
|
Mart In-Application E-mail with Core Data and Three20 |
|
|
211 | (36) |
|
Planning a Simple Offline SMTP Client |
|
|
212 | (1) |
|
Creating the User Interface |
|
|
213 | (5) |
|
|
213 | (2) |
|
Setting Up Instance Variables in OfflineMailerAppDelegate.h |
|
|
215 | (2) |
|
Initializing the UIApplication Delegate |
|
|
217 | (1) |
|
|
218 | (6) |
|
Understanding the Core Data Stack |
|
|
221 | (1) |
|
|
221 | (3) |
|
Journeying Through the User Interface |
|
|
224 | (2) |
|
Managing Top-Level Data with DataManager |
|
|
226 | (2) |
|
Diving into Three20 and TTMessageController |
|
|
228 | (2) |
|
Composing and Sending Messages |
|
|
230 | (5) |
|
Creating the Core Data Model |
|
|
235 | (4) |
|
Hacking SKPSMTPMessage to Support Threaded Message Sending |
|
|
239 | (1) |
|
Setting Up the NSRunLoop on SKPSMTPMessage |
|
|
239 | (2) |
|
Switching the Bits Back to Online Mode |
|
|
241 | (3) |
|
|
244 | (3) |
|
Florian Pflug and Peter Honeder |
|
|
247 | (98) |
|
How !Tap Tackles the Challenges of Networking |
|
|
249 | (96) |
|
Meet !Tap and !Tap Receiver |
|
|
250 | (2) |
|
|
251 | (1) |
|
|
251 | (1) |
|
How the Idea for !Tap Emerged and Evolved |
|
|
252 | (62) |
|
|
314 | (5) |
|
|
315 | (2) |
|
Handling Incoming Notifications |
|
|
317 | (1) |
|
|
318 | (1) |
|
Build and Gol Er, Not So Fast |
|
|
318 | (1) |
|
|
319 | (12) |
|
A Walk-Through of the Program Portal Process |
|
|
319 | (1) |
|
|
319 | (10) |
|
Add the Mobile Provisioning File for Code Signing |
|
|
329 | (2) |
|
|
331 | (5) |
|
A Walk-Through of What This Script Does |
|
|
333 | (1) |
|
|
334 | (2) |
|
|
336 | (5) |
|
|
336 | (5) |
|
Additional Considerations/Advanced Topics |
|
|
341 | (3) |
|
|
341 | (1) |
|
|
342 | (1) |
|
Moving from Development Sandbox to Production |
|
|
342 | (1) |
|
|
343 | (1) |
|
Mobile Provisioning Files |
|
|
343 | (1) |
|
|
343 | (1) |
|
|
343 | (1) |
|
|
344 | (1) |
|
|
344 | (1) |
|
|
344 | (1) |
|
|
345 | (20) |
|
Environment Mapping and Reflections with OpenGL ES |
|
|
347 | (18) |
|
|
347 | (2) |
|
First Steps: OpenGL Lighting |
|
|
349 | (3) |
|
Turning to Environment Mapping |
|
|
352 | (1) |
|
Spherical Environment Mapping Implementation |
|
|
353 | (3) |
|
Comblning Environment Mapping and Diffuse Textures |
|
|
356 | (9) |
|
|
359 | (3) |
|
|
362 | (1) |
|
|
363 | (2) |
Index |
|
365 | |