Simple Workflow and Passive Debugging in XCode

This chapter from Xcode 6 Start to Finish: iOS and OS X Development, 2nd Edition steps you up to writing and running a program of your own. It introduces the first level of debugging: what to do when your program crashes. It turns out that Xcode offers good facilities to help you analyze a crash without you having to do much.

This chapter is from the book

This chapter begins your use of Xcode in earnest. Here’s where I introduce the problem that is the basis for all of the example code in this book.

The problem is the calculation of passer ratings. In American/Canadian football, quarterbacks advance the ball by throwing (passing) it to other players. The ball may be caught (received, a good thing) by someone on the quarterback’s own team, in which case the ball is advanced (yardage, more is better), possibly to beyond the goal line (a touchdown, the object of the game); or it may be caught by a member of the opposing team (intercepted, a very bad thing).

But those are four numbers, and everybody wants a figure-of-merit, a single scale that says (accurately or not) who is the better passer. The National Football League and the Canadian Football League have a formula for passer ratings, yielding a scale running from 0 to (oddly) 158.3. A quarterback who rates 100 has had a pretty good day.

Creating the Project

As in Chapter 2, “Kicking the Tires,” you’ll start with a command-line project. Start Xcode and click Create a new Xcode project, or select File → New → Project. . . (N). In the New Project assistant sheet, select an OS X Command Line Tool, and name the tool passer-rating; for Language, once again choose C.

Another difference: When you are shown the get-file sheet to select the location for the new project, check the box labeled Create Git repository on, and select My Mac. Git is a version-control system, an essential part of modern development. You’ll learn all about it in Chapter 7, “Version Control,” but now is the time to start.

NOTE

Are you ever going to change anything in a project? Get it under version control. Seriously. Your work will be safer, and you’ll do it faster.

Again, you’ll be shown target settings, which you can ignore for now. Instead, mouse over to the Project navigator at the left side of the Workspace window, and select main.c

Delete everything in the main() function but its outer braces, and replace the body of the function so the file reads thus (keep the comments at the top of the file):

You’ll notice that as you type closing parentheses, brackets, and braces, the corresponding opening character is briefly highlighted in yellow.

The rating calculation itself is simple. Put it into a file of its own: Select File → New → File. . . ( N). You’ll be presented with the New File assistant sheet; see Figure 3.1. Navigate the source list on the left, and the icon array on the right thus: OS X → Source → C File.

Figure 3.1 The New File assistant sheet offers many templates you can use to start a new file. Select the category from the source list on the left, and pick the template from the array of icons on the right.

Click Next, and use the save-file sheet that appears to name the file rating (Xcode will append .c automatically).

The save-file sheet has two custom controls. The Group popup lets you place the new file in the Project navigator (the source list at the left of the project window). Roughly, groups are simply ways to organize the Project inspector list; they have no influence on how the new file will be placed on-disk. Make sure the passer-rating group is selected.

Second is Targets, a table that for now has only one row, passer-rating. A target is a group of files and settings that combine to build a product. A file that isn’t part of a target isn’t used to build anything. Make sure that passer-rating is checked.

NOTE

It’s easy to get the target assignment wrong. Xcode 6 sets the same targets for new files as the ones for the last files that were added. If you forget to set the proper targets, you won’t know about it until your app fails to build or mysteriously crashes because a needed resource wasn’t included.

Now type an open brace in your code, at the end of a line. So what, it’s a brace. Now press Return. Xcode adds two lines: Your cursor is now at the next line, indented one level, and a matching closing brace appears on the line after that.

Finally, you’ve noticed that both main.c and rating.c refer to a rating.h, which notifies main() of the existence of the passer_rating function. Press N again, and choose Header File from the source files. Name it rating, and put this into it:

Place header files wherever you like among the project groups, but don’t add them to any targets. There are exceptions; if you need to do it, you’ll know. Chapter 6, “Adding a Library Target,” has more.