Hidden Features of Xcode 4 - cocoa

Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.
Now that Xcode 4 is officially released it's time for a follow up to my previous question: Hidden Features of Xcode
So what are they? What are those hidden little Xcode 4 hints & tips that you can't live without?
Please limit your tips to those that are new and specific to Xcode 4!

If you like your code to look as good as it runs, you've undoubtedly used #pragma mark - and #pragma mark <name> to provide a nice visual grouping in the Xcode class dropdown list. Xcode 4 now combines these into a single #pragma mark - <name>.
More on pragma mark.

shift-cmd-opt click on a symbol lets you tell Xcode exactly where in the UI you want the navigated-to file to open.
cmd-ret makes the version editor / assistant (the right hand pane) go away
shift-cmd-Y to hide the debugger
cmd-0 to hide the navigator (left pane)
cmd-[1..n] switch between navigators on left
cmd-opt-[1..n] switch between utilities (thing generally on right)
ctrl-[1..n] switch between various related files in the editor
Overall, Xcode 4 tries to keep things consistent w/the hot keys. Cmd is for mainline commands. Adding modifiers is for analogous commands focused on one particular sub-feature.
(These are just the four that come to mind as the my most pounded upon shortcuts that I'm using constantly! I'm sure it'll change over time as my workflow is refactored into the new hotness.)

Xcode 4 adds a new "Code Snippets" feature, accessible via View > Utilities > Code Snippet Library. To add a new code snippet, select some text in the editor view and drag it into the snippet library. You can either drag a snippet out and drop it in your code to use it, or, much more conveniently, assign a completion shortcut to it.
When you type in that series of letters, it will automatically show up in the code completion pop-up menu as you type your code. For example, among many others, I have a snippet set up so that typing "svk" will expand to setValue:<#value#> forKey:<#key#>. This can save a lot of typing and/or fishing around in the autocompletion menu for the methods and other code expressions you use the most. Xcode ships with a bunch of built-in snippets that come in very handy as well.

New shortcut I use most often: triple-finger swipe (up or down) to swap counterparts (between the interface and implementation files). No more hand acrobatics!
Thanks to https://twitter.com/xctotd/status/48148271759241216

shift-option-click on a file in the Groups and Files list Project Navigator, or hold shift-option while choosing a file from the Jump Bar.
You'll get a pop-over from which to pick where to open the file. New or existing tab, new or existing split (Assistant) editor, new window—every possible option is there.

Tabs in Xcode 4 are awesome. Each one maintains its own separate layout, so you can have multiple tabs with different things in them and have each one lain out appropriately.
I've been setting up my projects with three layouts—one for the project object, one for each nib (showing the owner's class's sources), and one for each class.
There is one bug here: As of 4.0, Xcode will reset the state (turning off any Assistants) of the active tab when you reopen the project. The workaround is to switch to a tab with no Assistants for Xcode to close before you close the project. I have filed this as Radar number 9178441.

ctrl-6 pops down within-file segment of jump bar (enables keyboard-controlled jump to methods)
cmd-{/} select previous / next tab
cmd-J navigate to any editor (but why oh why doesn't TAB then cycle between them?)

Editor ShortCuts
Cmd + Ctrl + up/down Jump between
.h & .m Files.
Cmd + Ctrl + Left/Right Jump between Previous
Edited Files/Next Edited files.
Layout Shortcuts
Cmd + 0 hide or show navigators
Cmd + opt + 0 hide or show inspectors
Cmd + Shift + Y hide or show debugger console.
Navigators Shortcuts
Cmd + 1 Project
Cmd + 2 Symbol
Cmd + 3 Search
Cmd + 4 Issue
Cmd + 5 Debug
Cmd + 6 BreakPoint
Cmd + 7 Log
Tab Switching & Jumping
Cmd + { Previous Tab
Cmd + } Next Tab
Cmd + j Select location to jump
Shift + Option + ClickFile Select location to open file
Cmd + Alt + Option + Click Select location to open Method
Inspectors
Cmd + Opt + 1 File Inspector
Cmd + Opt + 2 Quick Help
Cmd + Opt + 3 Identity Inspector
Cmd + Opt + 4 Attribute Inspector
Cmd + Opt + 5 Size inspector
Cmd + Opt + 6 Connection Inspector
Build Related
Cmd + B Build
Cmd + Shift + K Clean
Cmd + . top
Code Folding
Cmd + Alt + Left Minimize Current Method/Class/Interface
Cmd + Alt + Right Expand Current Method/Class/Interface
Cmd + Alt + Shift + Left Minimize All Method/Class/Interface
Cmd + Alt + Shift + Right Expand All Method/Class/Interface

Here's the first. Tabs! Xcode 4 has replaced Xcode 3's useful but rarely used "favorites bar" with persistent tabs. This means you can keep a working set of commonly used documents in your tab bar.
Not exactly a hidden feature as such - but the fact that the tabs are persistent is perhaps easily missed.

If you're having any sort of trouble with the indexing of your project (e.g. symbols not showing up in autocompletion), open the Organizer window, click the Projects tab, and use the "Delete" button to delete the derived data for your project. This will force a rebuild of the project's index, as well as tossing out any built products.

Some useful hotkeys for working on smaller screens are:
cmd-shift-y - Hide and show the console/debug area
cmd-0 - Hide and show the file navigation

You can now associate groups in the Project Navigator with folders on disk. It always bugged me before that the Xcode 3 file view may not represent the actual structure of the project on disk.
Create a new group, then with the new group highlighted, open the File Inspector. In the identity section on the right just below the 'Path' is a small icon, click this to open the file browser dialog allowing you to select the directory for this group.

If you hold the FN key then you can scan through your document with the cursorkeys, without moving the cursor

Jump bar:
if your write outside function:
// FIXME: A Bug
// TODO: Later
// ???: ???
// !!!: !!!
// MARK: This a mark
Will like:
Also you can search:
Click with Option(With Shift at the same time, you can choice another window), you can see a dialog letting you specify where the file should open:
Source control:
If you use svn or git, discard change is easy:
Interface buidler
In xcode 4.2, you can jump to interface builder here:
Click a ui object with Shift, it will show a list of all objects under the point.
Try this:
Select a ui object, hold Option, then move mouse over other objects. It will like:
Other
Hotkey: Shift+Command+O Open Quickly
Try:
#error message
#warning message
And read:
Writing and Editing Source Code

Text Editor:
Cmd-clicking on a class name will take you to the implementation (or header) file of that class, cmd-clicking on an object will take you to where the object is declared.
Alt-clicking will open a documenation popup for the object you clicked on.
Adding frameworks: You cannot simply do this by right-clicking on the project or a group (like in Xcode 3). You need to go to the project view, select your target and go to "Build Phases" tab. Frameworks can be managed under the "Link Binary with Libraries" section.
Setting target dependencies: Similar to the above, in the "Target Dependencies" section of the "Build Phases" tab.
Keep your archives safe -prior to installing Xcode 4 (from 3). You will lose them (most likely) and with them lose your ability to symbolicate your crash logs.
Delete action-BEWARE: "Delete" (instead of "Remove Reference Only") directly erases the file from your drive. It doesn't go into the Trash, so you cannot recover it.

cmd-J jumps to the editor, but if you have more than one editor open you get an overlay that has all of the open editors. you can use cmd-→ and cmd-← to switch between the open editors.
Also, if you are having a hard time finding an option or property for anything the utilites window is probably your best bet:
hide and show utilities: cmd-opt-0
Things that are commonly hidden here that aren't intuitive:
data model entity properties.data model propertiesxib properties

You don't need to declare IBAction - methods in .h File. & You can directly connect it in Interface Builder.
Example:
-(IBAction)btnLogInTapped:(id)sender {
// place following method in .m file of your code. save file. Open the
// .xib file of viewController
// click on files owner
// click on connection-inspector.
// you can view your methods under "received actions"
}
You don't need to declare variables, if you are creating property for it.
Example:
// a property declared in .h File of your view controller.
#property (nonatomic, retain) LogInVCtr *nxtLogInVCtr;
// synthesize above property in .m File
#synthesize nxtLogInVCtr;
// or
#synthesize nxtLogInVCtr = _nxtLogInVCtr;
// and you are done, you don't need to declare variable for it.

One of my favorites is the "Open Tab" behavior preference. If you go to "Behaviors" in Preferences, you can set it to go to a specific tab whenever a run starts. You can name the tab, something like "Debug" and Xcode4 will create it for you if it doesn't exist, and take you there when you start debugging. You can configure this tab just how you like it for debugging sessions, and it will stick that way after you close it, so whenever you do a run Xcode4 will be set up just how you want it, in a separate tab. You can even tear this tab off to a separate window, in which case Xcode4 will open a new specially configured "Debug" window each time you start a run! This feature is great because it keeps your regular code editing tab or window uncluttered with the log and debugger panes. Simply close the "Debug" window when you're done running and you can be back to your clean screen of code.

In XCode3, There was an option for "Rename the Project". Now, you just need to click twice ( second click slowly ) to rename the project & Its done.

To Limit the Number of Concurrent Build Operations
This is a (somewhat) hidden preference which allows you to define the number of concurrent compile tasks:
defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 4
To Disable Indexing in the IDE
This one disables code sense indexing, which can save a lot of resources in large projects:
defaults write com.apple.dt.XCode IDEIndexDisable 1
to reenable:
defaults delete com.apple.dt.XCode IDEIndexDisable
Note that you should quit Xcode, set the preference values as desired, changes take effect when you restart Xcode.

If you prefer using vim/emacs running on, say, Terminal, or any other external editor, you can just create your xcode project, add files and whatnot and then switch to editing said files using whichever edit suits you best; whenever you switch focus to an xcode4 window, the modified files will be reloaded( was also the case with Xcode3 ) and you can build / run your application.

Two kinds of Build location specification using XCode4 Preferences.
Location Specified By Targets - 'Build' Directory is located within your project directory.
Location in Derived Data ( Recommended by XCode, as you can see in screen shot ) - 'Build' Directory is located under DerivedData location specified ( e.g. here in my case, /Users/digicorp/Library/Developer/XCode/DerivedData )
Please look at following screen shots.

QUICK HELP
Ctrl + Option / Alt + f
Find the Quick help. For example,
#property (nonatomic, retain) NSString *strQuery;
My Text cursor is at NSString & if I press Ctrl + Option + f then It will show a quick documentation in the inspector/utilities.

Related

how to come back when you are reading code in Xcode?

I have been developing in zend studio and there is a feature I miss a lot in Xcode. When you are reading code in a main function and you want to go in a specific function to read something, you can click in the left area of your current line of code were your are, and a flag-mark appears in that line of code, so you can go anywere else in the code and it will be very easy to come back to that line of code you were before because there is a flag and you only have to click on it and you automatically go back. Does Anybody know a similar way to do this in Xcode?
Unfortunately, this feature was present in earlier versions of Xcode (up to Xcode3 IIRC) and was called "Bookmarks", but it was removed since then.
You can use breakpoints (and disable them) as a workaround, even if it's not perfect. I personally prefer using other tricks, like "Open Quickly" and named tabs.
Alternate trick 1 : "Open Quickly"
One trick is to use Command+Shift+O (or "File" menu > "Open Quickly") to quickly open a file. In the field that appears, you can type:
The name or parts of the name of a file.
Typing "MainViewController" will propose to jump to the MainViewController.h or MainViewController.m file.
Typing "MainVC" will work too, as well as "MainViewCtrl", as long as the order of the letters you type is the same as the full name.
Very handy to just type "ContTVCell" to open the ContactsTableViewCell.h file that is hidden deep in subgroups of my project for example
Similarly, you may also type the name or parts of the name of a symbol, especially a method name.
For example, typing tvcellforrow will list you all the definitions of -tableView:cellForRowAtIndexPath: it could find in your project and let to jump to the one you want
When typing (parts of) the name of a file, adding : followed by a number at the end will allow you to directly jump at the corresponding line
For example, typing mvc:50 will propose you to jump to line 50 of MainViewController.h or MainViewController.m
Another trick : using (named) tabs
Don't forget that you can open tabs in Xcode, which can be very handy in this kind of situation.
When you are editing a file at some interesting position, you can create a new tab to browse elsewhere and go at any other place… and then go back to your first tab to find the code where you left it at the time you switched to the other tab.
Don't forget that you can name your tabs (simply double-click on their title) to give them a more explicit title. You may then quite think of them as "named bookmarks" somehow
Likewise, don't forget that you can detach tabs in separate windows too, if you prefer (for example to keep them around and visible on your secondary screen while you edit another part of your code)
You can even combine this with the "Open Quickly" trick presented above: once you made the "Open Quickly" field appear and typed something into it, instead of just validating using the enter key:
use Alt+Shift+enter to let Xcode present you a small widget that let you choose where you want the file to open (in the current tab, in another tab, in the assistant editor, in a dedicated window…)
use Alt+enter to open the file using the alternate navigation defined in Xcode preferences (Xcode > Preferences > Navigation > Optional Navigation). By default, the behavior when opening a file while using the Alt key is to open the file in the Assistant Editor. Personally I changed that in my Xcode preferences as I prefer to make Xcode open the file in a separate tab instead, which makes Alt+clic much more useful.
Sure, all those tricks with "Open Quickly…" and "Tabs" do not replace the bookmarks feature that you are missing. But they are still nice alternate ways to jump quickly to any position in your code, even any specific line of any specific file in your project, wherever you are in Xcode (even without having to have the Project Navigator visible on the left part of your window), and let you have multiple editors in different tabs to go quickly back to a part of interest in your code
its on top of your editor i have added two pics just check them.
When you navigate to another place in Xcode, say, open a different file, or Command-click and jump to definition, you can go forward and back by swiping right or left on the trackpad with two fingers.
You can also use keyboard shortcuts: Ctrl+⌘+→ to go forward, or Ctrl+⌘+← to go back.
Finally, you can click triangular buttons at the top left in your edit area.
There is a go back button at the top left of the editor!
If that is not good enough, whar I do is misuse breakpoints to set flags in my code. The breakpoint navigator thus becomes a table of flags. It isn't much but there you are.

How to collapse all issues in the Xcode issue navigator

I am porting a huge C++ project to OS X. After my initial compile with Xcode I have multiple errors in many files I want to investigate.
Problem is that the issue navigator shows all files non collapsed after each compile:
So I have to collapse all of them by hand (there a a lot of files) after each compile to have an overview of a files which need fixing.
Is there a hotkey or a setting to collapse all files?
cmd ⌘-click one of the little disclosure triangles to collapse (or expand) all rows.
let me add some extra info, when tapping a main item
hold ⌘ to : close a type of warnings
hold shift & ⌘ to : close all types of warnings
go to the most top level of issue and alt + <- keyboard arrow key that will close that issue and when you use alt + -> to open the issue again. all issue is collapse

Xcode keyboard shortcut: jump to test file?

Is there an Xcode keyboard shortcut to jump from MyObject.m to MyObjectTests.m, and vice versa? If so, what is it?
I haven't found a way to do this. Feature request material I think.
At the bottom of "Project Navigator" you can type your filename in the search area to dynamically search for files you would be interested in. They will be filtered as you type.
If you always place your ClassTests next to its Class, you can use Control + 5 followed by Up/Down and Return. Three keystrokes. Not ideal but works.
Command + Shift + O works fairly well. It is an open quickly command, so you can type in the name of the file and get a list of:
MyObject.m
MyObject.h
MyObjectTests.m
It remembers what you typed last too, so next time you Command + Shift + O (in the same XCode instance) you can now down arrow twice and return to get from source to test file. Works in XCode 6.3 / 6.4; I am not sure about other versions.
If you already know the name of the test file where the relevant tests are located, then of course the above answers work well. But if you don't know where the tests are (such as when you inherited an old code base or it's been more than 2 days since you wrote it), there are two ways to do it.
The keyboard shortcut ctrl-cmd-up will take you to the "generated interface" (a leftover from the objc days) for that file, but pressing it a second time will take you to the associated test file
Use the assistant editor, which can be turned on either through the little menu in the top right corner, or through the keyboard shortcut ctrl-opt-cmd-enter. This will usually show the test file for an associated file (or vice versa if you're looking a test file!)

Xcode find caller functions

In Xcode, how can I find all caller functions of a specific function?
Xcode 4.5 (in beta) has this functionality. when you highlight say... a function, you can check the "caller" and "callee"
edit i believe it's located at the top left of the file panel for that file... so double click on the function to highlight it, and you click on on the file panel options (the one that has the "open recent, open unsaved...etc" drop down
EDIT #2
here's a picture to clarify (since i dont know what this menu button is called):
ALSO - XCode 4.5 is no longer beta, i believe, and is actually out in public
EDIT #3
also note that this caller thing does NOT search for being called under the performSelector method, as in, the particular caller that has this performSelector won't show up if you had done something like:
[self performSelector:#selector(checkIfShouldStopMovement) withObject:nil afterDelay:0.25];
In Xcode, the quickest method is this:
Select method in code (double click or mark using your mouse cursor)
Press Ctrl+1
Select "Callers" from the pop-up menu.
This is the shortcut for going View -> Editor -> Show Related Items in Xcode's menu.
use ⌘+Ctrl+Shift+H key combination on Xcode 7 onwards.
This can also be accessed via the assistant editor, as shown in the screenshot below. Whichever method you have the insertion point in in the main editor on the left will have its callers displayed in the assistant editor. I've found this to be the best way of looking through each caller in succession, since once you have "Callers" selected, you can then select the next caller via the next pop-up menu to the right in the jump bar.
In Xcode-7 you have the functionality of getting call-heirerchy. Right-click on the function and click "Find Call Hierarchy":
image reference:
Xcode 10 upwards seems to have made it easier. Just Command Click on the function and you should see it in the drop down.
Press ⌘+Ctrl+Shift+H shortcut when a method of interests is selected (with a mouse or cursor). (as per #uiroshan 's answer)
But you can also specify any another shortcut in XCode -> Preferences -> Key Bindings
Use Find in Project as Text or as Symbol.
AFAIK, there's no equivalent to e.g. Call Hierarchy known from Eclipse or NetBeans.
Strangely the refactoring tool can detect all method calls but not the search.
So I simply use it to rename my method to a unique name (eg. reset to resetPlayer) and then use the new name in a regular textual search.
1.) Menu > Edit > Refactor... > Rename to unique name
2.) search for the new name
The functionality is available in XCode 4.4.1, see this: http://smilingfinney.blogspot.de/2012/09/method-callers-in-xcode-44.html

What is this "go forward/backward" thing? ........and file switching

You know in Xcode, you can press option - command - left/right arrows to switch between multiple files. But what are these files?
They seem to be the ones that have been opened. But is there any way to check what they are? And close some unwanted ones.
Or, any other way you know to switch between files??
alt text http://img19.imageshack.us/img19/8724/picture4asx.png
if you click on untitled.m it will bring up the 'history' although it really functions more like multiple open documents per window.
The 2 arrows to the left of it are equivalent to the command+option+arrow
command+shift+W will close the current open document and open the most recent
I dearly miss ctrl+tab for recent document list like in Visual Studio, Eclipse and others. They do it with the application switcher so why not in their editors ? And whats up with "Command + Option + Shift + T" shortcuts ? One thing I have noticed after switching to Mac is the use of lame shortcuts like that, "press cmd+ctrl+option+]+k to open bla bla". Have Apple developers 4 hands or something ? If I want to indent multiple lines it should have been just tab.
Apple and 3rd party developers doesn't seem to follow a standard like they do in the windows world, every app has its own way of doing things.
Your guess about
They seem to be the ones that have
been opened
is correct.
Here is some ways you can use to switch between files.
^1 popups loaded files
Command + Option + Up to switch between declaration and implementation files.
Command + Shift + D to quick open project related file.
Command + Option + Shift + T to reveal your file in the group list. And then select related one.
"Popup of include files" is also good one to browse files related to the current one.
"View -> Smart Groups -> All Files | Symbols | etc " and then Tab and type first letters. Tab. And choose one you want. Bind some keys for that.
Simpliest: Two finger swiping on the trackpad left-and-right.
Command + Option + left / right arrows - collapse code
Command + Ctrl + up / down arrows - switch between .h and .m
Command + Ctrl + left / right arrows - move backward / forward

Resources