| Preface | p. xi |
| Transforming Your Mac | p. 1 |
| Desktops | p. 1 |
| Screensavers | p. 10 |
| Altering the Dock | p. 13 |
| Changing the Look of Finder Windows | p. 18 |
| Customizing Standard Icons | p. 20 |
| Custom Themes | p. 22 |
| Changing the Boot Panel | p. 24 |
| Final Thoughts | p. 29 |
| Inside Application Bundles | p. 31 |
| Application Bundles | p. 31 |
| Understanding Bundle Structure | p. 35 |
| Building Bundles | p. 38 |
| Exploring the Resources Folder | p. 40 |
| Understanding Localizations | p. 44 |
| Plug-ins | p. 47 |
| Property Lists | p. 48 |
| Shrinking Applications | p. 50 |
| Final Thoughts | p. 54 |
| Application Dumpster Diving | p. 55 |
| The Xcode Tools | p. 55 |
| Finding Goodies | p. 58 |
| Changing Sounds | p. 59 |
| Searching Through Alternate Locations | p. 63 |
| Finding and Changing Images | p. 67 |
| Peeking at (and Playing with) String Files | p. 68 |
| Final Thoughts | p. 76 |
| Changing Icons | p. 77 |
| Mac OS X Icon Files | p. 77 |
| Viewing Icons | p. 81 |
| Creating Custom Icons | p. 84 |
| Changing Icons | p. 89 |
| Creating a Pseudo-Application | p. 93 |
| Final Thoughts | p. 97 |
| Preferences Files | p. 99 |
| Preferences Files | p. 99 |
| Managing Property Lists | p. 108 |
| Real-World Preferences Files | p. 115 |
| Discovering Undocumented Preferences | p. 118 |
| Final Thoughts | p. 125 |
| Discovering Domains and Support Files | p. 127 |
| Folders | p. 127 |
| Libraries and the Applications That Use Them | p. 135 |
| Preferences Domains | p. 137 |
| Recovering Preferences Settings by Domain | p. 139 |
| Final Thoughts | p. 147 |
| Changing Interface Elements | p. 149 |
| Making Alterations | p. 149 |
| Getting Ready to Hack | p. 150 |
| Meeting Interface Builder | p. 152 |
| Changing Window Styles | p. 155 |
| Adding a Tool Tip | p. 159 |
| Adding an Item to the Contextual Menu | p. 160 |
| Adding a New Button | p. 164 |
| Adding a Custom Drawer | p. 168 |
| Adding Objects from Another NIB File | p. 172 |
| Changing Object Classes | p. 175 |
| Restoring the Terminal Application | p. 177 |
| Final Thoughts | p. 178 |
| Altering Keyboard Shortcuts | p. 179 |
| Philosophy of Keyboard Shortcuts | p. 179 |
| Panther's New Keyboard Shortcuts Preferences Pane | p. 181 |
| Changing the Keyboard Shortcuts | p. 183 |
| Adding Application Keyboard Shortcuts | p. 184 |
| Keyboard Shortcut Equivalents | p. 193 |
| New Ways to Define Keyboard Shortcuts | p. 194 |
| Speakable Items | p. 203 |
| Viewing Keyboard Shortcuts | p. 207 |
| Final Thoughts | p. 208 |
| Basic Application Scripting | p. 209 |
| Discovering Scriptable Applications | p. 210 |
| Getting Ready to Script | p. 217 |
| Talking to Applications | p. 221 |
| User Interface Scripting | p. 223 |
| General Application Scripting | p. 233 |
| Final Thoughts | p. 238 |
| Scripting the Unscriptable | p. 239 |
| Activating Application Scriptability | p. 239 |
| Expanding Suite Possibilities | p. 244 |
| Updating the Core Suite | p. 255 |
| Reverting to the Original NSCoreSuite Files | p. 267 |
| Final Thoughts | p. 268 |
| Index | p. 269 |
| Table of Contents provided by Rittenhouse. All Rights Reserved. |