With a huge influx of newbies to Xcode, I'm sure there are lots of Xcode tips and tricks to be shared.
What are yours?
Option ⌥ Command ⌘ Up Arrow ↑
View > Switch to Header/Source File
Switches between the .m
and .h
files.
- In Xcode 4 this is ctrl Command ⌘ Up Arrow ↑
⌘ Command + Double-Click on a symbol
: Jump to Definition of a symbol.
⌥ Option + Double-Click on a symbol
: Find Text in Documentation of a symbol. (Only works if you have they symbol's Doc Set installed.)
Favorites bar is just like you have in Safari for storing - well - favorites. I often use it as a place to store shortcuts (which you can do by drag-dropping) to files I am using right now. Generally this is more useful when I'm working with a large or unfamiliar project.
To show the Favorites Bar, select the following menu option:
View
> Layout
> Show Favorites Bar
Tab ⇥ OR Control ⌃ /: Select the next auto-completion argument.
Shift ⇧ Tab ⇥ OR Shift ⇧ Control ⌃ /: Select the previous auto-completion argument.
Escape ⎋: Shows the auto completion pop-up list.
When you attempt to undo after saving, you will get the following prompt:
"You are about to undo past the last point this file was saved. Do you want to do this?"
To get rid of this warning, enter the following into a terminal window:
defaults write com.apple.Xcode XCShowUndoPastSaveWarning NO
Paste this into the Terminal application:
defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions '{"ORGANIZATIONNAME" = "Microsoft";}'
com.yourcompanyname
" in all your templates:/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Application
com.yourcompany
to whatever value you normally use to build for a device. I used BBEdit's multi-find-and-replace after I opened the whole directory. You should be replacing the value in all the info.plist
files. I found 8 files to change.
The number of times a build has failed because I forgot to change this string is ridiculous.
- Control ⌃ Option ⌥ Shift ⇧ + <First letter of a Group name>
If you hold down the three keys above, you can quickly jump to groups in the left (Groups and Files) page by pressing the first letter of a groups name. For example, Control ⌃Option ⌥Shift ⇧T takes you to Targets and Control ⌃Option ⌥Shift ⇧S to Source. Press it again and it jumps to SCM. Sometimes it takes several tries for this to work (I don't know why).
Control ⌃ .
Shift ⇧ Control ⌃ .: Cycles backwards between autocompletion choices.
Control ⌃. (Control-Period) after a word automatically accepts the first choice from the autocompletion menu. Try typing log
then Control ⌃. and you'll get a nice NSLog
statement. Press it again to cycle through any choices. To see all the mutable choices, type NSMu
then Control ⌃..
Control ⌃ Command ⌘ ? (While your cursor is in the symbol to look up)
Option ⌥ + <Double-click a symbol>
Help > Quick Help
To get to the documentation from the Quick Help window, click the book icon on the top right.
- Command ⌘ Option ⌥ + <Double-click a symbol>
Takes you straight to the full documentation.
- Command ⌘ Control ⌃ + <Double-click in the editor>
Use the above shortcut for a strange way of selecting multiple words. You can make selections of words in totally different places, then delete or copy them all at once. Not sure if this is useful. It's Xcode only as far as I can tell.
This trick works in all Cocoa application on the Mac (TextEdit, Mail, etc.) and is possibly one of the most useful things to know.
- Command ⌘ Left Arrow or Command ⌘ Right Arrow Takes you to the beginning and end of a line.
- Control ^ a and Control ^ e Do the same thing
- Control ^ n and Control ^ p Move the cursor up or down one line.
- Control ^ f and Control ^ b Move the cursor back or forward one space
Pressing Shift ⇧ with any of these selects the text between move points. Put the cursor in the middle of a line and press Shift ⇧ Control ^ e and you can select to the end of the line.
Pressing Option ⌥ will let you navigate words with the keyboard. Option ⌥ Control ^ f skips to the end of the current word. Option ⌥ Control ^ b skips to the beginning of the current word. You can also use Option ⌥ with the left and right arrow keys to move one-word-at-a-time.
Try it with NSMutableArray
. You can quickly change it to NSArray
by putting your cursor after the NS
, pressing Shift ⇧ Control ^ Right Arrow then Delete.
Command ⌘ Shift ⇧ D
File > Open Quickly...
I'm a big fan of the Open Quickly feature, which is particularly good in Xcode 3.1 and later. When you want to open a file or a symbol definition that's in your project or in a framework, just hit the keyboard shortcut, type a bit of the file or symbol's name, use Up Arrow ↑ and Down Arrow ↓ to pick to the right result (if need be), and then hit Return ↩ to open the file or navigate to the symbol definition.
On Xcode 4:
- Command ⌘ Shift ⇧ o
Also, something I didn't know about Xcode until two minutes ago (when schwa pointed it out in a comment) is that, if the editor's text caret is inside of a word when Open Quickly is invoked, that word will be used as the Open Quickly search term.
You can use:
#pragma mark Foo
... as a way to organize methods in your source files. When browsing symbols via the pop up menu, whatever you place in Foo
will appear bold in the list.
To display a separator (i.e. horizontal line), use:
#pragma mark -
It's very useful, especially for grouping together delegate methods or other groups of methods.
# TODO
statements. Now if only it would also grab # XXX
, which is commonly used in the code base I work on...
You should always have a breakpoint on objc_exception_throw
.
Use the following code:
NSZombieEnabled = YES;
NSDeallocateZombies = NO;
... to debug retain and release problems. For more information, see the "Finding Memory Leaks" section of Apple's Debugging Applications document.
Command ⌘ + Double-click
on an object in Interface Builder's Document Window to jump to that class in Xcode. This is very handy with File's Owner.
Drag a customized object back to Interface Builder's Library for later reuse.
Control ⌃ Shift ⇧ + Click
on an object in Interface Builder to see a menu of all of the objects under the mouse.
Ctrl + 2: Access the popup list of methods and symbols in the current file.
This is super useful because with this shortcut you can navigate through a file entirely using the keyboard. When you get to the list, start typing characters and the list will type-select to the symbol you are looking for.
If your window displays both the detail and editor view, you can zoom the editor in to expand the editor view to the full height of the window. (This is fairly easily found, but many seem to overlook it.)
You can do this by using one of the following methods:
Command ⌘ Shift ⇧ E
View > Zoom Editor In
Drag the splitter (between the editor window and the file list above it) upwards.
Get Colin Wheeler's Complete Xcode Keyboard Shortcut List (available as PDF or PNG). Print it and keep it somewhere visible (I've got it on the wall next to my screen).
edit: Updated versions for Xcode 3.2
edit 2: Updated versions for Xcode 4
Not much of a keyboard shortcut but the TODO comments in the source show up in the method/function dropdown at the top of the editor.
So for example:
// TODO: Some task that needs to be done.
shows up in the drop down list of methods and functions so you can jump to it directly.
Most Java IDEs show a marker for these task tags in the scrollbar, which is nicer, but this also works.
# XXX
, and it doesn't see those.
⌘-[ and ⌘-] to indent and unindent selected text. Makes cleaning up source code much easier.
Hold Option while splitting windows to split vertically rather than horizontally.
Double-click on the square brackets or parentheses to obtain bracket and parentheses matching.
Control Xcode's text editor from the command line: xed
> xed -x # open a new untitled document
> xed -xc foo.txt # create foo.txt and open it
> xed -l 2000 foo.txt # open foo.txt and go to line 2000
# set Xcode to be your EDITOR for command line tools
# e.g. for subversion commit
> echo 'export EDITOR="xed -wcx"' >> ~/.profile
> man xed # there's a man page, too
xed was introduced in Mac OS X 10.5 with Xcode 3.0.
Commented
Feb 6, 2012 at 20:50
"Ctrl+Left/Right Arrow" to do intra-word text navigation. I use this feature to jump the cursor from the one "camel hump" in a variable to the next.
Xcode supports text macros that can be invoked via the Insert Text Macro menu at the end of the Edit menu. They can also be invoked using Code Sense, Xcode's code completion technology.
For example, Typing the key sequence p i m control-period
will insert #import "file"
into your code, with file
as an editable token just like with code completion.
Right click on a variable in your function and click edit all in scope. Been using it a lot since I found this out.
ctrl ⌘ T
You can have Xcode run the preprocessor over your Info.plist file:
<key>CFBundleShortVersionString</key> #ifdef DEBUG <string>1.0 (debug)</string> #else <string>1.0</string> #endif
See http://developer.apple.com/technotes/tn2007/tn2175.html for details.
Navigate among open files back and forth:
⌥⌘←
⌥⌘→
Debugging - how to use GDB
Being new to this still, I find trapping and identifying faults a rather daunting job. The console, despite it being a powerful tool, usually does not yield very intuitive results and knowing what you are looking at in the debugger can be equally difficult to understand. With the help of some of they guys on Stack Overflow and the good article about debugging that can be found at Cocoa With Love it becomes a little more friendly.
Technically an Interface Builder tip, but they're a book-matched pair, so I don't think this is off topic...
Shift + Right Click on one of your controls and you get a nice pick list of the object hierarchy. No more click, click, click, frustration!
With Trackpad:
Tested with Xcode 3.2.5.
The class browser in Xcode! Reached by pressing shift + ⌘ + c. You can reduce the scope to only show your active project. It gives you a less cluttered view as long as you only want to browse the class hierarchy.
[
in the correct locationI come from a .NET background, so I'm used to typing a symbol and then typing one of its method names. So I always forget to include the [
before I start typing the object name. Usually this meant I would need to go to the beginning of the line and add the [
manually. I didn't realize I could just press ] at the current cursor position, and it will be added automatically.
There are ways to use this: either after typing the function's name, or right before typing the function's name.
myObject testMethod
]
... becomes:
[myObject testMethod]
... with the caret positioned after the ]
.
myObject
]
... becomes:
[myObject ]
... with the caret positioned right before the ]
.
The advantage of the latter (2) is that code completion will filter on the methods of your object. Whereas with the former (1) if you try to invoke code completion immediately after myObject
, it won't be filtered. Another advantage to (2) is it behaves more like other programming languages that use dot notation. You type the name of the object then simply ] instead of . to access a method.
Select a block of text and type cmd-/ to comment it out. Do it again to remove the comments characters.
This is especially useful when combined with brace-matching by double-clicking on balanced chars (parens, braces, brackets).
Being able to quickly see all the methods that can be overriden from a super class. For example when extending UITableViewController I just type in my implementation:
- ta
and then I hit ESC to see all the methods from my superclass that begin with "ta" such as
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
This also works when adopting protocols.
Command ⌘ alt ⌥ shift T : reveal the current edited file in the project tree.
ctrl + alt + ⌘ + r to clear the log
When using Code Sense with many keyboards, use control + , to show the list of available completions, control + . to insert the most likely completion, and control + / & shift + control + / to move between placeholder tokens. The keys are all together on the keyboard right under the home row, which is good for muscle memory.