TweetFollow Us on Twitter

Xcode and Code Completion

Volume Number: 19 (2003)
Issue Number: 11
Column Tag: Programming

Getting Started

Xcode and Code Completion

by Dave Mark

This month, we're going to take a look at Xcode's code completion feature. As you'll see, code completion is much like the behavior you see in your browser when you start typing a URL and the browser does its best to save you the keystrokes by filling in the closest match it can to complete the URL. But Xcode's code completion is much more than that. Follow along and you'll see what I mean.

As we've done for the past few months, we'll work with the Sketch sample project. As a reminder, the Sketch files live in /Developer/Examples/AppKit/Sketch/. Before you open Sketch, make a copy of it. We will be breaking it!

Launch Xcode and open your copy of the project Sketch.pbxproj.

Setting Code Completion Prefs

Before we dig into code completion itself, let's take a look at the code completion preferences. Select Preferences... from the Xcode menu, then click on the Navigation icon in the scrolling pane at the top of the Preferences window (Figure 1).


Figure 1. Xcode Preferences, the Navigation Pane.

Your very first course of action is to make sure the Enable Indexing checkbox is checked. The Enable Indexing checkbox tells Xcode to constantly index your project in the background as changes are made. An updated index is what makes project searches so lightning quick. Since the index is maintained in the background, the overhead is hardly noticeable. If you turn indexing off, code completion, search, and anything else that depends on the index will slow considerably. Alternatively, if you have a very large project that was never indexed, you might not want to turn on indexing if you just have a few small changes to make. No sense waiting for the index to be built if you won't be taking advantage of it. In general, I always start off with indexing turned on.

Next step, check the Enable Code Completion checkbox. Obviously, this enables code completion.

There are a series of checkboxes and radio buttons that are enabled once you enable code completion. The first of these, Automatically suggest matching option, is what does the auto-complete as you type. For example, if the constant greenColor was the only symbol in scope that started with a g, you might type g and Xcode might add a grey reenColor.

When there is more than one symbol in scope that matches the current typing, Xcode will build a list of all the matching options. This is called the option list. As you type, if there is more than one matching symbol, Xcode will display a grey ellipsis (...). Anytime you see this ellipsis, you can hit the Code Sense Complete key (see Figure 2 for the Code Sense Complete key binding - the default is F5) and the option list will popup allowing you to select from a list of matching options.

The Automatically popup option list checkbox is a bit of a puzzle to me. The sense I get is that this option controls whether the option list popup appears whenever you start typing a symbol and there is more than one match. If the checkbox is unchecked, you have to type F5 (or whatever the Code Sense Complete key binding is set to) to bring up the popup. If that is the case, then this option is broken, as it behaves the same whether this checkbox is checked or not. I've got a question in to Apple on this, but haven't heard back yet. I'm guessing this is a bug and will be fixed in the next Panther release.

The next item in the prefs dialog is the Tab key selects the current item checkbox. It allows the tab key to both bring up the option list popup and make a selection from the popup. I find this option intuitive. Play with it, both on and off, but I'd definitely leave it checked.

Next is the Contains only items matching word checkbox. If checked, the option list popup will contain only symbols that exactly match what you've typed so far. If it is unchecked, the list will contain matching items and then a few more, either before or after the matching items in the symbol list. Play with this and you'll see what I mean.

Next is a radio button set labeled Option list shows methods/functions as: with buttons for Name only and Name and arguments. This option set lets you specify whether methods/functions listed in the option list popup are listed just by name, or with arguments.

The next radio button set, Completed method/function inserted as:, lets you specify whether the selected method/function is inserted in your code as just the name or with argument placeholders.

    The rest of the Navigation prefs pane lets you determine what types of symbols are included in the editing window's function popup and whether the function popup is sorted alphabetically or by the order the symbols appear in the source file being edited.

We'll take a look at some examples that should make all these options a bit clearer. But first, we'll take a quick look at the key bindings prefs.

Changing the Key Binding

You can change most, if not all of the key bindings that ship with Xcode. Go to the Xcode menu, select Preferences..., then click on the Key Bindings icon. Now click on the Text Key Bindings tab (Figure 2.)


Figure 2. Changing the Code Sense Complete key binding.

The text key bindings are sorted into functional sets, like Text Editing, Cursor Movement, and Text Formatting, each with its own disclosure triangle. Open the Text Editing triangle. Under the c's, you'll find Code Sense Complete. In the Keys column, you should see the key binding F5. To change this to some other key, double-click on the F5. Assuming you are playing with your bindings for the first time, you'll see the dialog shown in Figure 3.


Figure 3. Making a personal copy of the Xcode key binding set.

Click Make Copy to create your own copy of the the Xcode key bindings. I named mine Dave's Bindings. Make all the changes you like to those, then use the popup menu at the top of the pane, labeled Key Binding Sets, to select Xcode Default (See Figure 4), if you ever need to go back to the original settings. You'll also find built-in key sets for BBEdit, CodeWarrior, and MPW.


Figure 4. The key binding sets that ship with Xcode.

The key binding labeled Code Sense Completion List pops up the option list, even if there is only a single item on it. More importantly, the key binding labeled Code Sense Argument Placeholder Select jumps to the next argument placeholder in your just completed code. We'll demo this is a minute.

Add a key binding for this one. Double-click in the Keys column to the right of Code Sense Argument Placeholder Select. When the edit field appears, type in your key binding. Most folks use control-slash (^/) for this one.

Taking Code Completion For A Spin

Let's take a quick look at code completion in action. I'm editing the file SKTGraphic.m in the Sketch project. Remember to make a copy of the project before you mess around with it, just so you don't break it.

I'm going to add this line of code to the project:

[self setBounds:NSMakeRect(0.0, 0.0, 1.0, 1.0)];

Since we're not concerned with compiling this code, feel free to type this line anywhere you like. Start at the beginning of a new line by typing the beginning of the line:

 [self setBounds:NSMake

Note that I typed NSM in all caps, as opposed to nsm. This is because I have the Matches using case-sensitivity checkbox checked in the Navigation prefs.

Figure 5 shows where we are at this point. Notice the ellipsis (...) that follows the NSMake, telling us that there are some matching options. If there was only one, the option would be filled in in grey.


Figure 5. The start of NSMakeRect code completion.

Now press F5 or tab to bring up the option list popup. Figure 6 shows the popup with the Contains only items matching word checkbox checked. I pressed the arrow key twice to select NSMakeRect, then pressed tab to add NSMakeRect, and its argument placeholders, in the code.


Figure 6. The option list popup for NSMake.

Here's the code at this point:


Note that each argument is marked by a placeholder between matching angle brackets and pound signs. The four arguments are x, y, w, and h. The first placeholder is selected. I want the first argument to be 0.0. I type it, then press control-slash (^/) to select the next placeholder:


I continue typing arguments and pressing ^/ until my statement is complete:


Till Next Month...

I really like this method of argument selection. It works well for me. As you've seen over the last few months, the move from Project Builder to Xcode is a quantum leap forward. I really like the attention to detail, such as the depth of preference settings on the Code Sense and Key Bindings panes. And you just know that as much as compilation performance has improved from Project Builder to Xcode, there are dramatic improvements still to come...


Dave Mark is a long-time Mac developer and MacTech contributor. Author of more than a dozen books on various Mac-development topics, Dave is all about Xcode these days. Last month's column took the debugger through a few of its paces. This month's installment will focus on code completion.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Paragraphs 1.0.1 - Writing tool just for...
Paragraphs is an app just for writers. It was built for one thing and one thing only: writing. It gives you everything you need to create brilliant prose and does away with the rest. Everything in... Read more
BlueStacks App Player 0.9.21 - Run Andro...
BlueStacks App Player lets you run your Android apps fast and fullscreen on your Mac. Version 0.9.21: Note: Now requires OS X 10.8 or later running on a 64-bit Intel processor. Initial stable... Read more
Apple iTunes 12.2 - Play Apple Music...
Apple iTunes lets you organize and stream Apple Music, download and watch video and listen to Podcasts. It can automatically download new music, app, and book purchases across all your devices and... Read more
Apple Security Update 2015-005 - For OS...
Apple Security Update 2015-005 is recommended for all users and improves the security of OS X. For detailed information about the security content of this update, please visit: http://support.apple.... Read more
Apple HP Printer Drivers 3.1 - For OS X...
Apple HP Printer Drivers includes the latest HP printing and scanning software for OS X Lion or later. For information about supported printer models, see this page. Version 3.1: The latest printing... Read more
Epson Printer Drivers 3.1 - For OS X 10....
Epson Printer Drivers installs the latest software for your EPSON printer or scanner for OS X Yosemite, OS X Mavericks, OS X Mountain Lion, and OS X Lion. For more information about printing and... Read more
Xcode 6.4 - Integrated development envir...
Xcode provides everything developers need to create great applications for Mac, iPhone, and iPad. Xcode brings user interface design, coding, testing, and debugging into a united workflow. The Xcode... Read more
OS X Yosemite 10.10.4 - Apple's lat...
OS X Yosemite is Apple's newest operating system for Mac. An elegant design that feels entirely fresh, yet inherently familiar. The apps you use every day, enhanced with new features. And a... Read more
Dash 3.0.2 - Instant search and offline...
Dash is an API Documentation Browser and Code Snippet Manager. Dash helps you store snippets of code, as well as instantly search and browse documentation for almost any API you might use (for a full... Read more
FontExplorer X Pro 5.0 - Font management...
FontExplorer X Pro is optimized for professional use; it's the solution that gives you the power you need to manage all your fonts. Now you can more easily manage, activate and organize your... Read more

Heroki (Games)
Heroki 1.0 Device: iOS Universal Category: Games Price: $7.99, Version: 1.0 (iTunes) Description: CLEAR THE SKIES FOR A NEW HERO!The peaceful sky village of Levantia is in danger! The dastardly Dr. N. Forchin and his accomplice,... | Read more »
Hands-On With Raceline CC
Set for release soon, Rebellion’s motorbike racing game, Raceline CC certainly looks stylish. But how does it play? I got my hands on a preview build to answer exactly that. | Read more »
Siegefall - Tips, Tricks, and Strategies...
So, you fancy establishing a base and ruling the world again. Siegefall is a convenient place to do that, but how about some great tips and tricks on how best to go about it? Here are a few ideas on how to get ahead as a beginner to this medieval... | Read more »
The WWE Comes to Racing Rivals - Because...
Racing Rivals is a racing game that's all about, well, rivalry. And who knows rivalry better than WWE superstars (shhhh, that was rhetorical)? [Read more] | Read more »
Hey, Who Put Apple Music in My SoundHoun...
One of the App Store's popular music discovery sources - SoundHound - has already been updated to include Apple's own music discovery source - Apple Music. That was fast! [Read more] | Read more »
Arcane Legends has a New Expansion Calle...
Arcane Legends has been going strong since it debuted at the tail end of 2012. So well, in fact, that it's already up to its sixth expansion. [Read more] | Read more »
Vector 2 is Officially a Thing and it...
Vector is a pretty cool parkour-driven runner that's gotten a pretty decent following since it first came out - although personally I think more people could stand to show it some love. Anyway, Nekki has announced that a sequel isofficially on its... | Read more »
Get Ready to Trucksform and Roll Out (an...
It looks like NuOxygen is bringing the truck-transforming racer Trucksform (get it?) to iOS in a couple of weeks. Although really it's more of an auto-driver than a racer. But still, transforming trucks! [Read more] | Read more »
This Week at 148Apps:June 22-26, 2015
June's Summer Journey Continues With 148Apps How do you know what apps are worth your time and money? Just look to the review team at 148Apps. We sort through the chaos and find the apps you're looking for. The ones we love become Editor’s Choice,... | Read more »
LEGO® Minifigures Online (Games)
LEGO® Minifigures Online 1.0.1 Device: iOS iPhone Category: Games Price: $4.99, Version: 1.0.1 (iTunes) Description: | Read more »

Price Scanner via MacPrices.net

Logo Pop Free Vector Logo Design App For OS X...
128bit Technologies has released of Logo Pop Free 1.2 for Mac OS X, a vector based, full-fledged, logo design app available exclusively on the Mac App Store for the agreeable price of absolutely free... Read more
21-inch 1.4GHz iMac on sale for $999, save $1...
B&H Photo has new 21″ 1.4GHz iMac on sale for $999 including free shipping plus NY sales tax only. Their price is $100 off MSRP. Best Buy has the 21″ 1.4GHz iMac on sale for $999.99 on their... Read more
16GB iPad mini 3 on sale for $339, save $60
B&H Photo has the 16GB iPad mini 3 WiFi on sale for $339 including free shipping plus NY tax only. Their price is $60 off MSRP. Read more
Save up to $40 on iPad Air 2, NY tax only, fr...
B&H Photo has iPad Air 2s on sale for up to $40 off MSRP including free shipping plus NY sales tax only: - 16GB iPad Air 2 WiFi: $489 $10 off - 64GB iPad Air 2 WiFi: $559 $40 off - 128GB iPad Air... Read more
Apple Releases OS X 10.10.4 With WIFi Fix, iO...
On Tuesday, Apple released final versions of OS X 10.10.4 and iOS 8.4, as well as updates for the Safari browser for OS X Yosemite, Mavericks, and Mountain Lion. The OS X 10.10.4 update focuses on... Read more
Dual-Band High-Gain Antennas for Home Wi-Fi N...
Linksys has announced what it claims are the first dual-band, omni-directional high-gain antennas for the consumer market. The new Linksys high-gain antennas available in a 2- and 4-pack (WRT004ANT... Read more
Apple refurbished 2014 15-inch Retina MacBook...
The Apple Store has Apple Certified Refurbished 2014 15″ 2.2GHz Retina MacBook Pros available for $1609, $390 off original MSRP. Apple’s one-year warranty is included, and shipping is free. They have... Read more
Clearance 2014 MacBook Airs available for up...
Adorama has 2014 MacBook Airs on sale for up to $301 off original MSRP including NY + NJ sales tax and free shipping: - 11″ 256GB MacBook Air: $798 $301 off original MSRP - 13″ 128GB MacBook Air: $... Read more
5K iMacs on sale for $100 off MSRP, free ship...
B&H Photo has the new 27″ 3.3GHz 5K iMac on sale for $1899.99 including free shipping plus NY tax only. Their price is $100 off MSRP. They have the 27″ 3.5GHz 5K iMac on sale for $2199, also $100... Read more
27-inch 3.2GHz iMac on sale for $1679, save $...
B&H Photo has the 27″ 3.2GHz iMac on sale for $1679.99 including free shipping plus NY sales tax only. Their price is $120 off MSRP. Read more

Jobs Board

Senior Payments Security Manager - *Apple*...
**Job Summary** Apple , Inc. is looking for a highly motivated, innovative and hands-on senior payments security manager to join the Apple Pay security team. You will Read more
Project Manager - *Apple* Pay Security - Ap...
**Job Summary** The Apple Pay Security team is seeking a highly organized, results-driven Project Manager to drive the development of Apple Pay Security. If you are Read more
Web Developer, *Apple* Online Store Innovat...
**Job Summary** The Apple Online Store Innovation Lab team is seeking a talented individual with strong web development and design skills to prototype future Apple Read more
*Apple* TV Live Streaming Frameworks Test En...
**Job Summary** Work and contribute towards the engineering of Apple 's state-of-the-art products involving video, audio, and graphics in Interactive Media Group (IMG) at Read more
Project Manager, WW *Apple* Fulfillment Ope...
…a senior project manager / business analyst to work within our Worldwide Apple Fulfillment Operations and the Business Process Re-engineering team. This role will work Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.