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

Luminar 1.2.1 - Powerful, adaptive, conf...
Luminar is the new full-featured image editor that adapts to the way you edit photos. Over 300 essential tools to fix, edit, and enhance your photos with comfort. The future of photo editing is here... Read more
1Password 6.8.1 - Powerful password mana...
1Password is a password manager that uniquely brings you both security and convenience. It is the only program that provides anti-phishing protection and goes beyond password management by adding Web... Read more
EtreCheck 3.4.4 - For troubleshooting yo...
EtreCheck is an app that displays the important details of your system configuration and allow you to copy that information to the Clipboard. It is meant to be used with Apple Support Communities to... Read more
GarageSale 7.0.8 - Create outstanding eB...
GarageSale is a slick, full-featured client application for the eBay online auction system. Create and manage your auctions with ease. With GarageSale, you can create, edit, track, and manage... Read more
Backblaze 5.0.0.116 - Online backup serv...
Backblaze is an online backup service designed from the ground-up for the Mac. With unlimited storage available for $5 per month, as well as a free 15-day trial, peace of mind is within reach with... Read more
Parallels Desktop 13.0.0 - Run Windows a...
Parallels allows you to run Windows and Mac applications side by side. Choose your view to make Windows invisible while still using its applications, or keep the familiar Windows background and... Read more
Mellel 4.0.0 - The word processor for sc...
Mellel is the leading word processor for OS X and has been widely considered the industry standard for long form documents since its inception. Mellel focuses on writers and scholars for technical... Read more
Adobe Muse CC 2017 2017.1.0 - Design and...
Muse CC 2017 is available as part of Adobe Creative Cloud for as little as $14.99/month (or $9.99/month if you're a previous Muse customer). Adobe Muse 2017 enables designers to create websites as... Read more
WhatsApp 0.2.5862 - Desktop client for W...
WhatsApp is the desktop client for WhatsApp Messenger, a cross-platform mobile messaging app which allows you to exchange messages without having to pay for SMS. WhatsApp Messenger is available for... Read more
WhatsApp 0.2.5862 - Desktop client for W...
WhatsApp is the desktop client for WhatsApp Messenger, a cross-platform mobile messaging app which allows you to exchange messages without having to pay for SMS. WhatsApp Messenger is available for... Read more

The best deals on the App Store this wee...
The summer is drawing quickly to a close, but luckily there's a game for every season. It's an excellent week for some bargain shopping if that's what you're after. There are some big names and indie darlings in this week's roundup. It's a great... | Read more »
KORG iMono/Poly (Music)
KORG iMono/Poly 1.0.0 Device: iOS Universal Category: Music Price: $19.99, Version: 1.0.0 (iTunes) Description: *** Special Sale for a limited time to celebrate the debut of KORG iMono/Poly (33% OFF) until Sep 30! *** Reviving a... | Read more »
Super Phantom Cat 2 beginner's guid...
Super Phantom Cat 2 presents a whole new world of fun platforming challenges and perplexing puzzles. It's a well-designed platformer with a bright, neon aesthetic that brings the genre up to date. [Read more] | Read more »
Shadow Fight 2 Special Edition (Games)
Shadow Fight 2 Special Edition 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: ** New story chapter! **** No Ads! **** No energy! ** The best fighting series on mobile has returned and... | Read more »
4 RPGs like Final Fantasy XV that deserv...
Square Enix announced another Final Fantasy XV spin-off today - Final Fantasy XV Pocket Edition. This mobile, episodic version of the hit RPG gives the game a chibi-fied makeover. The first episode will be free, followed by 9 more premium episodes... | Read more »
Guild sieges and soul gems in latest upd...
Webzen’s MU Origin hit app stores last year, giving fans of fantasy hack-n-slash MMOs like Diablo a new fix to fixate on. This latest update introduces a competitive guild battle, a fresh dungeon challenge, a mini-game and some elemental gems to... | Read more »
Little Red Lie (Games)
Little Red Lie 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: ARE YOU MORE AFRAID OF POVERTY THAN DEATH? Little Red Lie is a narrative-focused, interactive fiction experience that reduces... | Read more »
You can now apply to be Clash of Clans...
Earlier this month, word got out that the Builder, the trusty handiman who tirelessly built every single building inevery singleClash of Clansbase had called it quits. Sick of seeing his work destroyed endless, the Builder has set out for our world... | Read more »
Meshi Quest beginner's guide - how...
Meshi Quest is Square Enix's newest free-to-play release, and it's a real charmer. You start off as the head of a sushi restaurant, upgrading your food and equipment as you serve visitors heaping helpings of your delicious meals. As you progress,... | Read more »
BUST-A-MOVE JOURNEY (Games)
BUST-A-MOVE JOURNEY 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: BUST-A-MOVE Features:- Shoot bubbles and match 3 or more bubbles of the same color to make them pop!- Complete your... | Read more »

Price Scanner via MacPrices.net

Low Cost Subscription Graphics App Alternativ...
I’m not a fan of the subscription software model, I don’t use any subscription apps. Used to be that you paid your license fee and the app was yours to use indefinitely, or until one opted for a paid... Read more
Clearance 2016 13-inch MacBook Airs, Apple re...
Apple has Certified Refurbished 2016 13″ MacBook Airs available starting at $809. An Apple one-year warranty is included with each MacBook, and shipping is free: – 13″ 1.6GHz/8GB/128GB MacBook Air: $... Read more
2017 13-inch MacBook Airs on sale for $100 of...
B&H Photo new 2017 13″ MacBook Airs on sale today for $100 off MSRP, starting at $899: – 13″ 1.8GHz/128GB MacBook Air (MQD32LL/A): $899, $100 off MSRP – 13″ 1.8GHz/256GB MacBook Air (MQD42LL/A... Read more
Sale! 13-inch 2.3GHz MacBook Pros for $100 of...
B&H Photo has 13″ 2.3GHz MacBook Pros in stock today and on sale for $100 off MSRP including free shipping plus NY & NJ sales tax only: – 13-inch 2.3GHz/128GB Space Gray MacBook Pro (MPXQ2LL... Read more
2016 MacBook Pros, Apple refurbished, availab...
Apple has Certified Refurbished 2016 15″ and 13″ MacBook Pros available starting at $1189. An Apple one-year warranty is included with each model, and shipping is free: – 15″ 2.7GHz Touch Bar Space... Read more
Apple offers Certified Refurbished iPhone 6s...
Apple has Certified Refurbished unlocked iPhone 6s’s and 6s Plus’s available starting at $449. An Apple one-year warranty is included with each phone, and shipping is free: – 16GB iPhone 6s: $449, $... Read more
Apple offers Certified Refurbished Pencils fo...
Apple has Certified Refurbished Apple Pencils available for $85 including free shipping. Their price is $14 off MSRP, and it’s the lowest price available for a Pencil. Read more
2016 15-inch 2.6GHz Touch Bar MacBook Pro ava...
B&H Photo has clearance 2016 15″ 2.6GHz MacBook Pros in stock today and on sale for $500 off original MSRP. Shipping is free, and B&H charges NY & NJ sales tax only: – 15″ 2.6GHz Touch... Read more
21-inch 2.3GHz iMac on sale for $999, save $1...
Amazon has the new 2017 21″ 2.3GHz iMac (MMQA2LL/A) in stock and on sale for $999.99 including free shipping. Their price is $100 off MSRP, and it’s the lowest price available for this model. Read more
Free Instant Translator 2.0 App For iOS Relea...
Mobile application development company, Neoappz has announced the release and immediate availability of Instant Translator 2.0 for iOS devices. Instant Translator is a user-friendly application which... Read more

Jobs Board

*Apple* Solutions Consultant - Apple Inc. (U...
Job Summary As an Apple Solutions Consultant, you'll be the link between our future customers and our products. You'll showcase your entrepreneurial spirit as you Read more
*Apple* Solutions Consultant - Apple Inc. (U...
…about helping others on a team while also delighting customers? As an Apple Solutions Consultant (ASC), you will discover customers needs and help connect them Read more
Sr. Software Engineer, Core Services, *Apple...
…part of the server team that powers various features within the App Store, Apple Music, iBooks, iTunes, and Podcasts. You will be working cross functionally with Read more
SW Engineer *Apple* TV Frameworks - Apple I...
Job Summary The Apple TV team is looking for a software engineer to join us as we work to define the future of the tvOS platform. Key Qualifications You're Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.