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

Tunnelblick 3.8.2a - GUI for OpenVPN.
Tunnelblick is a free, open source graphic user interface for OpenVPN on OS X. It provides easy control of OpenVPN client and/or server connections. It comes as a ready-to-use application with all... Read more
calibre 4.17.0 - Complete e-book library...
Calibre is a complete e-book library manager. Organize your collection, convert your books to multiple formats, and sync with all of your devices. Let Calibre be your multi-tasking digital librarian... Read more
MacPilot 11.1.4 - $15.96
MacPilot gives you the power of UNIX and the simplicity of Macintosh, which means a phenomenal amount of untapped power in your hands! Use MacPilot to unlock over 1,200 features, and access them all... Read more
Transmission 3.00 - Popular BitTorrent c...
Transmission is a fast, easy, and free multi-platform BitTorrent client. Transmission sets initial preferences so things "just work", while advanced features like watch directories, bad peer blocking... Read more
Doom 3 1.3.1 - First-person shooter acti...
A massive demonic invasion has overwhelmed the Union Aerospace Corporation's (UAC) Mars Research Facility, leaving only chaos and horror in its wake. As one of only a few survivors, you must fight... Read more
Box Sync 4.0.8004 - Online synchronizati...
Box Sync gives you a hard-drive in the Cloud for online storage. Note: You must first sign up to use Box. What if the files you need are on your laptop -- but you're on the road with your iPhone? No... Read more
LibreOffice 6.4.4.2 - Free, open-source...
LibreOffice is an office suite (word processor, spreadsheet, presentations, drawing tool) compatible with other major office suites. The Document Foundation is coordinating development and... Read more
Day One 4.14 - Maintain a daily journal.
Day One is an easy, great-looking way to use a journal / diary / text-logging application. Day One is well designed and extremely focused to encourage you to write more through quick Menu Bar entry,... Read more
MenuMeters 2.0.7 - CPU, memory, disk, an...
MenuMeters is a set of CPU, memory, disk, and network monitoring tools for Mac OS X. Although there are numerous other programs which do the same thing, none had quite the feature set I was looking... Read more
War Thunder 1.97.2.19 - Multiplayer war...
In War Thunder, aircraft, attack helicopters, ground forces and naval ships collaborate in realistic competitive battles. You can choose from over 1,500 vehicles and an extensive variety of combat... Read more

Latest Forum Discussions

See All

SINoALICE, Yoko Taro and Pokelabo's...
Yoko Taro and developer Pokelabo's SINoALICE has now opened for pre-registration over on the App Store. It's already amassed 1.5 million Android pre-registrations, and it's currently slated to launch on July 1st. [Read more] | Read more »
Masketeers: Idle Has Fallen's lates...
Masketeers: Idle Has Fallen is the latest endeavour from Appxplore, the folks behind Crab War, Thor: War of Tapnarok and Light A Way. It's an idle RPG that's currently available for Android in Early Access and will head to iOS at a later date. [... | Read more »
Evil Hunter Tycoon celebrates 2 million...
Evil Hunter Tycoon has proved to be quite the hit since launching back in March, with its most recent milestone being 2 million downloads. To celebrate the achievement, developer Super Planet has released a new updated called Darkness' Front Yard... | Read more »
Peak's Edge is an intriguing roguel...
Peak's Edge is an upcoming roguelike puzzle game from developer Kenny Sun that's heading for both iOS and Android on June 4th as a free-to-play title. It will see players rolling a pyramid shape through a variety of different levels. [Read more] | Read more »
Clash Royale: The Road to Legendary Aren...
Supercell recently celebrated its 10th anniversary and their best title, Clash Royale, is as good as it's ever been. Even for lapsed players, returning to the game is as easy as can be. If you want to join us in picking the game back up, we've put... | Read more »
The Magic Gladiator class arrives in MU...
The Magic Gladiator class is now available in MU Origin 2 following the most recent patch. It also marks the start of Abyss Season 11 and the introduction of Couple Skills and Couple Dungeons. [Read more] | Read more »
The 5 Best Racing Games
With KartRider Rush+ making a splash this past week, we figured it was high time we updated our list of the best mobile racing games out there. From realistic racing sims to futuristic arcade racers (and even racing management games!), check out... | Read more »
KartRider Rush+ Guide - Tips for new rac...
KartRider Rush+ continues to be a surprisingly refreshing and fun kart racer that's entirely free-to-play. The main reason for this is just how high its skill ceiling is. Check out the video above if you're curious to know what top level play looks... | Read more »
KartRider Rush+ might be good, actually?
It's hard to find good racing games on mobile. Most of them are free-to-play, and free-to-play racers generally suck. Even Nintendo couldn't put together a competent Mario Kart game, opting instead for a weird score chaser that resembles--but feels... | Read more »
LifeAfter, NetEase's popular surviv...
A new map will be making its way into NetEase's popular survival game LifeAfter. The map is set to arrive on May 28th and will introduce a volcano that's teetering on the verge of eruption, bringing a host of added challenges to the game. [Read... | Read more »

Price Scanner via MacPrices.net

Apple restocks 2019 MacBook Airs starting at...
Apple has clearance, Certified Refurbished, 2019 13″ MacBook Airs available again starting at $779. Each MacBook features a new outer case, comes with a standard Apple one-year warranty, and is... Read more
Apple restocks clearance Mac minis for only $...
Apple has restocked Certified Refurbished 2018 4-Core Mac minis for only $599. Each mini comes with a new outer case plus a standard Apple one-year warranty. Shipping is free: – 3.6GHz Quad-Core... Read more
Apple’s new 2020 13″ MacBook Airs on sale for...
B&H Photo has Apple’s new 2020 13″ 4-Core and 6-Core MacBook Airs on sale today for $50-$100 off Apple’s MSRP, starting at $949. Expedited shipping is free to many addresses in the US. The... Read more
B&H continues to offer clearance 2019 13″...
B&H Photo has clearance 2019 13″ 4-Core MacBook Pros available for up to $300 off Apple’s original MSRP, with prices starting at $1149. Expedited shipping is free to many addresses in the US. B... Read more
Memorial Day Weekend Sale: Take $300 off thes...
Apple resellers are offering $300 discounts on select 16″ MacBook Pros as part of their Memorial Day Weekend 2020 sales. Prices start at $2099: – 16″ 2.6GHz 6-Core Space Gray MacBook Pro: $2099 at... Read more
Best Memorial Day Weekend 2020 Apple AirPods...
Apple resellers are offering discounts ranging up to $50 off MSRP on AirPods as part of their Memorial Day Weekend 2020 sales. These are the best deals today on various AirPods models. See our... Read more
Memorial Day Weekend Sale: 10″ Apple iPads fo...
Amazon is offering new 10.2″ iPads for $80-$100 off Apple’s MSRP as part of their Memorial Day Weekend 2020 sale, with prices starting at only $249. These are the same iPads sold by Apple in their... Read more
Memorial Day Weekend Sale: 2020 Apple iPhone...
Sprint is offering Apple’s new 2020 64GB iPhone SE for $0 per month for 18 months as part of their Memorial Day Weekend 2020 sale. New line of service and trade-in required. Offer is valid from 5/22/... Read more
Amazon’s popular $100 Apple Watch Series 5 di...
Amazon has Apple Watch Series 5 GPS + Cellular models on sale for up to $100 off Apple’s MSRP today. Shipping is free. These are the same Apple Watch models sold by Apple in their retail and online... Read more
2020 13″ 4-Core MacBook Air on sale for $949,...
Apple reseller Adorama has the new 2020 13″ 1.1GHz 4-Core Space Gray MacBook Air on sale today for $949 shipped. Their price is $50 off Apple’s MSRP, and it’s the lowest price currently available for... Read more

Jobs Board

Essbase Developer - *Apple* - Theorem, LLC...
Job Summary Apple is seeking an experienced, detail-minded Essbase developer to join our worldwide business development and strategy team. If you are someone who Read more
Senior Software Engineer @ *Apple* - Theore...
Job Summary Apple is looking for a seasoned senior software engineer to join our worldwide business development and strategy team. This is an opportunity to lead a Read more
Cub Foods - *Apple* Valley - Now Hiring Par...
Cub Foods - Apple Valley - Now Hiring Part Time! United States of America, Minnesota, Apple Valley Retail Operations Post Date May 18, 2020 Requisition # 119230 Read more
Senior Practice Manager - *Apple* Hill Eye...
Senior Practice Manager - Apple Hill Eye Center Tracking Code 61713 Job Description Schedule & Location: Full Time Days Apple Hill Medical Center General Read more
Retail Sales Consultant - *Apple* Valley -...
Retail Sales Consultant - Apple Valley - $500 Hiring Bonus Apply Now...12-30-2019 Address : 7875 150th St W Location : Apple Valley, MN US Req # : 272753BR Job Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.