This document contains the release notes for the latest Xcode releases.
These are are the main web sites from which you can get Xcode development support:
http://developer.apple.com: The Apple Developer Connection website is the best source of official up-to-date technical documentation on Mac OS X, as well as being the primary place to find out about developing for the Macintosh platform.
http://developer.apple.com/tools/xcode: The Xcode home page on Apple’s developer site.
http://devforums.apple.com: Apple Developer Forums
There are a number of mailing lists that are great for Mac OS X, iOS, and Xcode developers. For more information visit http://lists.apple.com. There are lists on the following topics and many more:
xcode-users: This list is great for asking (and answering) questions about Xcode.
java-dev: A place for Mac Java developers.
cocoa-dev: Keep in touch with the Cocoa community.
carbon-dev: Keep in touch with the Carbon community.
fortran-dev: For Fortran development issues.
unix-porting: For developers porting standard Unix software packages.
webobjects-dev: For WebObjects development issues.
Note that these mailing lists are not appropriate for products released under seed or non-disclosure agreements. See the seed instructions you received with your OS or Developer Tools seed for proper feedback and support channels.
All members of the Apple Developer Connection can use the online bug reporting tool (bugreporter) to communicate issues with Apple. Include detailed information of the issue, including the system and developer tools version information, and any relevant crash logs or console messages.
To send feedback to Apple, use:
xcode-feedback@group.apple.com: Comments or feedback on the Xcode Tools suite.
cocoa-feedback@group.apple.com: Comments or feedback on AppKit and Cocoa.
Xcode 3.2.3 Release Notes
Xcode 3.2.2 Release Notes
Xcode 3.2.1 Release Notes
Xcode 3.2 Release Notes
Xcode 3.1.3 Release Notes
Xcode 3.1.2 Release Notes
Xcode 3.1.1 Release Notes
Xcode 3.1 Release Notes
Xcode 3.0 Release Notes
Xcode 3.2.3 is an update of the Xcode toolset. It is available only with Mac OS X 10.6 Snow Leopard and does not run on previous versions of Mac OS X.
Xcode 3.2.3 includes all the enhancements and bug fixes in Xcode 3.2.2, some significant changes for iOS development, and minor bug fixes.
Supported Configurations
Xcode 3.2.3 runs on Mac OS X v10.6 Snow Leopard on a Mac with an Intel processor. It does not install or run on earlier versions of Mac OS X. Xcode supports universal development for Mac OS X 10.4 Tiger and Mac OS X 10.5 Leopard using the Mac OS X SDK support; it does not support development for Mac OS X v10.3 or earlier.
Xcode Installation
The Xcode tools by default are installed into the /Developer directory, but you may choose to install them (or move them after installation) to any other directory on any volume. The tools will work normally so long as they remain in their designated locations relative to the top-level directory, even if it is not named Developer and located on the startup volume.
This flexibility allows you to have multiple versions of the Xcode toolset installed on the same computer but running independently. Xcode uses the SDKs, build tools, and auxiliary applications from the same directory it is launched from whenever possible, rather than those from the root system. To refer to those files in your own projects, use the relative-to-Xcode-folder reference style, whose root path is $(DEVELOPER_DIR)
.
The Xcode toolset installer also installs the standard system development tools and interfaces into /usr
, so conventional makefile-based and config-based builds operate correctly. Use the xcode-select
command-line tool to set the default toolset for command-line builds.
Project File Format Compatibility and Versioning
Xcode 3.2.3 reads and builds the targets of project files created in Xcode 2.1 through 3.2.2, and automatically upgrades project files created in Xcode 1.5 through 2.0. Xcode 3.2.3 does not reliably read project files created in Xcode 1.2 or earlier, or Project Builder project files. Open and upgrade these project files in Xcode 2.5 before opening them with Xcode 3.2.3
Note: It is strongly recommended that, when converting pre–Xcode 2.1 project files to Xcode 2.2 and later, you also upgrade all the project’s targets to native targets using the item in the Project menu. Many Xcode features, including support for building universal Binaries, are not supported for non-native (JAM-based) targets.
Xcode 3.2.3 doesn’t import CodeWarrior project files. Install Xcode 2.5 and CodeWarrior Pro version 8.3 and follow the documentation in Porting CodeWarrior Projects to Xcode.
Project files opened and edited with Xcode 3.2.3 are generally compatible with Xcode 3.2.x, Xcode 3.1.x, Xcode 3.0, and Xcode 2.5; this means that project files you create or open with Xcode 3.2.3 can always be opened and built with Xcode 2.5 through 3.1. If you use a particular feature that would cause your project to fail to build on an earlier version of Xcode, you see a Compatibility Notice in the bottom-right corner of your project window. Click Show Conflicts in the Project Info window to investigate and resolve the compatibility issue.
Xcode 3.2.3 has a number of features, enhancements, and bug fixes over Xcode 3.2.2:
iOS Development
When developing generic applications (applications that don’t require special features, such as push notifications or in-app purchases), you can create, download, and install provisioning profiles and signing certificates in the Xcode Organizer, without having to directly log in to the iPhone Provisioning Portal.
llvm-gcc4.2 and LLVM Compiler 1.5 (“clang”) are now supported compilers.
Added support for blocks.
Support for iOS 4.0 features has been added to Property List Editor.
In previous versions of Xcode, iPhone apps that created large crash or diagnostic logs would cause Xcode to use excessive amounts of processor time downloading and symbolicating the logs from the device. This process has been optimized in Xcode 3.2.3. 7367900
General
Most of the functionality of the Active SDK section of the Overview pop-up menu in the Project window toolbar has been removed because it provided limited utility to Mac OS X developers and was confusing to iOS developers. For iOS development, instead of switching the active SDK in the Overview menu, you should should set the Base SDK for the project or target to the latest one you want your application to use (typically the latest SDK. You should also set the iOS Deployment Target to the earliest version of iOS on which you want your application to run. 7885934
For iOS development, use the Overview menu to:
Specify whether you want your application to run on a device or in the simulation environment.
Specify the device or the iPhone Simulator version on which you want the application to run (in the Active Executable section of the menu).
Some projects experienced loss of responsiveness in the user interface while indexing is taking place. This has been significantly improved. 7704873
Downloading documentation sets could get caught in an infinite loop under some circumstances. This has been fixed. 6945747
The dialog to add frameworks or libraries to a target presents the available items in alphabetical and case-insensitive order. 7899706
Text Editing
The first developer release of Xcode 3.2.3 miscalculated the width of tab characters for some fonts. This is fixed in later seed releases. 7786402
Auto-completing a method signature that takes a block with no parameters no longer inserts a nonsensical void argument. 7549624
Autocompleting a protocol definition now correctly adds the required angle brackets. 7067616
A bug where certain superclass properties would not be autocompleted has been fixed. 7045480
Commenting out a line no longer indents the line as if the line were a new actual comment. 7202239
When editing Info.plist files, the NSKeyEquivalent key default value is now correct. 7886355
Building
The first developer release of Xcode 3.2.3 was missing C++ libraries for gcc-4.2 in the iPhone 3.0, 3.1, and 3.2 SDKs, so C++ and Objective-C++ code would fail at link time. These libraries are present in later versions of Xcode 3.2.3.
The Clang compiler has been updated to version 1.5 and renamed “LLVM compiler 1.5.”
Distributed Builds now uses the correct syntax for using all available cores on remote machines, and has corrected behavior for invoking or falling back to localhost. This should result in faster and more reliable builds with Distributed Builds. 7833824, 7831743, 7691990, 7831765, 7831781
Static library (.a
) files are no longer code signed. 7869388
Debugging
A bug that caused remote debugging to fail when the executable name is different than the target name has been fixed. 7506748
A case where breakpoints in a shared library would not be hit has been fixed. 7212899
Copying text from the backtrace and/or console now results in exactly one copy of the text on the pasteboard, not zero or two. 7254118, 7531435
Here are some commonly-reported issues that are known with this release of Xcode.
Saving a source code file may cause the insertion point to appear past the end of the document. 7021881
There is not currently a way to Find in Selection, or to set the Find options (Wrap Around, Regular Expression, etc.) using a keyboard-only workflow. 7051892
Run Script build phases should use “error:” and “warning:” to signal error or warning conditions to appear in the Build Log. Under certain circumstances, the Build Results color (green or red) may not agree with the message (“Build Succeeded” or “Build Failed”). 7065175, 7064841
There is no progress indicator in the Documentation references pane for downloading documentation sets. Open the Xcode Activity Viewer. 7074547
In certain cases, message bubbles for errors on consecutive lines can overlap. 7021634
The Xcode text editor doesn’t display HTML documents as formatted HTML. To see HTML documents in Xcode, drop them on the Documentation window. 6803855
Xcode uses “English”, “French,” and “Japanese” as its localization designators, rather than the ISO standard “en”, “fr”, etc. 3160993
While most known cases have been taken care of, having a space, comma, slash, backslash, tilde, or other character special to the Unix shell in the directory name of any parent folder of your project can cause your project build to fail in unexpected ways. 4101529
Having the same file in your project referred to both directly and via a symbolic link from separate places can corrupt the project index and cause Xcode to crash. Remove the project index and remove the symlink reference to the file. 4056799
On a very small number of systems and for unknown reasons, the I-beam editing cursor does not hide when you start typing. 4191120
Code completion cannot be used while using Edit All in Scope. 5970976
The Touch menu item (or clicking in the “hammer” column) only works for implementation files, not header files, libraries, nib files, resources, or other project files. 4912312
If you define a source tree in the Preferences pane, you must quit and reopen Xcode for it to take effect. 4416517
The function pop-up menu does not distinguish between functions with the same name but different signatures. 2566673
Referring to an .xcconfig
file using #include
does not consult any of the target’s search paths; all referenced configuration files should be stored in the same directory. 5850085
Using a port number when setting up a Subversion repository in the Repositories window generates an inaccurate svn+ssh:
URL. Instead of entering the port number in the Repository pane in SCM preferences, leave off the port number in Xcode and add an entry with the port number in ~/.ssh/config
for the desired host. 5801847
If you build a project prior to importing it into SCM, then the project’s build folder may be imported into your repository, and subsequent commit-entire-project operations fail. Remove the build folder from the repository. 4896482
Regular expression searches are limited to single lines. 5842770
Only the version installed in /Developer
is available as a distributed build volunteer by other computers. 5939834
When adding frameworks or libraries using the Target inspector, you can only see frameworks in the SDK that the inspected target is configured for. To add frameworks from a different SDK, first change the Base SDK setting of that target. 5931773
Targets that are configured for multiple SDKs or compilers will show duplicate compiler build settings. 6643362
Find in File and Project Find only find only the actual key names in a property-list file, not the property names as seen in Property List Editor. 5946354
The default Build and Run/Debug toolbar item is not useful in projects without a configured Executable, such as KEXT projects. Add a Custom Executable or replace the Build and Run/Debug item with Build. 5939297
Attaching to a process from Xcode will fail if the active architecture in the project does not match the architecture of the running executable.
Xcode 3.2.2 is an update of the Xcode toolset. It is available only with Mac OS X 10.6 Snow Leopard and does not run on previous versions of Mac OS X.
Xcode 3.2.2 includes all the enhancements and bug fixes in Xcode 3.2.1, as well as significant new features and enhancements.
Xcode 3.2.2 supports development for iPhone SDK 3.3 and has significant improvements in the management of provisioning profiles in the Organizer and packaging of applications for uploading to the iTunes Application Store. See the iPhone SDK 3.3 Release Notes for details.
Shared Workgroup Builds has been updated with a significant new version of the distcc tool. This not only fixes crashing bugs in distcc on Snow Leopard that often prevented distribution of builds, but also has significant new features. The distcc mechanism now uses an include-file server instead of distributing precompiled header files, which significantly improves the performance and scaleability of distributed builds and also removes the restrictions that require absolute homogeneity among build machines. Distributed Builds now work with the clang compiler and with the iPhone SDK.
Supported Configurations
Xcode 3.2.2 runs on Mac OS X v10.6 Snow Leopard on a Mac with an Intel processor. It does not install or run on earlier versions of Mac OS X. Xcode supports universal development for Mac OS X 10.4 Tiger and Mac OS X 10.5 Leopard using the Mac OS X SDK support; it does not support development for Mac OS X v10.3 or earlier.
Xcode Installation
The Xcode tools by default are installed into the /Developer directory, but you may choose to install them (or move them after installation) to any other directory on any volume. The tools will work normally so long as they remain in their designated locations relative to the top-level directory, even if it is not named Developer and located on the startup volume.
This flexibility allows you to have multiple versions of the Xcode toolset installed on the same computer but running independently. Xcode uses the SDKs, build tools, and auxiliary applications from the same directory it is launched from whenever possible, rather than those from the root system. To refer to those files in your own projects, use the relative-to-Xcode-folder reference style, whose root path is $(DEVELOPER_DIR)
.
The Xcode toolset installer also installs the standard system development tools and interfaces into /usr
, so conventional makefile-based and config-based builds operate correctly. Use the xcode-select
command-line tool to set the default toolset for command-line builds.
Project File Format Compatibility and Versioning
Xcode 3.2.2 reads and builds the targets of project files created in Xcode 2.1 through 3.2.1, and automatically upgrades project files created in Xcode 1.5 through 2.0. Xcode 3.2.2 does not reliably read project files created in Xcode 1.2 or earlier, or Project Builder project files. Open and upgrade these project files in Xcode 2.5 before opening them with Xcode 3.2.2
Note: It is strongly recommended that, when converting pre–Xcode 2.1 project files to Xcode 2.2 and later, you also upgrade all the project’s targets to native targets using the item in the Project menu. Many Xcode features, including support for building universal Binaries, are not supported for non-native (JAM-based) targets.
Xcode 3.2.2 doesn’t import CodeWarrior project files. Install Xcode 2.5 and CodeWarrior Pro version 8.3 and follow the documentation in Porting CodeWarrior Projects to Xcode.
Project files opened and edited with Xcode 3.2.2 are generally compatible with Xcode 3.2.x, Xcode 3.1.x, Xcode 3.0, and Xcode 2.5; this means that project files you create or open with Xcode 3.2.1 can always be opened and built with Xcode 2.5 through 3.1. If you use a particular feature that would cause your project to fail to build on an earlier version of Xcode, you see a Compatibility Notice in the bottom-right corner of your project window. Click Show Conflicts in the Project Info window to investigate and resolve the compatibility issue.
Xcode 3.2.2 has a number of enhancements over Xcode 3.2.1:
iPhone Management
When building an iPhone Application target, the Build menu will contain a menu item “Build and Archive” that packages the build product for uploading to the iPhone Application Store.
Management of multiple attached devices has been significantly improved; when switching the Active SDK, Xcode will automatically switch the Active Executable to a device that is compatible with the SDK being used.
Project Management
Xcode now recognizes Perl files with the .perl
extension, as well as .pl
.
When creating new projects or files, Xcode suppresses the period character after the ORGANIZATIONNAME template macro if your Company Name (set in the Project’s Get Info pane, in your Address Book card, or in Xcode’s user defaults) also ends in a period.
A crash that occurred when building Class Models with certain Base SDK paths has been fixed. 7178994
A crash that occurred when opening Data Models with multiple versions of Xcode installed has been fixed. 7049334
Adding a .zip
file to a target no longer adds that file to its Link Binary with Libraries phase. This was previously supported for Java development, however, current developers use .zip
files for resources far more often than for Java code, so .zip
files are now placed in the Copy Bundle Resources build phase instead. If you are adding Java class .zip
files you must move the .zip
file from the Copy Bundle Resources build phase to the Link Binary build phase manually. 7302929
Documentation Viewing
Users with multitouch devices (track pads or the Magic Mouse) can now Go Back or Go Forward in the Documentation Viewer with the swipe gesture.
The tooltip in the Documentation preferences pane now shows more information about documentation sets.
Building
Xcode 3.2.2 has better support for the Intel icc
compiler family. 7087560 7087577
Changing the effective Product Name, Executable Name, Deployment Target, Product Type, or Base SDK build settings for a target now forces a complete rebuild of that target. This avoids inconsistencies between code and resources (such as the Info.plist) that are based on these values. 7062757
The compiler flag that controls calling of C++ constructors and destructors for C++ objects referred to by Objective-C classes changed its default definition in gcc 4.2 in Xcode 3.2 (formerly NO, now YES). Now the Xcode build settings correspond to this default, and also impose this default to be YES on gcc 4.0 as well. 7369196
The build setting that controls CodeWarrior-Style Inline Assembly (-fasm-blocks) was accidentally disabled for PowerPC code in Xcode 3.2. It has been restored in Xcode 3.2.2. 7186007
There is a new Compiler Warnings build setting for “Global Construction or Destruction Required” -Wglobal-constructors
for the gcc 4.0, gcc 4.2, and llvm-gcc4.2 compilers only. It is off by default. 7422803
Changing the contents of a file contained in a Folder Reference (blue folder) will cause the Folder Reference to be processed on the next build. On the one hand, this means that editing a resource contained in a Folder Reference will assure that the changed resource is copied into the build product. On the other hand, it also means that all other files in that Folder Reference will be copied as well. While this will save you from having to do clean builds when you edit resources, you may also wish to refactor your resources to avoid copying rarely-changing resources in the same directories as frequently-changing ones. 2579789
Java compiler errors are now reported correctly in Build Results. 6965152.
Notes from Unit Tests are now shown correctly in Build Results. 7028765
The xcodebuild
tool now takes a new option, -xcconfig
, that designates a configuration settings file to be used in the build. The settings in that file are defined at the command-line level and override all other settings, including Target settings and Active Configuration/Active SDK settings. 7072008
The output of xcodebuild
has changed slightly. Build settings defined at the command line are now noted in the build log. 6354925
Projects with many targets and configurations could take inordinately long amounts of time to open in Xcode or change any build setting when multiple iPhone devices are attached to the computer. This has been fixed. 7271634, 7318425
Changing the Active Configuration now selects the correct Active Executable last associated with that configuration. This elimintes the circumstances where building and running would launch on the Device instead of the Simulator or vice-versa. 7424873
Superfluous console output when compiling data files with a Deployment Target of Mac OS X 10.4 has been eliminated. 6962013
Setting defaults write com.apple.Xcode SenTestObserverClass <classname>
allows you to use the given subclass of SenTestObserver for reporting test results, instead of the default SenTestLog. 7292417
Distributed Builds
The distcc and distccd tools have been updated to the latest Open Source released version, v3.1. This version works correctly on Snow Leopard includes a new mechanism for processing header files during building that is more efficient than previous versions, and allows distributed builds to scale up to more processors than previous versions. When building with Shared Workgroup Builds, precompiled headers are not generated or used. If your project builds against a Mac OS X or iPhone SDK, the distributed builds will use the header files found in the SDKs on the build volunteers. This allows Shared Workgroup Builds to function independently of the precise version of the OS, Xcode, or specific compilers. 6149269
Shared Workgroup Builds now communicates specific information about the number of jobs supported by each host, so the Priority setting is no longer used. 7229674
Shared Workgroup Builds now supports the Clang compiler. 7255691
Debugging
C++ Standard Template Library Debug Mode (GLIBCXX_DEBUG
) is not supported with gcc 4.2. In Xcode 3.2 and 3.2.1 this would cause C++ programs compiled with gcc 4.2 to behave oddly, usually with string I/O to streams. In Xcode 3.2.2 the macros that invoke STL Debug Mode are suppressed when using gcc 4.2 so that C++ programs behave correctly when built with the Debug configuration. 7367146 7254418
Xcode 3.2.1 is an update to the Xcode toolset. It is available only with Mac OS X 10.6 Snow Leopard and does not run on previous versions of Mac OS X.
Xcode 3.2.1 has a small number of bug fixes from Xcode 3.2.
A bug that prevented Instruments and Shark from showing symbolic data (especially in the iPhone Simulator) has been fixed. 7214774
Building a Unit Test target would cause Xcode to hang and/or crash when the system clock was set to a time zone that contained the digit “5.” This affected UTC-5 (Central Daylight Time) and UTC+5 (Pakistan Standard Time) primarily, and has been fixed. Related bugs that suppressed the display of certain Unit Test results have also been fixed. 7047278, 7028675
Core Data mapping models could be written in a form incompatible with earlier versions of Xcode that would cause Xcode 3.1.4 and earlier to crash when reading them. This has been fixed. 7052986
Uncaught Exception crashes in the Source Code Editor have been fixed. 6978943
A problem in Instruments where the Instruments hot keys would not function after applying the 10.6.1 update has been fixed. 7213315
Various code generation errors and crashes have been fixed in gcc-4.2, gcc-llvm4.2, and the Clang 1.0 compilers.
Setting breakpoints in Objective-C code now works when running 64-bit executables. 7226672
Duplicating a top-level item in an Interface Builder file now sets up the connections properly, rather than leaving them wired to the same objects as the original was. 7163617
Nib files imported from IB 2.x format are no longer set to Development Target of IB 3.2 by default, and will again be useable in older versions of Interface Builder. 7213769
Problems reading certain Core Data models that would prevent some Xcode projects from opening in Xcode 3.2 have been fixed in Xcode 3.2.1. 7158725
Two infrequent crashes in the Documentation Viewer have been fixed. 6860278, 6958406
Two infrequent crashes while debugging have been fixed. 7156562, 7034038
Using Add Existing Framework in an iPhone project with a Group selected now shows the iPhone SDK frameworks instead of Mac OS X or no frameworks. 7239455
Instruments templates in older iPhone SDKs have been updated to work with the new Instruments. 7200260
An erroneous recursive symlink in the Mac OS X 10.5 SDK has been removed. This caused many things, including Xcode, to hang or crash when attempting to enumerate the contents of the 10.5 SDK. 7105297
These are the most commonly-reported issues in Xcode 3.2 that are not covered by the bug fixes above.
The single-file Incremental Find feature has all the capabilities of the previous Find window, but the controls are in different places. The Whole Words, Ignore Case, Regular Expression, and Wrap Around options are in a pop-up menu under the magnifying glass icon in the Find window.
The Replace in Selection feature is obtained by holding down the Option key while clicking Replace.
While downloading new Documentation Sets, you can monitor the progress by choosing Window > Activity Viewer.
On occasion, if the insertion point is at the end of the document, saving the document will cause the insertion point to move to a nonexistent line. This is harmless. 7021881
The first word in build messages is capitalized by default, even if that word is a file name that ought to be lowercase. 6927339
On occasion, Xcode enters a state where clicking on a document selects it but does not open it in the embedded editor. This can be remedied by quitting and reopening Xcode. 6812777
All Cocoa apps now follow the user setting for Recent Documents Count set in System Preferences > Appearance. If your Recent Documents and Recent Projects lists in Xcode are empty, set this system preference to a larger number, or use the NSRecentDocumentsLimit user default.
If you are attempting to build for the iPhone Device and get a linker failure due to “file is not of the required architecture,” check your target’s Framework Search Path. There are ways in which Xcode will add an explicit path to one SDK’s platforms that will hide the frameworks in other platforms. If there are any paths that point directly into SDK directories, remove them.
When building iPhone apps for debugging on a device, make sure you use a Development provisioning profile. A Distribution or Ad-Hoc Distribution provisioning profile does not allow debugging.
The Errors and Warnings columns in the Groups and Files tree and Details view no longer show the count of errors and warnings per file. 7181644
The default gcc 4.2 compiler is not compatible with the Standard C++ Library Debug Mode. C++ programs compiled with Xcode 3.2 may not work in the Debug configuration. To fix this, set the Compiler Version to 4.0, or edit the Debug configuration’s Preprocessor Macros and remove the entries:
_GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1
If you are building large or complex C++ files and have less than half a gigabyte of memory per processor core on your machine, Xcode’s algorithm for backing off on issuing new compile jobs in low-memory situations may not take effect early enough, and your machine may start swapping. If this happens to you consistently, consider setting the PBXNumberOfParallelBuildSubtasks user default.
Project templates for PyObjC and RubyCocoa have been taken over by the maintainers of those technologies, and the latest versions can be obtained from their repositories:
Xcode 3.2 is a revision of the Xcode toolset. It is available only with Mac OS X 10.6 Snow Leopard and does not run on previous versions of Mac OS X.
Xcode 3.2 includes all the enhancements and bug fixes in Xcode 3.1.3, as well as significant new features and enhancements.
There is a new Xcode splash screen that allows you to open recent projects or navigate to interesting places in Xcode directly from the splash screen. As with the Xcode News window in 3.1, you can turn off this splash screen using the checkbox in the window.
Xcode has full integrated support for static analysis of C and Objective-C source code using the Clang front end. You can invoke the static analyzer by choosing Build And Analyze from the Build menu. Analysis results show up in the Build Results window and message bubbles in the same way that warnings and errors do.
The Clang-LLVM compiler is now a fully-supported compiler option for C and Objective-C source code. When using the Clang-LLVM compiler, error and warning messages indicate the location within the line of the erroneous text.
The Build Results window has been completely redesigned to support advanced filtering of build results and to keep a persistent list of errors and warnings across builds. The Errors and Warnings smart group functionality has been merged into the Build Results window, and the smart group has been removed.
The single-computer build performance of Xcode has been improved to the point that distributed building with Distributed Network Builds is slower than local builds in most circumstances. The Distributed Network Builds feature has been removed from Xcode. Shared Workgroup Builds (distcc
) still offers performance gains in most situations and is still supported.
Xcode’s default font for text editing, debug logs, and build transcripts is now Menlo-11. If you have set a custom font, this will not affect you; you can also use Fonts & Colors preferences to use Monaco-10 or any other font of your choice.
Significant improvements have been made in the accuracy, completeness, and transparency of code completion. The most notable enhancement is that missing square brackets are be inserted automatically as you type, and code macros for language constructs, such as if
and switch
statements, are offered at appropriate times. Many cases reported by developers of inaccurate or unhelpful completion suggestions have been fixed.
Message bubbles have been redesigned to fit in the affected line, rather than taking space between lines. Multiple message bubbles on the same line are initially collapsed and can be expanded to see all errors or warnings.
The Documentation window has been completely redesigned and now has very fast lookup of any API or command from a single search field. Quick Help (formerly Research Assistant) is smaller and faster, and links directly to the Documentation window. The search field in the Help menu now looks up information in the Xcode guides. The Help menu also offers Xcode Quick Start, which provides access to essential development resources.
Most sample projects are no longer located in the <Xcode>/Developer/Examples
directory, but are instead integrated into the documentation sets for the relevant technologies. Sample projects can be downloaded and copied to your working directory entirely within Xcode, without using the Finder or command line.
The debugging workflow has been reworked to make the Run and Debug more intuitive by using a single toolbar button for Run and Debug. Toggling the Breakpoints button in the toolbar also switches between Run and Debug. Hold down Option to toggle the action of the Build and Run toolbar button between Run and Debug.
Standard user accounts are be asked to authorize developer privileges with either an admin or developer group user and password once per log-in session when debugging or using the performance tools.
The Reopen Projects on Xcode launch option in General preferences specifies whether Xcode reopens projects that were previously open in the last Xcode session. When this option is selected, if no windows are open at Xcode launch, the New Project dialog appears.
You can rename a project and its significant components using the Project > Rename menu item.
All project templates have been updated for Snow Leopard. The default configuration for most Xcode projects and targets is now biased towards 64-bit universal applications. Carbon and JAM-based project templates have been removed.
Xcode also has a few configuration changes appropriate to Snow Leopard:
Xcode 3.2 builds software only for the Mac OS X platform and the PowerPC, Intel, and 64-bit Intel architectures. The 64-bit PowerPC architecture is not supported.
The default compiler for Xcode 3.2 is GCC 4.2. The GCC 4.0 compiler is still supported, and projects that specifically set the GCC_VERSION
build setting to use it will continue to do so.
To support the blocks functionality in Snow Leopard, all project and target templates are configured to use the Mac OS X 10.6 SDK and the GNU99 C language syntax.
On Mac OS X v10.6, the Xcode application launches as a 64-bit, garbage-collected application by default. Like all Snow Leopard applications, Xcode no longer runs on PowerPC, though it still supports development for 32-bit PowerPC.
Xcode 3.2 doesn’t support building with GCC 3.3 or the 10.3.9 SDK. These components are not provided with Xcode 3.2 and cannot be installed in an Xcode 3.2 Developer folder.
JAM-based projects are officially deprecated and support for them has been removed. Upgrade JAM-based projects to native targets in Xcode 3.1.3 before opening them in Xcode 3.2.
The following bugs reported against the WWDC Seed release have been fixed:
Restoring snapshots made of objects in the Organizer has been fixed. 6933698
Following URLs in documentation sets now works correctly. 6953220
Unit tests now load the correct libraries for the given architecture and set the PATH
variable correctly. 6868437, 7011002
Many issues with the Build Results window not showing unit test or Run Script build phase output have been fixed.
Many issues with the Find bar were addressed. The keyboard workflow was refined; pressing Escape no longer returns you to the original point prior to the Find. Problems with replacing within the current selection have been fixed. Regular expression searching now disables inapplicable options like “whole word.”
There is now a checkbox in Code Sense preferences to disable automatic opening bracket insertion. 6867545
Problems with using xxternal Editors have been fixed. 6963990
A frequent crash in XCLayoutManager
has been fixed. 6933512
Supported Configurations
Xcode 3.2 runs on Mac OS X v10.6 Snow Leopard on a Mac with an Intel processor. It does not install or run on earlier versions of Mac OS X. Xcode supports universal development for Mac OS X 10.4 Tiger and Mac OS X 10.5 Leopard using the Mac OS X SDK support; it does not support Mac OS X v10.3 or earlier.
Xcode Installation
The Xcode tools by default are installed into the /Developer directory, but you may choose to install them (or move them after installation) to any other directory on any volume. The tools will work normally so long as they remain in their designated locations relative to the top-level directory, even if it is not named Developer and located on the startup volume.
This flexibility allows you to have multiple versions of the Xcode toolset installed on the same computer but running independently. Xcode uses the SDKs, build tools, and auxiliary applications from the same directory it is launched from whenever possible, rather than those from the root system. To refer to those files in your own projects, use the relative-to-Xcode-folder reference style, whose root path is $(DEVELOPER_DIR)
.
The Xcode toolset installer also installs the standard system development tools and interfaces into /usr
, so conventional makefile-based and config-based builds operate correctly. Use the xcode-select
command-line tool to set the default toolset for command-line builds.
Project File Format Compatibility and Versioning
Xcode 3.2 reads and builds the targets of project files created in Xcode 2.1 through 3.1.3, and automatically upgrades project files created in Xcode 1.5 through 2.0. Xcode 3.2 does not reliably read project files created in Xcode 1.2 or earlier, or Project Builder project files. Open and upgrade these project files in Xcode 2.5 before opening them with Xcode 3.2.
Note: It is strongly recommended that, when converting pre–Xcode 2.1 project files to Xcode 2.2 and later, you also upgrade all the project’s targets to native targets using the item in the Project menu. Many Xcode features, including support for building universal Binaries, are not supported for non-native (JAM-based) targets.
Xcode 3.2 doesn’t import CodeWarrior project files. Install Xcode 2.5 and CodeWarrior Pro version 8.3 and follow the documentation in Porting CodeWarrior Projects to Xcode.
Project files opened and edited with Xcode 3.2 are generally compatible with Xcode 3.1.x, Xcode 3.0, and Xcode 2.5; this means that project files you create or open with Xcode 3.2 can always be opened and built with Xcode 2.5 thru 3.1. If you use a particular feature that would cause your project to fail to build on an earlier version of Xcode, you see a Compatibility Notice in the bottom-right corner of your project window. Click Show Conflicts in the Project Info window to investigate and resolve the compatibility issue.
User Preferences and Configuration
You may use the same user directory on computers using different versions of Mac OS X and Xcode. When you do, your user preferences for Xcode are generally portable across Xcode versions, and settings you make in Xcode 3.1.x are honored in Xcode 3.2. There are some special cases to note:
Recent Projects from Xcode 3.1.x may not appear in Xcode 3.2’s Recent Projects menu
You will not see Xcode 3.2’s new default values for certain settings, such as fonts and key bindings, if you have customized those settings
Settings for removed features (such as Shared Workgroup Builds) may be lost when moving from Xcode 3.1.x to Xcode 3.2 and back
Xcode 3.2 has a number of features and enhancements over Xcode 3.1.3:
General
All features of Xcode have been adapted to support the new blocks language structure in C and Objective-C, including syntax coloring, code completion, project indexing, symbolic searching and navigation, and refactoring.
The New Project assistant has consolidated the templates for similar project types. For example, there is now a single Cocoa Application template, and you choose Document-based and/or Core Data-based variants with checkboxes.
Project Management
There is now a Project > Rename Project menu item that presents a dialog box allowing you to change the name of the project , and also the names of project items derived from the project name (targets, build products, executables, supporting files).
Xcode supports multiple project roots for a single project to configure a project made up of multiple independent directories. This supports certain project configurations where the project sources are scattered across several directories. Identifying each directory separately instead of a a single root directory, which may contain undesired subdirectories, significantly improves the performance of snapshots, source control, and project find operations. It has no effect on building.
The Add Frameworks functionality now brings up a sheet of relevant frameworks in the current SDK, rather than the Open File dialog.
When opening a project, the initial active architecture for the project is now set to the value of $(NATIVE_ARCH_ACTUAL)
, that is, the actual architecture of the build computer. This means that projects that can be built 64-bit are built as such by default on 64-bit computers.
Project find is now significantly faster, uses significantly less memory, and does not block the user interface while searching. The Find Results smart group retains the results of previous Project Find operations; you can now delete result sets in order to free up the memory they use if you no longer need the find results.
Editing and Navigation
Go Back/Go Forward navigation within text files now works like in Web browsers and other editors. As you edit, browse, and navigate, Xcode keeps a trail of interesting recent locations in each file, and Go Back now regresses through the locations rather than just by file, for the ‚óÄ ‚ñ∂ controls, the Go Back/Go Forward menu items, or their keyboard equivalents. To navigate by file, hold down the Shift or Option keys.
Single-file find is now implemented with an in-editor toolbar rather than a separate window. Find is incremental; it highlights matching strings as you type them in the search field. Choosing Find > Find Next or pressing Return cycles forward through the found results. Choosing Find > Find Previous or Pressing Shift-Return cycles backward. Pressing the Escape key cancels a find in progress and scrolls back to the original selection. Pressing Tab dismisses the find toolbar, and leaves the most recently found match selected.
Important: The Regular Expression, Ignore Case, Wrap Around, and Recent Searches options for the Find command are available in the pop-up menu in the Find text field. Note that regular expression searches are computationally expensive, and aren’t performed as you type them; press Enter or Tab to perform the find.
Choosing Replace from the Find pop-up menu (or pressing ‚åò‚å•F) reveals the Replace text field and related buttons. To replace text within a selection instead of the entire file, hold Option and click the In Selection button.
Message bubbles have been redesigned to be less obtrusive. Multiple messages on one line are noted by a lozenge on the right margin; click it to disclose all messages on that line. The menus that control message bubbles now take effect globally, rather than having to be set in every file.
In the Xcode text editor, the context menu has reorganized the Find options, and added a new Find option to find the selected text with Quick Help.
Syntax coloring is now supported for OpenCL and GLSL syntax.
Property List Editor now supports semantic editing of Interface Builder .classdescription
files.
Property List Editor now supports Find & Replace as well as Find.
Code Completion
Code completion has been refined and enhanced significantly. The following scenarios now offer more useful and accurate completions:
Member variable completions (they no longer offer method or function names)
Category, protocol, and superclass definitions
Members of unions and structures
@selector()
expressions
Flags in @property
declarations
@synthesize
statements
Completions in class methods now filter out instance variables that are inaccessible in a class method
Methods that use blocks as arguments now include a prototype of the block signature
Code completion adds balancing square brackets automatically in places where they are semantically appropriate. You can change this behavior with a checkbox in Code Sense preferences.
The keyboard shortcuts for invoking code completion have been augmented. Immediately after code completion of a method, pressing Tab advances to the next placeholder in the method prototype. In addition, pressing Enter or Return reduces the placeholder to plain text and allow editing; this is useful for keeping the type or variable name in the placeholder.
Documentation
The Documentation window has been completely rewritten with modern concepts and interface elements. Searching is now unified; without having to preselect the search type, you just type your search term into the search field. Xcode performs simultaneous API, title, and full-text searches. The Help menu search field no longer searches user help. Instead it presents search results in the menu; when you choose one of those results, the referred content appears in the Documentation window.
Documentation-set download is now on background threads and is more transparent. You can manage docsets and add third-party doc sets in Documentation preferences. When checking for updates, Xcode will request authentication to log in to the Apple Developer Connection with your developer credentials; this may occur several minutes after you launch Xcode.
The Research Assistant has been replaced by a smaller and faster window called Quick Help. It still shows crucial information as you enter or browse source files. You can open Quick Help with Option–double-click (which formerly opened the Documentation window). It goes away when you start typing unless you drag the Quick Help window; then it stays open so you can use it like an inspector. You can customize what’s shown in Quick Help in Documentation preferences. If you open Quick Help from the Help menu and drag it aside as a floating window, it shows help for the currently selected symbol, and also for symbols suggested during code completion.
When downloading a ZIP archive of a sample-code project, Xcode asks you to choose a download directory, places the unarchived project directory in the download directory, and opens the sample project.
Building
The default compiler for Xcode 3.2 is GCC 4.2. This is changed from previous versions of Xcode in which the default compiler is gcc 4.0. If your project has not been updated to compile correctly with GCC 4.2, you may need to make source code changes, or change your Project Settings to use gcc 4.0 as the project’s compiler version.
The Clang-LLVM 1.0 compiler is now a supported choice for Compiler Version. Source code compiled with this compiler should be functionally equivalent (if not identical) to code compiled with the LLVM-GCC4.2 compiler, as the back-end code generator is the same. When using the Clang-LLVM compiler, error and warning message bubbles use special highlighting and a small caret to indicate the location within the line of the erroneous source, so you can identify errors more easily. The Clang compiler will issue compiler warnings and errors for problems that GCC does not catch; see the Clang release notes for full details. Note that the Clang compiler does not support C++ or Objective-C++ source code; the LLVM-GCC4.2 compiler is used as a fallback for C++ and Objective-C++ source files. Note that the Clang compiler does not yet work with Shared Workgroup Builds.
A new Build and Analyze menu item allows you to run the Clang static analyzer on your target’s source code, even if it is being built with another compiler. Static Analysis results show up like warnings and errors, but give specific instructions on where and what the issue is. Double-clicking the Static Analysis result shows the flow of control of how the problem manifests itself in your source code, with step controls to go through the assignments, branches, and other steps that contribute to the issue.
The Build Results window has been completely redesigned. The scope bar allows you to sort and filter build results in new ways. Latest Results always shows the specific results of the last compile or build, while All Results shows a consolidated list of all active errors, warnings and static analysis issues. The All Results view consolidates the results of all builds, so you don’t lose warnings or Static Analysis results in one file by rebuilding another; the All Results view is saved when your project is closed, and restored when it is reopened.
A pop-up menu in the scope bar allows you to show the build steps (All Messages), just the errors, warnings, and static analysis results (Issues Only), or only the errors. In the All-in-One layout, the toolbar Search bubble lets you filter on text in the steps or messages; you can add this bubble to the Build Results window in Default or Condensed layout if you wish.
For each build step, a flyover button on the right side allows you to disclose the build transcript for that step, which can be dragged or copied to a text editor. Tool tips and the context menu in the Build Results window provide additional information about the build, including the ability to open the currently visible transcript steps as a text file.
Individual unit test invocations and results are now broken out on separate lines in the Build Results log.
The Preprocess menu item now produces source files with file extensions .ii
, .mi
, and .mii
for preprocessed C++, Objective-C, and Objective-C++, respectively.
There are new build settings to enable SSE4.1 and SSE4.2 support.
If you set a custom name for a Run Script build phase, the name of that build phase is logged to the build transcript at build time.
Debugging
The menu in the datatip for a class symbol during debugging contains two new commands: Print Referrers to Console and Print Roots to Console. This aids in finding objects with references to the indicated object that prevent it from being garbage-collected.
While debugging, you can step through the threads displayed in the debugger with Run menu commands Next Thread and Previous Thread. Note that these threads are in numerical order, not chronological.
If a thread has been given a name with the pthread_setname_np
function, Xcode will show that name in the Debugger user interface.
You can open multiple memory browsers while debugging.
Datatips are more tolerant to moving the mouse momentarily outside their bounds.
The Step In inline step control is faster and works more reliably.
Added the Stop on Objective-C Exceptions option to the Run menu.
You can have the debugger attach to the next launch of a process using the “Wait for next launch/push notification” option in the Debugging pane in the Executable Info window.
More intuitive indication of breakpoints state in the toolbar.
Data formatters support unichar
and wchar_t
types; and CFStringRef
and NSString
display is no longer limited to a char representation. Data formatters also fail back to the base type when the dynamic type does not have a formatter specified.
The GDB command info malloc-history
runs over all allocations when using the -range
option.
There is better error reporting when the executable doesn’t contain code for the active architecture or is not compatible with your computer’s architecture.
Breakpoints work in the disassembly view.
You can double-click breakpoints in the gutter to edit them.
Xcode runs programs under GDB for more consistent crash catching and better crash-point reporting. Launch times are nearly as fast as from the Finder. To launch processes that cannot run in the debugger, deselect the “Auto-attach debugger on crash” option in the Executable Info window.
Refactoring and SCM
The rename transformation now also renames the custom getter/setter method attributes of related property declarations.
When checking a project out from an SCM system, Xcode can now automatically configure the project for the SCM system from which it originated. Check the “Configure Projects Automatically” check box in SCM preferences.
SCM Compare is now configured to do a merge operation, to make it easier to save the results to the working file.
The Subversion SCM system can now be used when not connected to the network. Transactions are committed automatically upon reconnection.
The Subversion SCM system now uses the Merge History feature of Subversion 1.5, so that change logs and annotations reflect the original transaction, rather than the merge that brought the change into the current tree.
Along with the usual fixes for memory leaks, crashing bugs, and performance issues, the following bugs have been fixed in Xcode 3.2:
Project Management
Xcode can now save changes to your project’s user file (breakpoints, window positions, etc.) even if the main project file is locked. 4440006
Renaming an item in the Organizer in certain circumstances no longer crashes. 6041336
Go to Counterpart now will go to an .hpp
file from a .mm
file and vice versa. 5576429
Sorting items in a Build Phase no longer loses build phase information like per-file build settings and header file role. 5999322
Two projects with the same name will no longer attempt to share the same project index, so you won’t see duplicate or conflicting entries during symbolic searching and navigation. 3836525
Project indexing now recognizes multiple properties declared on the same line. 5574162 Function declarations and definitions where the name itself is enclosed in a set of parentheses are also recognized now. 6549263
Xcode and Spaces are now more cooperative. 5308807
The Xcode organizer no longer signals an internal error when other processes change many files being displayed in it. 6180560
Xcode’s Dock menu now activates the Xcode application when choosing a window, and no longer has extraneous items like Minimize. 5163672, 2920696
For brand-new users, the default directory for storing new projects is the user’s Documents directory, rather than the system root directory. 6813678
Text Editor
Replace All in huge files is significantly faster. 4911262
Message bubbles now appear in non-frontmost windows without needing to be activated. 5975206
Edit All in Scope and code completion work better together, without visual artifacts or changing the insertion point. 6050123
Edit All in Scope now works correctly when entering non-ASCII characters. 5983534
Problems with code completion and multiple arguments have been resolved. 6057987
Code completion: Inline completion no longer disappears when typing additional correct characters. 5934209
The function popup again shows functions declared in extern C { }
blocks. 5761840
Syntax coloring now colors __byref
correctly. 5966506
Syntax coloring now colors declared @property
variables correctly even if they do not have a backing instance variable. 6516155
Syntax coloring now supports DTrace scripts.
Indentation behavior has been corrected with solo closing braces, with use of dot syntax in multiline method invocations, and with aggregate array assignments. 6409462, 6088576, 5819910, 5409557
Japanese text input issues have been resolved. 5983064
@package
instance variables now are indexed properly and show up in the Class Browser and Class Model. 5795718
Indenting a lone opening brace works correctly again. 5409557
Line endings are no longer set to Unix. 4377551
Property List Editor
.scriptSuite
and .scriptTerminology
files now show up correctly in the Property List Editor. 5002252
The embedded Property List Editor no longer adds an extra .plist
extension to files that already have one. 6082748
Arrays in the Property List Editor are now displayed zero-based, not one-based, to agree with the NSArray
API. 5926134
Deleting the last item in an array no longer crashes. 5981172
Drag and drop and copy and paste in the Property List Editor now handles both the key and the value, rather than just the value. 6205580
You can now enter Number types in hexadecimal that include the digit “e”. 6849479
SCM
You can now create a top-level Subversion repository in the Repository window. 5916285
The Project Root setting now supports defining multiple root directories. This allows you to define only directories specifically related to your project, which prevents conflicts between projects in the same folder and significantly improves performance, especially for Perforce. 5622018
Subversion operations can now be performed even when the server is offline. 4093452
Comparing two files with identical names would show inaccurate results. This has been fixed. 5979767
Deleting a file that has been added to a repository but not yet committed now behaves correctly. 6323205
The SCM Status column in the Groups and Files tree has more accurate and useful indicators. 6190001
Refactoring and Snapshots
Renaming a class method now correctly changes invocations from other class methods. 6716395
Failure to create a snapshot has been fixed. 6307016
Snapshots no longer delete projects on restore. 5815204
Renaming a class now changes that class’s NSDocumentClass
entry in any Info.plist
files in the project. 5055370
Changing the Snapshot repository location via defaults write com.apple.Xcode XCSnapshotRepositoryPath
now works correctly. 6276756
Build System
New compiler settings have been added for -Wassign-intercept
, -Wselector
, -Wstrict-selector-match
, and -Wundeclared-selector
warnings. 5978978
"Internal error occurred while creating dependency graph" has been fixed. 6002599
The build system now uses -Xassembler
, -Xpreprocessor
, and -Xlinker
gcc
directives to better support paths and arguments that have embedded commas. 2858091
A “Permission Denied” error in the CopyPlistFile operation has been eliminated. 6019181
The Install Sources build phase no longer attempts to copy CVS or Subversion files. This avoids a permissions failure that was revealed by a bug fix in the File Manager. 6780897
On multicore computers, the Build System will no longer continue to spawn new compile jobs to available processors if system memory is under pressure. This usually results in an improvement in overall build time, as the systemwide effect of swapping due to memory pressure overwhelms any gains from running parallel compiles on available cores. 5483827
Building two projects simultaneously that both depend on a common referenced project is no longer susceptible to occasional failures. 4152540
Projects that use the default build directory location (inside the project folder) and have recursive search paths starting at the project folder will no longer rebuild precompiled headers (and thus all sources) on every build. The contents of the build folder are now explicitly excluded from recursive header search paths. 5852059
Code Signing now works correctly for signing Mac OS X frameworks and variant build products. 6683283, 6521646
A problem building the ResourceManager Resources build phase with cross-project references has been fixed. 6816208
Debugging
A hang in Step Over is fixed. 6051253
A crash when debugging 64-bit code is fixed. 4905083
Register information when debugging 64-bit Intel code is now more useful. 5624770
Fix & Continue reenables symbolic breakpoints. 3406958
The NSString data formatter now works for const and volatile strings.
The Arguments column in the Executable editor can now be made wider. 5226568
View as Hexadecimal now shows the correct hex values for floating-point registers. 6671318
Fixed issues where variable disclosure was inoperable. 4298505
Xcode sometimes didn’t notice the application being debugged had quit. 6855372
Debugging for iOS devices failed if the project path had a space or shell character. 7001052
Here are some commonly-reported issues that are known with this release of Xcode.
Saving a source code file may cause the insertion point to appear past the end of the document. 7021881
There is not currently a way to Find in Selection, or to set the Find options (Wrap Around, Regular Expression, etc.) using a keyboard-only workflow. 7051892
Run Script build phases should use “error:” and “warning:” to signal error or warning conditions to appear in the Build Log. Under certain circumstances, the Build Results color (green or red) may not agree with the message (“Build Succeeded” or “Build Failed”). 7065175, 7064841
Viewing a tooltip in documentation may cause the view to scroll to the top of the document. 7016629
There is no progress indicator in the Documentation references pane for downloading documentation sets. Open the Xcode Activity Viewer. 7074547
If a host’s distributed builds volunteer task crashes, that host is not visible in Distributed Builds preferences until it is restarted. 6149269
The Xcode text editor doesn’t display HTML documents as formatted HTML. To see HTML documents in Xcode, drop them on the Documentation window. 6803855
Xcode uses “English”, “French,” and “Japanese” as its localization designators, rather than the ISO standard “en”, “fr”, etc. 3160993
While most known cases have been taken care of, having a space, comma, slash, backslash, tilde, or other character special to the Unix shell in the directory name of any parent folder of your project can cause your project build to fail in unexpected ways. 4101529
Having the same file in your project referred to both directly and via a symbolic link from separate places can corrupt the project index and cause Xcode to crash. Remove the project index and remove the symlink reference to the file. 4056799
On a very small number of systems and for unknown reasons, the I-beam editing cursor does not hide when you start typing. 4191120
Code completion cannot be used while using Edit All in Scope. 5970976
The Touch menu item (or clicking in the “hammer” column) only works for implementation files, not header files, libraries, nib files, resources, or other project files. 4912312
If you define a source tree in the Preferences pane, you must quit and reopen Xcode for it to take effect. 4416517
The function pop-up menu does not distinguish between functions with the same name but different signatures. 2566673
Referring to an .xcconfig
file using #include
does not consult any of the target’s search paths; all referenced configuration files should be stored in the same directory. 5850085
Using a port number when setting up a Subversion repository in the Repositories window generates an inaccurate svn+ssh:
URL. Instead of entering the port number in the Repository pane in SCM preferences, leave off the port number in Xcode and add an entry with the port number in ~/.ssh/config
for the desired host. 5801847
If you build a project prior to importing it into SCM, then the project’s build folder may be imported into your repository, and subsequent commit-entire-project operations fail. Remove the build folder from the repository. 4896482
Regular expression searches are limited to single lines. 5842770
Only the version installed in /Developer
is available as a distributed build volunteer by other computers. 5939834
When adding frameworks or libraries using the Target inspector, you can only see frameworks in the SDK that the inspected target is configured for. To add frameworks from a different SDK, first change the Base SDK setting of that target. 5931773
Targets that are configured for multiple SDKs or compilers will show duplicate compiler build settings. 6643362
Find in File and Project Find only find only the actual key names in a property-list file, not the property names as seen in Property List Editor. 5946354
The default Build and Run/Debug toolbar item is not useful in projects without a configured Executable, such as KEXT projects. Add a Custom Executable or replace the Build and Run/Debug item with Build. 5939297
Attaching to a process from Xcode will fail if the active architecture in the project does not match the architecture of the running executable.
Xcode 3.1.3 is an update to the Xcode development environment. It works only on Mac OS X v10.5 Leopard and can be installed either alongside or replacing Xcode 3.1.2 or earlier.
Like Xcode 3.1.2, Xcode 3.1.3 has no significant new features over Xcode 3.1. It adds some minor enhancements, refines the iPhone development experience especially in the use of provisioning profiles and code signing, and fixes a small number of bugs.
Supported configurations
Xcode 3.1.3 runs on Mac OS X v10.5 Leopard on a Macintosh with either a PowerPC or an Intel processor. It does not install or run on earlier versions of Mac OS X. Xcode supports development for universal development for Mac OS X v10.4 Tiger and Mac OS X v10.5 using the Mac OS X SDKs. It also supports cross-development for the iPhone, iPod touch, and iPhone Simulator using the iPhone SDKs, but only on Macintosh computers with an Intel processor.
Warning: Xcode 3.1 3 works only with the iPhone SDK packages delivered with the iPhone 3.0 SDK. If you have installed previous releases of the iPhone SDK, you must upgrade to the current release of the iPhone SDK when upgrading to Xcode 3.1.3. You can still develop for iOS 2.0 through 2.2.1 as well as 3.0 using the iPhone 3.0 SDK.
Xcode Installation
The directory on which the Xcode toolset is installed is known as <Xcode>
, which by default is the /Developer
directory. But you may install Xcode 3.1.3 on any volume in any location, and you can move or rename the <Xcode>
directory after installation. The only restriction is that the directory names of its subdirectories must not be changed or moved within the Developer directory. The <Xcode>
directory itself may be renamed and placed in any other directory or volume, including servers and external drives.
This flexibility allows you to have multiple versions of the Xcode toolset installed on the same computer but running independently. Xcode uses the SDKs, build tools, and auxiliary applications from the <Xcode>
directory it is launched from whenever possible, rather than those from the root system.
Project File Format Compatibility
Xcode 3.1.3 reads and builds the targets of project files created in Xcode 2.1 through 3.1.2, and automatically upgrades project files created in Xcode 1.5 through 2.0.
Project files opened and edited with Xcode 3.1.3 are generally compatible with Xcode 3.1.2, 3.1.1, 3.1, 3.0, and 2.5; this means that project files you create or open with Xcode 3.1.3 can always be opened and built with Xcode 3.1.2, 3.1.1, 3.1, 3.0, and 2.5. There are no incompatibilities between Xcode 3.1.3 and 3.1, though bug fixes may make projects build correctly in 3.1.3 that will not build correctly in earlier versions.
If you use a particular feature that would cause your project to fail to build on an earlier version of Xcode, you see a Compatibility Notice in the bottom-right corner of your project window. Click Show Conflicts in the General pane of the Project Info window to investigate and resolve the compatibility issue.
You can now open multiple memory browser windows in the debugger at a time.
The Active SDK menu and pop-up menu, and the Active SDK section of the Overview pop-up menu in the toolbar now show “Base SDK” rather that “(Project Settings)” to denote when the active target builds with the SDK that’s set in its Base SDK build setting, rather than with an override you designate with the Overview pop-up menu.
The options for the active SDK setting in the user interface are now restricted to SDKs that are known to be compatible with the project’s Deployment Target. You cannot set an active SDK (override) to an SDK version that is older than the Deployment Target allows. Since the Deployment Target is in most cases driven by the Base SDK, this means you cannot set the active SDK to be earlier than the Base SDK.
Similarly, the options for active executable are now restricted to the capabilities of the Deployment Target and the current development environment. For example, if iPhone Simulator does not support a specific SDK, an option to launch that version is not shown.
A new build setting, XCODE_VERSION_MINOR
, allows you to distinguish Xcode 3.1.x from earlier or later versions without regard to the update version. For Xcode 3.1.3, its value is 0310
.
A new command-line tool, xcrun
, allows the command line user or scripter to locate and execute tools in the build chain for specific platforms and SDKs. See the man page for xcrun(1)
for details.
Xcode 3.1.3 contains an updated version of GCC 4.2 with several code generation bug fixes. See the GCC release notes for details.
An option in the Executables inspector allows you to wait for the executable to be launched or receive a push notification before attaching. This allows you to debug applications launched via a URL or push notification.
The New Project dialog has fewer and clearer choices for project templates; you now choose a basic template and use options to indicate variations of it.
Xcode no longer changes the Default Keychain when code signing your project if another application has the login keychain open. 6229180
A bug where the Copy Strings phase would fail with non-UTF-16 strings files has been fixed. 6319655
It is easier to revert the Code Signing Identity to the default iPhone Developer and disassociate the project from installed provisioning profiles. 6415857
Syncing with Mobile Me now no longer causes Xcode to spin. 6449377
Edit All in Scope no longer crashes when typing certain composed Unicode characters. 6217303
A bug causing the first build to fail with “No architectures to compile for” has been fixed. 6465913
Changes to the Overview pop-up menu in the Project window toolbar are reflected in toolbars in other windows (and stick). 6484921
Disclosure triangles in the debugger’s Variables pane now stay in their set state, rather than reverting spontaneously. 4298505
An extremely common problem where compiler build settings would not be visible if the Active SDK pop-up menu is set differently than the Base SDK has been fixed. 6394765
Code signing no longer attempts to sign static library build products. 6326119
Xcode now clears its cache of code-sign identity certificates when the keychain changes. This avoids the reuse of stale identities. 6377212
Code-signing profiles are now more clearly grouped with their matching provisioning profiles in the Code Sign Identity build setting value pop-up menu. 6272147
Bringing up the Find window no longer switches spaces. 5308807
Breakpoints set during debugging are hit even if no breakpoints were set at launch. 6319852
The dialog used to add libraries and frameworks does not show frameworks that have no public headers. 6491540
The Attach to Running Process command for remote computers no longer fails if there is a process with the same PID on the host. 6642629
The debugger shows ARM and VFP registers correctly. 6611937, 6661939
The known issues and workarounds are unchanged from Xcode 3.1.2. See "Xcode 3.1.2 Release Notes" for details.
Xcode 3.1.2 is an update to the Xcode development environment. It works only on Mac OS X 10.5 “Leopard” and can be installed either alongside or replacing Xcode 3.1.1 or earlier. See "Xcode 3.1.1 Release Notes" for details about the previous Xcode release.
Like Xcode 3.1.1, Xcode 3.1.2 has no significant new features over Xcode 3.1. It restructures the relationship between Xcode and the iPhone SDK plugin, and fixes a small number of bugs. Three additional build settings are supported, but are not available in the Build Settings pane unless you add them. See "Summary of New Features".
Supported configurations
Xcode 3.1.2 will run on Mac OS X 10.5 (Leopard) on a Macintosh with either a PowerPC or an Intel processor. It will not install or run on earlier versions of Mac OS X. Xcode supports development for Mac OS X 10.3 (Panther) and Universal development for Mac OS X 10.4 (Tiger) and Mac OS X 10.5 (Leopard) using the Mac OS X SDK support. It also supports cross-development for the iPhone, iPod Touch, and iPhone Simulator using the iOS SDKs, but only on Macintosh computers with an Intel processor.
Warning: Xcode 3.1 2 works only with the iPhone SDK packages delivered with the iPhone 2.2 SDK. If you have installed previous versions of the iPhone SDK, you must upgrade to the newer version of the iPhone SDK when upgrading to Xcode 3.1.2. This will still allow you to develop for iPhone 2.0 and 2.1 as well as 2.2.
Xcode Installation
The default location for Xcode Developer Tools is /Developer. However, you may install Xcode 3.1.2 on any volume in any location, and you can move or rename the entire Developer directory after installation. The only restriction is that the directory names of its subdirectories must not be changed, nor moved within the developer directory; but the Developer directory itself may be renamed and placed in any other directory or volume, including servers and external drives.
This allows you to have multiple versions of Xcode tools installed on the same system but running independently. The Xcode IDE will use the SDKs, build tools, and auxiliary applications from the Developer directory it is launched from whenever possible, rather than those from the root system.
Project File Format Compatibility and Versioning
Xcode 3.1.2 reads and builds the targets of project files created in Xcode 2.1 through 3.1.1, and will automatically upgrade project files created in Xcode 1.5 through 2.0.
Project files opened and edited with Xcode 3.1.2 are generally compatible with Xcode 3.1.1, 3.1, 3.0, and 2.5; this means that project files you create or open with Xcode 3.1.2 can always be opened and built with Xcode 3.1.1, 3.1, 3.0, and 2.5. There are no incompatibilities between Xcode 3.1.2 and 3.1, though bug fixes may make projects build correctly in 3.1.2 that will not build correctly in earlier versions.
If you use a particular feature that would cause your project to fail to build on a prior version of Xcode, you’ll see a Compatibility Notice in the lower right corner of your project window; see Project ▶ Get Info ▶ General ▶ Compatibility to investigate and resolve the compatibility issue.
Three new build settings allow you to control the output file of strings and plist files processed by Xcode. Note that these settings must be added as a User-Defined Setting and do not normally appear in the Build Settings pane.
INFOPLIST_OUTPUT_FORMAT
PLIST_FILE_OUTPUT_FORMAT
STRINGS_FILE_OUTPUT_ENCODING
The default value for these settings is “XML
”. Setting the value of one of these build settings to “binary
” causes all indicated files (Info.plist, other plists file, or .strings file) in the target to be copied into the product bundle in binary format.
In Xcode 3.0, External Targets lost the ability to output the environment variables that are passed to them. This has been restored in Xcode 3.1.2. 6169099
Downloading and installing documentation sets no longer consumes excessive amounts of CPU. 5891184
Edit All in Scope no longer crashes when typing certain composed Unicode characters. 6217303
Here are some commonly-reported issues that are known with this release of Xcode.
If the project.pbxproject file inside your project wrapper is locked, your separate user.pbxuser file will not be written, and breakpoints, custom executables, and window positions you change will not be saved. 4440006
While most known cases have been taken care of, having a space, comma, slash, backslash, tilde, or other character special to the Unix shell in the directory name of any parent folder of your project can cause your project build to fail in unexpected ways. 4101529
Having the same file in your project referred to both directly and via a symbolic link from separate places can corrupt the project index and cause Xcode to crash. Remove the project index and remove the symlink reference to the file. 4056799
On a very small number of systems and for unknown reasons, the I-beam editing cursor does not hide when you start typing. 4191120
In certain circumstances, applications like Xcode can exhaust the Window Server’s ability to create new windows, causing an NSInternalInconsistencyException Error (1000) creating CGSWindow. This will be addressed in a future version of Mac OS X. 3108154
The Touch menu item (or clicking in the “hammer” column) only works for source code files, not headers, libraries, NIB files, resources, or other project files. 4912312
If you define a Source Tree in the Preferences pane, you must quit and reopen Xcode for it to take effect. 4416517
Xcode does not interact well with Spaces; opening auxiliary Xcode windows may switch you to Xcode’s main Space. 5308807
The function popup does not distinguish between functions with the same identifier. 2566673
NSImage caches images in a manner that makes the Objective-C Garbage Collector issue a console log of the form “malloc: free_garbage: garbage ptr = 0x3846140, has non-zero refcount = 1
”. These can be ignored.
The default setting for debugging libraries and frameworks is Load Symbols Lazily. On occasion this causes breakpoints to not be hit. Turning off this setting makes it take longer to start debugging, but hits breakpoints more reliably.
Referring to an .xcconfig
file using #include
does not consult any of the target’s Search Paths; all referenced configuration files should be stored in the same directory. 5850085
Using a port number when setting up a Subversion repository in the Repositories panel generates an inaccurate svn+ssh: URL. Instead of entering the port number in the Repository setup pane, leave off the port number in Xcode and add an entry with the port number in ~/.ssh/config
for the desired host. 5801847
A bug in NSFileManager makes restoring from snapshots fail catastrophically in specific circumstances. Until this is addressed, ensure that you have a Time Machine backup or a repository version of your working code before attempting to restore from a snapshot. 5468824
If you build a project prior to importing it into SCM, then the project’s build folder may be imported into your repository, and subsequent Commit Entire Project operations will fail. Remove the build folder from the repository. 4896482
Regular expression searches are limited to single lines. 5842770
Only the version installed in /Developer
is available as a Distributed Build volunteer by other computers. 5939834
When adding frameworks or libraries using the Target Inspector, you can only see frameworks in the SDK that the inspected target is configured for. To add frameworks from a different SDK, first change the Base SDK setting of that target. 5931773
Find in File and Project Find will only find the actual key names in a Property List file, not the display names as seen in the Property List Editor. 5946354 Replace does not work in the embedded Property List editor; command-click and choose Open As ▶ Source Code File to perform Find and Replace. 5946376
Syntax-Aware Indentation does not work correctly with certain keyboard layouts, such as German. 5848499
The default Build and Go toolbar item is not useful in projects without a configured Executable, such as KEXT projects. Add a Custom Executable or replace the Build and Go item with Build. 5939297
Xcode 3.1.1 is an update to the Xcode development environment. It works only on Mac OS X 10.5 “Leopard” and can be installed either alongside or replacing Xcode 3.1. See "Xcode 3.1 Release Notes" for details about the previous release of Xcode.
Xcode 3.1.1 has no new features over Xcode 3.1, but the newer version has some configuration changes.
Supported configurations
Xcode 3.1.1 will run on Mac OS X 10.5 (Leopard) on a Macintosh with either a PowerPC or an Intel processor. It will not install or run on earlier versions of Mac OS X. Xcode supports development for Mac OS X 10.3 (Panther) and Universal development for Mac OS X 10.4 (Tiger) and Mac OS X 10.5 (Leopard) using the Mac OS X SDK support. It also supports cross-development for the iPhone, iPod Touch, and iPhone Simulator using the iOS SDKs, but only on Macintosh computers with an Intel processor.
Xcode Installation
The default location for Xcode Developer Tools is /Developer. However, you may install Xcode 3.1.1 on any volume in any location, and you can move or rename the entire Developer directory after installation. The only restriction is that the directory names of its subdirectories must not be changed, nor moved within the developer directory; but the Developer directory itself may be renamed and placed in any other directory or volume, including servers and external drives.
This allows you to have multiple versions of Xcode tools installed on the same system but running independently. The Xcode IDE will use the SDKs, build tools, and auxiliary applications from the Developer directory it is launched from whenever possible, rather than those from the root system.
Project File Format Compatibility and Versioning
Xcode 3.1.1 reads and builds the targets of project files created in Xcode 2.1 through 3.1 and will automatically upgrade project files created in Xcode 1.5 through 2.0.
Project files opened and edited with Xcode 3.1.1 are generally compatible with Xcode 3.1, 3.0, and 2.5; this means that project files you create or open with Xcode 3.1.1 can always be opened and built with Xcode 3.1, 3.0, and 2.5. There are no incompatibilities between Xcode 3.1.1 and 3.1, though bug fixes may make projects build correctly in 3.1.1 that will not build correctly in 3.0.
If you use a particular feature that would cause your project to fail to build on a prior version of Xcode, you’ll see a Compatibility Notice in the lower right corner of your project window; see Project ▶ Get Info ▶ General ▶ Compatibility to investigate and resolve the compatibility issue.
There are no new features in Xcode 3.1.1.
Build System
Projects with cross-project references would often pull the build product for a Copy Files or Link build phase from the wrong configuration of a dependent target. This has been fixed. 6024409
The Active Architecture build setting now works correctly with cross-project references, so that collections of related targets are all built with the same architecture. 5908284
The copystrings utility now specifically references its own known-compatible copy of the iconv tool, so users who have built or installed their own incompatible one now no longer get errors on building. 5994894
Building kernel extensions with different architectures for different SDKs now works correctly. 6024429
Building a XIB that contains an NSToolbar object now works more reliably. 5886192
Debugging
Long sessions with many repeated debug sessions no longer cause an Xcode hang due to leaked system resources. 5978474
Certain key presses in the Xcode console now no longer cause a crash. 6040603
The Summary column shows the summary value, rather than the formatter template, more often. 5546187
Text Editing
A relatively rare crash when pasting text on a PowerPC-based Mac has been fixed. 6077362
Some code completion misbehavior when using Edit All in Scope has been fixed. 6018419
Setting the indent width to zero no longer causes a crash. 5611522
Source Code Management
Xcode’s Subversion support now works with Subversion 1.5. 6053549
Here are some commonly-reported issues that are known with this release of Xcode.
If the project.pbxproject file inside your project wrapper is locked, your separate user.pbxuser file will not be written, and breakpoints, custom executables, and window positions you change will not be saved. 4440006
While most known cases have been taken care of, having a space, comma, slash, backslash, tilde, or other character special to the Unix shell in the directory name of any parent folder of your project can cause your project build to fail in unexpected ways. 4101529
Having the same file in your project referred to both directly and via a symbolic link from separate places can corrupt the project index and cause Xcode to crash. Remove the project index and remove the symlink reference to the file. 4056799
On a very small number of systems and for unknown reasons, the I-beam editing cursor does not hide when you start typing. 4191120
In certain circumstances, applications like Xcode can exhaust the Window Server’s ability to create new windows, causing an NSInternalInconsistencyException Error (1000) creating CGSWindow. This will be addressed in a future version of Mac OS X. 3108154
The Touch menu item (or clicking in the “hammer” column) only works for source code files, not headers, libraries, NIB files, resources, or other project files. 4912312
If you define a Source Tree in the Preferences pane, you must quit and reopen Xcode for it to take effect. 4416517
Xcode does not interact well with Spaces; opening auxiliary Xcode windows may switch you to Xcode’s main Space. 5308807
The function popup does not distinguish between functions with the same identifier. 2566673
NSImage caches images in a manner that makes the Objective-C Garbage Collector issue a console log of the form “malloc: free_garbage: garbage ptr = 0x3846140, has non-zero refcount = 1
”. These can be ignored.
The default setting for debugging libraries and frameworks is Load Symbols Lazily. On occasion this causes breakpoints to not be hit. Turning off this setting makes it take longer to start debugging, but hits breakpoints more reliably.
Referring to an .xcconfig
file using #include
does not consult any of the target’s Search Paths; all referenced configuration files should be stored in the same directory. 5850085
Using a port number when setting up a Subversion repository in the Repositories panel generates an inaccurate svn+ssh: URL. Instead of entering the port number in the Repository setup pane, eave off the port number in Xcode and add an entry with the port number in ~/.ssh/config
for the desired host. 5801847
A bug in NSFileManager makes restoring from snapshots fail catastrophically in specific circumstances. Until this is addressed, ensure that you have a Time Machine backup or a repository version of your working code before attempting to restore from a snapshot. 5468824
If you build a project prior to importing it into SCM, then the project’s build folder may be imported into your repository, and subsequent Commit Entire Project operations will fail. Remove the build folder from the repository. 4896482
Regular expression searches are limited to single lines. 5842770
Only the version installed in /Developer
is available as a Distributed Build volunteer by other computers. 5939834
When adding frameworks or libraries using the Target Inspector, you can only see frameworks in the SDK that the inspected target is configured for. To add frameworks from a different SDK, first change the Base SDK setting of that target. 5931773
Find in File and Project Find will only find the actual key names in a Property List file, not the display names as seen in the Property List Editor. 5946354 Replace does not work in the embedded Property List editor; command-click and choose Open As ▶ Source Code File to perform Find and Replace. 5946376
Syntax-Aware Indentation does not work correctly with certain keyboard layouts, such as German. 5848499
The default Build and Go toolbar item is not useful in projects without a configured Executable, such as KEXT projects. Add a Custom Executable or replace the Build and Go item with Build. 5939297
Xcode 3.1 is a revision of the Xcode development environment. It is available both as a standalone version of Developer Tools for Mac OS X 10.5 (“Leopard”) as well as part of the iPhone SDK.
The About iPhone SDK document discusses Xcode and its role in development for Mac OS X and iPhone.
Supported configurations
Xcode 3.1 will run on Mac OS X 10.5 (Leopard) on a Macintosh with either a PowerPC or an Intel processor. It will not install or run on earlier versions of Mac OS X. Xcode supports development for Mac OS X 10.3 (Panther) and Universal development for Mac OS X 10.4 (Tiger) and Mac OS X 10.5 (Leopard) using the Mac OS X SDK support. It also supports cross-development for the iPhone, iPod Touch, and iPhone Simulator using the iOS SDKs, but only on Macintosh computers with an Intel processor.
Xcode Installation
The default location for Xcode Developer Tools is /Developer
. However, you may install Xcode 3.1 on any volume in any location, and you can move or rename the entire Developer directory after installation. The only restriction is that the directory names of its subdirectories must not be changed, nor moved within the developer directory; but the Developer directory itself may be renamed and placed in any other directory or volume, including servers and external drives.
This allows you to have multiple versions of Xcode tools installed on the same system but running independently. The Xcode IDE will use the SDKs, build tools, and auxiliary applications from the Developer directory it is launched from whenever possible, rather than those from the root system. To refer to those files in your own projects, use the new Relative to Xcode Folder reference style, whose root path is $(DEVELOPER_DIR)
.
The Xcode Developer Tools installer also installs the standard system development tools and interfaces into /usr
, so conventional makefile- and config-based builds will operate correctly. Use the xcode-select
tool to set the default tool set for command-line builds.
In all previous versions of Xcode and Project Builder, the first launch of Xcode for a new user would bring up a New User Assistant dialog to set the default Build directory location and some other preferences. This has been removed. If you are building projects that require a common build directory and are setting up a new user account, you must set this in the Xcode ▶ Preferences ▶ Building pane instead of the New User Assistant.
Project File Format Compatibility and Versioning
Xcode 3.1 reads and builds the targets of project files created in Xcode 2.1 through 3.0, and will automatically upgrade project files created in Xcode 1.5 through 2.0. Xcode 3.1 does not reliably read project files created in Xcode 1.2 or earlier, or Project Builder project files. Open and upgrade these project files in Xcode 2.5 before opening them with Xcode 3.1.
Note: It is strongly recommended that, when converting pre-Xcode 2.1 project files to Xcode 2.2 and later, you also upgrade all the project’s targets to Native Targets using the item in the Project menu. Many Xcode features, including support for building Universal Binaries, are not supported for non-native (“Jam-based”) targets.
Xcode 3.1 no longer imports CodeWarrior project files. Install Xcode 2.5 and CodeWarrior Pro version 8.3 and follow the documentation in Porting CodeWarrior Projects to Xcode.
Project files opened and edited with Xcode 3.1 are generally compatible with Xcode 3.0 and Xcode 2.5; this means that project files you create or open with Xcode 3.1 can always be opened and built with Xcode 3.0 and 2.5. If you use a particular feature that would cause your project to fail to build on a prior version of Xcode, you‚Äôll see a Compatibility Notice in the lower right corner of your project window; see Project ▶ Get Info ▶ General ▶ Compatibility to investigate and resolve the compatibility issue.
New Default Factory Settings
Xcode 3.1 defines different default values for several Xcode Preferences. If you install Xcode on a machine where you have an existing user account, and you have explicitly set these preferences in the past, the new defaults will not affect you. If, however, you have always used Xcode‚Äôs default values for these preferences, or you create a new user account, you will see the effect of the different preferences. You may want to explicitly set the behavior you desire in Xcode ▶ Preferences.
General ▶ Automatically open/close attached editor is now checked by default
General ▶ Open Counterparts in Same Editor is now checked by default
Code Sense ▶ Show Arguments in Pop-up List is now unchecked by default
Code Sense ▶ Automatically Suggest is now set to Immediate
Building ▶ Continue building after errors is now checked by default
Indentation ▶ Syntax-Aware Indenting is now checked by default
Please see What's New in Xcode for a complete guide to these new features:
Support for SDKs for Other Platforms
The most significant addition to Xcode 3.1 is support for Software Development Kits (SDKs) for platforms other than Mac OS X. In addition to supporting SDKs for other versions of Mac OS X, Xcode 3.1 now supports SDKs that contain headers, libraries, plugins, and tools for developing for the iPhone and iPod Touch.
SDKs for other platforms are installed in the /Platforms directory in the Developer folder, and contain a directory tree that resembles the root directory of Mac OS, but populated with tools and plugins for the other platform. For example, the /Developer/Platforms/iOS.platform
contains compilers and linkers in iOS.platform/usr/bin
, Xcode plugins in iOS.platform/Developer/Plug-Ins
, and individual SDKs for iPhone and iPod Touch development in iOS.platform/Developer/SDKs
.
Apart from installing them, you will generally not see platform distinctions in Xcode. When you create a new project or target, you will see project types categorized by platform; when you edit and build projects, you will set the SDK that supports the frameworks and APIs that your code uses, and the SDK will determine what platform tools it needs.
New gcc-4.2 and llvm-gcc-4.2 Compilers
Xcode 3.1 includes the gcc 4.2 compiler as an alternative system C / C++ / Objective-C compiler.
In addition, the llvm-gcc-4.2 compiler is also included with Xcode 3.1. This compiler uses the LLVM backend and code generator with the gcc 4.2 parser, and supports C, C++, Objective-C, and Objective-C++. More information is available in the LLVM-GCC 4.2 Release Notes.
To use either of these new compilers in a project, you can use the new Compiler Version build setting and choose the compiler you want from the popup menu. By changing this setting in different targets and configurations and using the per-architecture and per-SDK popups, you have fine-grained control over which compiler is used in different circumstances. Note that neither gcc-4.2 nor llvm-gcc-4.2 will compile code against the 10.4u or earlier SDK, or deploy for Mac OS X 10.4 or earlier.
Note that because most C++ applications built for 10.3.9 and later use the dynamic C++ standard library from the operating system, and Leopard only ships with the gcc 4.0 version of the C++ standard library, the gcc 4.2 and llvm-gcc4.2 compilers also use the gcc 4.0 C++ standard library, not the gcc 4.2 version.
Updated New Project, New Target, New File assistants
The New Project, New Target, and New File assistants have been updated to a more modern user experience and up-to-date templates.
New projects created from the templates use several conventions different from previous versions of Xcode. You should be aware of these differences when working with the projects or sharing them with Xcode 3.0 or 2.5 users.
Projects are created with Xcode 3.1 compatibility and need to be set to a different compatibility level to be used on other versions of Xcode. Xcode 3.0 project templates were created with Xcode 2.4.1 backwards compatibility already set.
The initial Project Configuration is set to Debug. The “default configuration” for building from the command line with xcodebuild
is still Release.
The Architectures build setting is set to “Standard 32-Bit” for all configurations at the project level. The “Only Active Architectures” build setting is set for the Debug configuration. This means that in general Release builds are 2-way fat and Debug builds are one-way thin for the build machine.
Source files created without a matching header file do not have the #include
line for the nonexistent header.
The ORGANIZATIONNAME
substitution value in templates is now replaced with the Company Name from the current user’s Address Book card if present, rather than __MyCompanyName__
. If the PBXCustomTemplateMacroDefinitions
user default has already been set, it will be honored.
ALWAYS_SEARCH_USER_PATHS
is not set in any templates.
Updated Factory Settings for Preferences, Toolbars, and Window Geometry
To simplify the Xcode experience for new users, the initial Project Window (in Default layout only) is now larger and shows the Editor pane by default. The default Toolbars on all modules have been simplified and made more consistent. Defaults in the General, Building, Debugging, Text Editing, and Indentation preference panes have been changed to reflect the expectations of new users.
Users who have set their own preferences, window size, or toolbars will generally not see these changes; they will be seen only by users who have not customized the factory settings. Opening any project in Xcode 3.0 may reset your global Toolbar settings to Xcode 3.0 factory settings, removing the new Xcode 3.1 default configuration.
New Integrated Property List Editor
Selecting a Property List file in the Groups and Files or Detail view now opens the file in a tabular outline instead of text form, regardless of whether the property list is in old-style text, XML, or binary format. You can expand and collapse the arrays and dictionaries in the property list as in any outlining tool, and edit the keys and values. Option-click the disclosure arrows to Expand All or Collapse All.
To see the property list in text form, control-click and choose Open As... ▶ Source Code File or Plain Text File.
The editor will edit any property list file as a generic property list. In addition, provided Property List Definitions allow you to view and edit the property list in a structured way. Definitions are provided for Info.plist, .scriptSuite, and .scriptTerminology files in the Mac OS X platform. To apply a definition to the property list in the editor, choose View ▶ Property List Type.
To create a new entry in the property list, simply select a row and press Return. If the row is a containter (array or dictionary) and is disclosed, a child item will be created; otherwise, a peer item is created. Option-Return toggles the expansion state of the item before adding a row. The + button at the end of a row has the same effect as Return, including following the option key behavior.
If the Property List Type is None, you’ll get a generic item and have to set the key name and the value type manually (with the context menu obtained by Control- or right-click) . If the property list is of a defined type, a default key and value will be assigned automatically; pick from the popup in the Key column to change the key (and therefore the type).
You can drag and drop to reorder items in arrays (and, in fact, dictionaries, though you cannot rely on the order of keys in dictionaries). You can print property lists at their current disclosure triangle expansions state.
All of the features of the embedded Property List editor are available in the stand-alone Property List Editor application.
Comments are not supported and are deleted from the plist document when saved. This includes preprocessor #defines in files meant to be preprocessed. The Property List Editor will not open an XML property list error if the #define comments appear before the XML header block.
Updated FileMerge application
The standalone File Merge application has been updated with the inner workings of Xcode’s built-in file comparison utility. This results in faster and more accurate diffing of files, and has addressed a number of longstanding bugs and shortcomings. Specifically, the new File Merge can handle files of differing line endings properly, as well as ignoring leading white space on lines.
Updated Open Quickly panel
The Open Quickly panel has been updated in both function and appearance. The previous Open Quickly search paths in the Xcode Preferences are ignored and have been removed; Open Quickly searches known locations in the project, including the index, the SDKs in use, and the Header and Framework Search Paths, to find symbols and files.
Open Quickly now does autocompletion for known terms, and shows multiple results in a list for selection with the arrow keys. The magnifying glass icon in the search bubble holds recent searches for reference.
The behavior of the Jump to Definition function now mirrors the Open Quickly feature, essentially jumping directly to the first result that the Open Quickly panel would have shown.
Previous implementations of Open Quickly would jump directly to a file if the insertion point were set in its file name. This was confusing to people who wanted the Open Quickly panel but had the insertion point inadvertently set in a valid file name. The behavior is still available with Option-Open Quickly. You can also change your Key Bindings to associate Command-Shift-D with the Open This Quickly action, which makes the old behavior the default. In addition, you can set defaults write com.apple.Xcode XCOQSkipPanelBehaviour
(note the British spelling!) to any of these values:
0 | Default behavior |
1 | Always show the Open Quickly panel |
2 | Skip the panel if the insertion point is in a valid file name in an |
3 | Always skip the panel if a good match is found |
New Add Frameworks Pane and Sheet and Relative to SDK Reference Style
The process of adding a framework, dynamic library, or static archive to a target has been simplified. In the Target’s Get Info window in the General tab, there is a new Frameworks and Libraries pane that lists all the frameworks and libraries that target links with. A button opens a sheet listing all the frameworks, dynamic libraries, and static archives available in the target’s SDK, as a flat list. You can select any of these, or use the Choose... button to pick an item using the standard Open... dialog. The Add Existing Frameworks contextual menu item in the Groups and Files tree also invokes this sheet.
Items added to the target are automatically referred to using a new reference form, Relative to Current SDK. Only the framework’s name will be stored in your project, and its full path will be constructed according to the SDK in use when the target is built. This makes it easier to use frameworks in projects that use multiple SDKs.
New Toolbar Items: Active SDK and Overview
You can now set the Active SDK from the Project menu or by adding the Active SDK tool to a window’s toolbar. This is similar to setting the Active Configuration or Active Architecture in that it affects the current project and target, and does not make changes to the project file; but it is different in that it can override the target’s SDK setting with another value.
For example, if you have a project configured for the 10.4u SDK and wish to see if it will compile successfully against the Leopard headers and libraries, you can simply set the Active SDK to Mac OS X 10.5 and build. The active target will be built with the Leopard SDK, allowing you to see what errors and warnings are produced, without having to change any build settings or alter the project file.
The Active SDK setting, like Active Target, Configuration, Executable, and Architecture, is stored in your user file in the .xcodeproj
wrapper file.
Because the combined width of the five Active toolbar items (Target, Configuration, Executable, Architecture, and SDK) is impractical, there is a new “combination” popup called Overview, which displays a synopsis of the current active items and allows you to set all of them from one popup. You can use the Overview popup to replace any or all of the others. The Overview popup will always show at least the Configuration and Executable, and will also show the Target, Architecture, or SDK only if those individual toolbar items are not present in the toolbar.
Cache Files Moved; New Empty Caches Menu Item
Xcode caches both Xcode data and project data for performance optimization. In Xcode 3.1 these caches have moved to a new location in /var/folders
to provide enhanced security. If you will be using Xcode 3.1 exclusively, you should reclaim the cache space used by previous versions of Xcode by deleting the previous caches at /Library/Caches/com.apple.Xcode
(they will be recreated if you open Xcode 3.0 or earlier).
Because Xcode caches can grow to be quite large, there is a new Empty Caches menu item in the Xcode menu that deletes all cached Precompiled Header files, the Xcode plug-in cache, and all other cached data. This may only take full effect after quitting Xcode. You can use this if you have built a large number of projects that you will not build again and need to free up the space taken by cached precompiled headers.
Xcode Source Editor
The Xcode source editor is now significantly faster when opening very large single-line, XML, or HTML files. Several performance improvements have been made in syntax coloring and code completion. Text Macro expansion had been broken in HTML files and has now been fixed. Several problems with text key bindings have been fixed.
Placeholders and Edit All in Scope
A new command, Edit ▶ Edit All in Scope, highlights the identifier containing the selection or insertion point and all other instances of that identifier in the current lexical scope. Candidate terms for this feature appear with a dotted underline when selected, and a popup arrow (much like a standard Leopard Data Detector popup arrow) appears allowing you to select Edit All in Scope. Editing any highlighted identifier will simultaneously edit all highlighted instances. This can be used to rename local variables or formal parameters in the current file (unlike a full Refactoring Rename, it does not affect other files).
When inserting placeholders with code completion or text macros, argument placeholders and common identifiers are highlighted automatically. For argument placeholders, the placeholders are depicted as highlighted text, and Select Next Placeholder moves among them. Unedited placeholders will be entered into text surrounded by <# #>
delimiters as in prior versions of Xcode.
Documentation Viewer
A new button allows you to add a new documentation bookmark more quickly, and you can also drag an item from the Documentation Viewer directly into its bookmark list.
Navigation in the Documentation Viewer now tracks your scroll locations in each document, so going back takes you to a previous scroll location in the same page, not to the previous page.
Searching and Indexing
The performance of indexing and searching projects with large numbers of nib files has been improved significantly.
Source Code Management
Checking out a project from a Repository automatically configures it for SCM with that repository.
You can now check a directory out of a repository simply by dragging it to the desktop or a Finder window. Similarly, you can import a folder to a repository simply by dragging it from any folder proxy (even the Xcode Organizer) directly into a location in the Repository Browser.
You can now update or commit all changes to a Perforce repository on a project-wide basis.
Script Menu
You can now use the token %%%PBXSelectionLineNumber%%%
in user scripts; it evaluates to an integer representing the (1-based) line number of the line containing the insertion point or the beginning of the text selection.
Build System Improvements
Most of the changes in the build system in Xcode 3.1 relate to the use of SDKs and architectures.
New Base SDK build setting popup
The "SDK Path” build setting has been renamed “Base SDK.” Its value can be either a path or a name of an SDK. When setting the value in the Build Settings Inspector, you choose an installed SDK from a pop-up menu, rather than entering or navigating to an SDK package in the Developer folder.
In .xcconfig
files and when manually editing the SDKROOT
build setting, you can enter either the full path to the SDK or its short name.
If the project is set for Xcode 3.0 or 2.4.1 compatibility, the SDK name will be converted to a path relative to the $DEVELOPER_SDK_DIR
if appropriate. Projects in 3.1 format will store only the SDK short name for better portability in the future.
New Architectures build setting pop-up; new Only Active Architecture checkbox
The “32-bit / 64-bit” Architectures checkboxes have been replaced with a pop-up . The pop-up offers standard configurations of architectures provided by the current SDK, an Other... item to set your custom architecture choices, and any custom architecture choices you have set.
Current projects generally set the Architectures build setting in the Release configuration to ppc i386
and to $(NATIVE_ARCH)
in the Debug configuration, to build a Universal binary for Release but to build only one architecture for debugging.
Starting with Xcode 3.1, project templates are set up to use the Standard architecture in all configurations, so that developers only change the value of Architectures when they change the code model of their code (for example, to add 64-bit support). To speed building for debugging, there is an additional build setting, Build Active Architecture Only. This is checked in Debug configurations, so that the Project ▶ Active Architecture menu controls what architecture is built and launched during debugging.
You can change your projects to follow a similar pattern. This will allow you to change the architecture you debug simply by choosing a different item from the Active Architectures menu, rather than having to change the build settings on all relevant targets in your project.
If the project is set for Xcode 3.0 or 2.4.1 compatibility, the Architectures value will be converted to a concrete build settings if appropriate, and the Only Active Architecture will appear as a custom build setting if the project is opened in those versions of Xcode.
Conditional Build Settings
Xcode 3.0 supported some build settings defined on a per-SDK basis. Xcode 3.1 adds more per-architecture build settings, introduces per-SDK build settings, and adds wildcard matching.
For many build settings, you can select the setting and choose Add Build Setting Condition. An extra line is added to the build setting with popups for Architecture and/or SDK. Pick an architecture or SDK (or “Any Architecture” or “Any SDK”) and set the value. That value will be used only when the conditions of the popup are met.
This allows you to designate certain values to be used only when an override SDK is in use. For example, you can set a preprocessor macro only for builds with the Mac OS X 10.5 SDK, or an optimization flag only for 64 bit architectures
You can specify conditional build settings in .xcconfig files. The syntax to define an architecture-specific setting is:
SETTING_NAME[arch=arch_pattern] = some_value
SETTING_NAME[sdk=sdk_pattern] = some_value
SETTING_NAME[sdk=sdk_pattern, arch=arch_pattern] = some_value
where arch_pattern
and sdk_pattern
architecture or SDK names you would enter into the ARCHS
and SDKROOT build settings.
The values on the right-hand side of the equals sign may be glob patterns, such as *64*
or macosx10.5*
. These patterns will use the given value for any architecture and SDK that match the pattern. Note that these are shell match patterns, not regular expressions. In Xcode-1059 and later, a pattern that matches the SDK that represents the current OS (for example, sdk=macosx10.5
implicitly matches when the SDKROOT
is unset or set to “” or “/”.
Compiler Version build setting
The GCC_VERSION
build setting is now present by default in the Build Settings pane, and allows you to set the preferred compiler version to any configured compiler (whether the compiler is installed at the moment or not). You can set the compiler version on a per-configuration basis, and use Conditional Build Settings to use different compiler versions for different architectures or SDKs.
Note that this overrides (and is preferable to) setting the compiler version in the Build Rules inspector pane. Use that pane to use a custom compiler script if necessary, otherwise, the Compiler Version build setting is preferable.
Per-File Build Flags Available to Custom Build Rules
A new build setting, OTHER_INPUT_FILE_FLAGS
, is available to Custom Build Rule scripts. It contains all the flags set in the Build tab of an individual build file.
OpenMP Support
A new Linker build setting allows you to specify OpenMP support. You can override this to pass an explicit path to a library, or to pass a library search path and a -l flag to search for the library by name, whichever is preferable.
Support for Weak Frameworks
You can now designate a given framework to be weak-linked in its entirety. This is different from the weak symbol linking provided by the Deployment Target build setting, which allows your application to launch on systems that don’t have specific symbols defined in your linked frameworks; this allows your application to launch on systems where the framework is completely absent. It is your responsibility to check for this situation at run time and avoid using any symbols in the weak framework, or your program will crash.
To designate a framework as weak-linked, select the framework in the target’s Link Binary With Libraries build phase, choose Get Info, and in the General tab check the Weak Link box. You can also check the Weak box in the Libraries and Frameworks list in the Target inspector when you add libraries and frameworks.
Changes to the Install Mode flags
All previous versions of Xcode and Project Builder used default Install Mode flags of “a-w,a+rX” (write-protected for user, group, and others; readable and executable for user, group, and others.) This caused problems on successive builds, as a user build cannot overwrite a build product from a previous build unless the user has write permission. The default Install Mode permissions have been changed to “u+w,go-w,a+rx” (user write-enabled, group and other write-protected, user, group and other all read- and execute-enabled).
xcodebuild
options
The xcodebuild
command-line tool supports several new options for building Xcode projects from the command line. See its man page for complete details.
-sdk
sdkname allows you to specify an SDK at build time
-find
toolname returns the full path to that tool in the SDK, platform, and version of Xcode in use. This is particularly useful in traditional config files when building against an SDK.
Many significant problems reported in Xcode 3.0 have been addressed in Xcode 3.1. In addition to the ones below, hundreds of developer-reported bugs are fixed, and many crashes and memory leaks have been addressed.
Project Editing and Management
Xcode no longer beeps when closing a project after you’ve been debugging. 4542894
Xcode no longer spins for 30 seconds on opening a project in certain network configurations. 5560191
Using BBEdit as an external editor works more reliably now when you have multiple versions of BBEdit. 5574251
Property list files that have been stored as binary plists can be opened in Property List Editor by Xcode. 5510298
Adding a shim dylib to a target now adds it correctly to the Link Binaries build phase rather than the Copy Bundle Resources build phase. 5576928
Xcode build folders are now excluded from Time Machine backups. 5606734
A condition that caused an Assertion Failed internal error due to “!pflags.projectClosed” has been fixed. 5462301
On occasion in All in One layouts, the Detail view would appear too small, surrounded by a large grey box (or be missing altogether), or the Detail view would appear tucked under the toolbar or Favorites bar, so that column headers and segment controls were clipped or hidden. This has been fixed in Xcode 3.1. 4078110, 5482279
Opening a .nib or .xib file from within Xcode 3.1 now correctly launches Interface Builder 3.1. 5788709
The NIB Files smartgroup now shows .xib files as well. 5631186
A problem where two projects with mutual cross-project references could not ever be closed has been fixed. 5853910
A longstanding bug where Xcode would make itself the active application at inopportune times has been fixed. 5793285
Pressing the Tab key with a selection in the Groups and Files tree now no longer opens the selected item for editing. 5764905
Text Editing
Syntax coloring and code folding now respects CDATA blocks in XML and NSData objects in plist format as atomic objects and does not attempt to parse their contents. 5765065, 5771545
Code Sense can now autocomplete, index, and refactor identifiers tagged with GCC attributes like ___attribute((packed) etc. 5478328
Source files with extremely large scalar arrays defined in macros no longer cause the indexer to crash. 5566249
Indent on Return with Metrowerks key bindings enabled was not only broken, but caused Return to be ignored in other places in the user interface. This has been fixed. 5551513
Code Folding now works correctly with the Japanese FEP input method. 5750248
Double-click to select in strings and to balance delimiters now works in cases where code is folded above the location of the double-click. 5717038
Dragging and dropping text and copying and pasting text across folded text ranges could cause text corruption. This has been fixed. 5520726, 5713972
Opening large XML files, large files with non-ASCII text, large files with very long lines, or very very large text files (>10Mb) is now significantly faster, often by two orders of magnitude. 5496096
Scrolling after manipulating breakpoints no longer leaves black artifacts in the gutter area. 5375592
Xcode no longer crashes when the Indent Width is set to 0 on Intel hardware. 5611522
Documentation Viewing
The documentation viewer no longer loses its function popup. 5662600
Pressing the Back button in the Documentation viewer no longer takes you to Safari. 5059558
Searching and Indexing
When “All Project Files” is selected in the Options pane, Find in Project now searches all text files as well as sourcecode files in the project. 5280220
Find in Project no longer searches inside bundles and wrapper directories added to a project. 5323093
The Find in Folders list in the Options panel of Find in Project now accepts build setting values like $(SRCROOT). 5464668
The Find Selected Text, Replace, and Replace All menu items have been restored. 5591661, 5708548
The Rename refactoring now works correctly in cases where two (or more) classes that have same named categories. 5713563
A case where Project Find would skip a matching string that starts with a set of repeating characters in the search string has been fixed. 5794607
Cases where an initial Snapshot would succeed but subsequent Snapshots would fail have been fixed. 5683201
Subsequent Snapshots would delete symlinks copied in a prior Snapshot. This has been fixed. 5609480
A serious bug where Restore from a snapshot would delete files has been fixed. 5815204
Callback typedefs now appear properly in the function popup 2822458
A condition where project indexing would crash due to symlinks has been fixed. 5720817
C++ destructors now appear in the Function Popup with their leading tilde. 5738000
Source Code Management
Many crashes, memory errors, and other problems with Perforce have been fixed. 5671751 Its speed has been significantly increased as well. 5507126
Subversion support now handles svn:externals definitions. 5570480
Renaming files under Source Code Management controls works better now. 4092208
You can get the raw transaction text of SCM operations by copy and paste or drag and drop of the SCM 4863296
Subversion can now work with user names that are email addresses (with an internal @) 5438773
Problems with renaming a file or folder in the Groups and Files outline view being interrupted by other activity (such as SCM operations) have been fixed. 5144185
SCM ▶ Compare allowed you to compare a file against an arbitrary other file in Xcode 2.5 but not in Xcode 3.0. This functionality has been restored in Xcode 3.1. 5594356
Files generated by SCM operations such as Annotate and Compare now have the same file extension as the original file. 5730147
Xcode 3.0 would confuse two SCM repositories using different SCM systems on the same host. This has been fixed. 5029026
Renaming a file that is in the project but not in the project’s SCM repository now works correctly. 4092208
Build System and Setttings
Recursive header search paths would not search all paths. 4169166
If the Executable Extension build setting is set to the empty string, the trailing “.” will now be omitted. 5822758
Per-file build flags set on files that are built both with a Build Rule and then by the C compiler (e.g. Bison, Lex, Flex files, etc.) are now passed only to the Build Rule and not to the compiler. This may break projects that expect the per-file build flags to be sent to the compiler. 4251610
Debugging
Stopping at a breakpoint will use the Debugger window if present, rather than the frontmost editor. 4781477
The Research Assistant no longer uses CPU while Xcode is not frontmost. 5577629
The Clear Log menu item has been restored to the Run menu. 5020597
The debugger no longer shows variables “out of scope” when they are not. 4883236
The debugger no longer crashes with some styles of conditional breakpoints. 5608912
Here are some commonly-reported issues that are known with this release of Xcode.
If the project.pbxproject file inside your project wrapper is locked, your separate user.pbxuser file will not be written, and breakpoints, custom executables, and window positions you change will not be saved. 4440006
Xcode uses the older and deprecated locale naming convention (“English.lproj”) for language locales. 5871463
While most known cases have been taken care of, having a space, comma, slash, backslash, tilde, or other character special to the Unix shell in the directory name of any parent folder of your project can cause your project build to fail in unexpected ways. 4101529
Having the same file in your project referred to both directly and via a symbolic link from separate places can corrupt the project index and cause Xcode to crash. Remove the project index and remove the symlink reference to the file. 4056799
On a very small number of systems and for unknown reasons, the I-beam editing cursor does not hide when you start typing. 4191120
In certain circumstances, applications like Xcode can exhaust the Window Server’s ability to create new windows, causing an NSInternalInconsistencyException Error (1000) creating CGSWindow. This will be addressed in a future version of Mac OS X. 3108154
The Touch menu item (or clicking in the “hammer” column) only works for source code files, not headers, libraries, NIB files, resources, or other project files. 4912312
If you define a Source Tree in the Preferences pane, you must quit and reopen Xcode for it to take effect. 4416517
Xcode does not interact well with Spaces; opening auxiliary Xcode windows may switch you to Xcode’s main Space. 5308807
The function popup does not distinguish between functions with the same identifier. 2566673
Selecting the “Movies” icon in the Open Files... panel causes a crash if iLife ‘08 1.0.5 is installed. 5748459
NSImage caches images in a manner that makes the Objective-C Garbage Collector issue a console log of the form “malloc: free_garbage: garbage ptr = 0x3846140, has non-zero refcount = 1
”. These can be ignored.
The default setting for debugging libraries and frameworks is Load Symbols Lazily. On occasion this causes breakpoints to not be hit. Turning off this setting makes it take longer to start debugging, but hits breakpoints more reliably.
Referring to an .xcconfig
file using #include
does not consult any of the target’s Search Paths; all referenced configuration files should be stored in the same directory. 5850085
Using a port number when setting up a Subversion repository in the Repositories panel generates an inaccurate svn+ssh: URL. Instead of entering the port number in the Repository setup pane, eave off the port number in Xcode and add an entry with the port number in ~/.ssh/config
for the desired host. 5801847
A bug in NSFileManager makes restoring from snapshots fail catastrophically in specific circumstances, such as when the project’s original path contains a symlink. Until this is addressed, ensure that you have a Time Machine backup or a repository version of your working code before attempting to restore from a snapshot. 5468824
An incompatibility in certain versions of iLife Media Browser causes Xcode and other applications to crash if any Media item is selected in the Open... panel. This condition will persist until Open... is used in another application and the selection in the Sources pane is set to some item other than a Media source. 5748459
If you build a project prior to importing it into SCM, then the project’s build folder may be imported into your repository, and subsequent Commit Entire Project operations will fail. Remove the build folder from the repository. 4896482
Regular expression searches are limited to single lines. 5842770
Building a Debug configuration of a project that uses the Only Active Architecture setting may not correctly build targets in cross-project references to closed projects. 5908284
Only the version installed in /Developer
is available as a Distributed Build volunteer by other computers. 5939834
When adding frameworks or libraries using the Target Inspector, you can only see frameworks in the SDK that the inspected target is configured for. To add frameworks from a different SDK, first change the Base SDK setting of that targer. 5931773
Find in File and Project Find will only find the actual key names in a Property List file, not the display names as seen in the Property List Editor. 5946354 Replace does not work in the embedded Property List editor; command-click and choose Open As ▶ Source Code File to perform Find and Replace. 5946376
Syntax-Aware Indentation does not work correctly with certain keyboard layouts, such as German. 5848499
The default Build and Go toolbar item is not useful in projects without a configured Executable, such as KEXT projects. Add a Custom Executable or replace the Build and Go item with Build. 5939297
If your project has .strings
files in UTF-8 format and your application code expects to read them in UTF-8 format, you need to add the build setting STRINGS_FILE_OUTPUT_ENCODING = UTF-8
to the target that copies the .strings
files. The default in Xcode 3.1 is to output .strings
files in UTF-16 format. 5897320
After using Xcode 3.1, if you open any project in Xcode 3.0 using the same user account, all your project toolbars may revert to Xcode 3.0 factory settings. To restore the Xcode 3.1 default toolbar configuration, execute defaults delete com.apple.Xcode PerspectivesToolbar.com.apple.perspectives.project.mode1v3.PBXModule.XCPerspectiveModule.Project
in Terminal (Condensed or All-in-One users substitute defaultv3
or mode2v3
for mode1v3
. 5957247
The About Xcode Tools document discusses Xcode and its role in development on Mac OS X.
Xcode 3.0 is a major revision of the Xcode development environment.
Supported configurations
Xcode 3.0 will run on Mac OS X 10.5 (Leopard) on a Macintosh with either a PowerPC or an Intel processor. It will not install or run on earlier versions of Mac OS X. Xcode supports development for Mac OS X 10.3 (Panther) and Universal development for Mac OS X 10.4 (Tiger) and Mac OS X 10.5 (Leopard) using the Mac OS X SDK support.
Xcode Installation
The Xcode Developer Tools will install by default into /Developer
, but you may choose to install Xcode 3.0 anywhere on the system, including on partitions other than the boot volume. When changing the installation location, you must create a folder for the tools with the "New Folder" button in the location chooser. You can also move or rename the entire developer directory after installing. The developer directory’s subdirectories, applications, and other content must not be moved or renamed, and you must quit all developer applications before moving or renaming the developer directory.
It is now possible to have multiple versions of Xcode tools installed on the same system but running independently. The Xcode IDE will use the SDKs, build tools, and auxiliary applications from the developer directory it is launched from whenever possible, rather than those from the root system.
The Xcode Developer Tools installer also installs the standard system development tools and interfaces into /usr
, so conventional makefile- and config-based builds will operate correctly. There is no way to switch among versions of most these tools; the last installed version replaces all other versions. A few of these tools, including /usr/bin/xcodebuild
, can switch among versions; see the xcode-select
manpage for more information. Installation of these tools can be disabled by turning off the UNIX Development Support choice in the installer.
If the UNIX Development Support is not installed, all projects must build against an SDK, and conventional makefile-based builds should execute the standard development tools from the developer directory’s usr/bin
directory instead of the root system’s /usr/bin
. This can be done by adding the full path to that directory to the PATH
environment variable and making sure that your build scripts and makefiles do not have absolute references to tools such as /usr/bin/gcc
, instead always using the shell’s path mechanism to launch the tools. Alternatively, tools can be invoked using a path returned by xcode-select -print-path
; see the xcode-select
manpage for more information.
Support for building for Mac OS X 10.3.9 is disabled by default. To enable this support, click Custom Install and check on the "Mac OS X 10.3.9 Support" in the Installer.
Launching Xcode IDE
Xcode version 3.0 takes advantage of two major architectural features of Leopard: 64-bit support and Garbage Collection. The Xcode IDE runs under garbage collection on all machines, and on 64-bit capable hardware, can be launched in 64-bit mode. To run Xcode in 64-bit mode on a 64-bit machine, use the Finder’s Get Info command and uncheck the “Open in 32-Bit Mode” checkbox.
The xcodebuild
tool never runs with garbage collection. It can be run in 64-bit mode on 64-bit hardware with the command arch -ppc64 xcodebuild
or arch -x86_64 xcodebuild
. Tools invoked by the Xcode and xcodebuild
are generally run as 32-bit regardless of how the IDE or tool is invoked, with the exception of the ld
linker, which always runs as 64-bit on 64-bit hardware.
Project File Format Compatibility
Xcode 3.0 reads and builds project files written by Xcode 2.1 through 2.5, and will automatically upgrade project files from Xcode 1.5 through 2.0. Xcode 3.0 does not reliably read project files from Xcode 1.2 or earlier, or Project Builder project files; upgrade these with Xcode 2.5 before installing Xcode 3.0.
It is strongly recommended that when converting pre-Xcode 2.1 project files to Xcode 2.2 and later you also upgrade all the project’s targets to Native Targets using the item in the Project menu. Many Xcode features, including support for building Universal Binaries, are not supported for non-native (“Jam-based”) targets.
As of Xcode 3.0, you can set the compatibility requirements of your project in the project’s Get Info inspector’s Project Format popup (in the General tab). When your project is using features which are not compatible with the chosen format, Xcode will display a red conflict indicator in the project’s Get Info inspector’s General tab and in the project’s status bar. To resolve these conflicts, either change the compatibility requirements of your project or use the inspector’s “Show Conflicts” button to find the incompatible features and manually remove them from the project.
Project Root
Xcode 3.0 has a concept of a project root, the top-level file system directory that encompasses all your project's items (and may be at a higher level than the project file's folder, commonly known as $(SRCROOT)
). This location is used as the base for many Xcode features such as SCM and project-wide Find and Replace, as well as new Xcode 3.0 features like Refactoring and Snapshots. Xcode tries to determine automatically the correct top-level directory; you can set it yourself in the Project inspector’s General tab if its guess is incorrect. You can set the Project Root for each project, in the General tab of the Get Info window for the project.
Major menu reorganization
The main menu bar of Xcode has been substantially reorganized. New menu items have been added to support new Xcode 3.0 features; a small number of rarely-used or deprecated features have been removed; and a large number of items have moved in order to shorten and simplify the top-level menus.
Important: Many items are now alternates to other items that share the same command key. Hold down the Option, Control, and Shift keys to see all the items in the File, Edit, and View menus.
The Help ▶ Search menu item can help you find a menu item that‚Äôs been moved to a submenu.
File menu: Add snapshot support. Add Recent Files. Collapse multiple Open, Close, and Save items. Integrate Open Dictionary and Import Project into Open item. Move Group commands to Project menu. Merge Page Setup into Print. Move Make Global/Make Localizable to inspector. Move Rename to direct editing of item.
Edit menu: Add Format submenu. Add Find submenu. Add Add Bookmarks and Go to Line items from Find menu.
View menu: Add Code Folding, Message Bubbles submenus. Add Text submenu with formerFormat menu items. Add Syntax Coloring submenu from former Format menu. Add Layout submenu. Remove Clear File History Next/Previous Detail, Next/Previous Page. Move Open in Separate Editor to File menu. Merge Reveal in Class Browser into Class Browser item.
Format menu: Remove and distribute items to Edit and View menus
Find menu: Move to Edit menu or context menus in individual views
Project menu: Add Group commands from File menu. Remove Upgrade to Native Target item.
Build menu: Remove Enable Zero Link (feature removed). Extensive changes for new Streamlined Debugging feature, below.
Debug menu: Change to Run. Extensive changes for new Streamlined Debugging feature, below.
SCM menu: Extensive changes for new Repository management, see below.
Help menu: Merge individual release notes into Xcode News.
Templates
The location for Xcode templates, scripts, and other support files has changed. These files were previously located in /Library/Application Support/Apple/Developer Tools/
and /Library/Application Support/Xcode/
. They are now located in the developer directory’s Library/Xcode/
folder. Additionally, your own custom support files should now be placed in a folder of the appropriate name (e.g. "Project Templates
") in any of the following locations:
/Library/Application Support/Developer/3.0/Xcode/
/Library/Application Support/Developer/Shared/Xcode/
~/Library/Application Support/Developer/3.0/Xcode/
~/Library/Application Support/Developer/Shared/Xcode/
Please see What's New in Xcode for a complete guide to these new features:
Objective-C 2.0
Objective-C has been enhanced with support for properties, fast enumeration, optional methods in protocols, and garbage collection.
Interface Builder
A completely new Interface Builder is included in Leopard. See the Interface Builder documentation for complete details.
Refactoring
Xcode now gives you the ability to refactor Objective-C code and nib files. A global refactoring, Convert to Objective-C 2.0, changes manual iterations to new Objective-C 2.0 syntax. Individual refactorings are currently available for:
Rename
Create Superclass of
Move Up
Move Down
Encapsulate
Extract Method
Modernize for Loop
Move Implementation to Subclass
Refactoring allows you to accept or reject offered refactorings on a file-by-file basis.
Organizer
The Xcode Organizer is available in the Window menu. This is a convenient place to drop project files, non-project text files, or entire folders of frequently-accessed information for quick reference and navigation.
Folders in the Organizer represent the contents of directories in the file system. You can move, rename, and delete files and directories using the Organizer. The Action (gear) button at the bottom of the Organizer window allows you to add new files or directories into the selected directory in the Organizer. When creating a new file or folder, you can optionally choose a template to base the new item on; Xcode will make a copy of the template in the designated place on disk and add it to the Organizer.
You can edit documents in the Workspace‚Äôs embedded editor or double-click them to open them in a separate window. When a directory is selected in the Organizer, the Edit ▶ Find ▶ Find in Project menu item changes to Find in Folder, and allows you to do deep searches within that folder.
The Build, Clean, Run, and Action tools allow you to attach arbitrary shell commands, shell scripts, AppleScript files, or Automator workflows to Organizer folders and invoke them from the toolbar or main menu. Actions attached to a folder are also available to all enclosed folder; with this, you can define one operation on a directory and invoke it on any deeply-nested file in that directory. Build commands are executed in the Build Results window; Run and Debug commands are executed in the graphical Debug or Console windows.
If you want to share action tools with others, you can define them in an .xccommands file in your project directory before adding that directory to the Organizer. The scripts attached to an Organizer item can be exported to an .xccommands file with the Export Actions... menu item in the Gear button at the bottom of the Organizer window.
Snapshots
You can take a ‚Äúsnapshot‚Äù of project state at any time (such as after a successful build or before refactoring). If you later decide to discard all changes, you can restore your files to the contents of a snapshot. Edit ▶ Make Snapshot Now makes a full copy of your project; if you later make changes you don't want to keep, you can use Edit ▶ Snapshots... to choose a snapshot, examine how it differs from your current project, and restore your project or individual files from it to the state as of that snapshot.
Directories in the Organizer can also be snapshotted.
Snapshots are stored in a sparse .dmg file in your user directory; you can protect this with a password if you choose for added security (using DiskUtility). The snapshots are stored in ~/Library/Application Support/Developer/Shared/SnapshotRepository.sparseimage
and mounted in your /tmp
directory.
Xcode Source Editor
The new source code editor in Xcode 3.0 edits large files up to 5 times faster than Xcode 2.5 and opens very large files almost instantly, instead of in tens of seconds. Syntax-aware indentation now works better than it did in Xcode 2.5 and earlier, handling many cases (such as multiline comments) that were handled poorly before.
Syntax Coloring, Code Focus, Code Folding, and Code Sense Completion work with dozens of text file types supported by Xcode: C, C++, Objective-C, Objective-C++, Rez, Property Lists, XML, HTML, Perl, Python, Ruby, Fortran, and others.
There are some special considerations for certain languages. For example, the Python languages considers tab characters to be semantically significant, and assumes that a tab character equals eight spaces. For Code Folding and indentation to work correctly for Python, set View ▶ Text ▶ Tab Settings to 8 characters. It may also help to disable the Editor Uses Tabs setting in Xcode Preferences ▶ Indentation.
Code Focus
Code Focus shows you the block structure of your code on demand. A new Focus Ribbon shows the nesting depth of every line of code; moving the mouse pointer into the ribbon highlights the blocks of your text by nesting depth, without changing your selection. This is great for checking for misbalanced parentheses, unbroken switch statements, etc.
The Code Focus feature can also be latched on with the Code Focus menu item in the View menu, or using the Command-Control-Option-F keyboard shortcut.
The Focus Ribbon also contains controls for Code Folding. You can collapse brace structures, C-style comments, and other nested structures in C-like languages, XML, and plists. You can also invoke folding and unfolding from the View or contextual menus, or by the shortcut keys listed in those menus.
Code Completion
Code completion is now done inline, as in Mail, Terminal, and other applications. You can confirm completions with the Tab key (not F5 any longer) and invoke the traditional completion pop-up menu with the Escape key.
Code completion now completes build setting values in .xcconfig
files and file paths and names in #include statements.
Syntax Coloring
Syntax coloring now supports separate colors for different kinds of symbols: classes, types, constants, functions, and variables, as well as macros and comments. Xcode ▶ Preferences ▶ Fonts and Colors allows you to control the individual colors, and define, load, and save preferred color themes. Both uncolored and syntax-colored text are placed on the Pasteboard for copy and text drag operations.
Message Bubbles
Errors, Warnings, and Breakpoints are now shown inline in source text, not just as icons in the gutter. Show them with the View ▶ Message Bubbles menu or the context menu in the text editor. Multiple messages are consolidated into single bubbles; bubbles can be shown or hidden by clicking on the error or warning icon in the gutter, or by using the context menu on the icon in the gutter.
Class Navigator
The Navigator Bar now contains a Class Navigator next to the Bookmarks popup. This allows you to move quickly in the class hierarchy to the superclass or subclasses of classes defined in the current file.
Open Quickly improvements
Open Quickly now accepts the same line number format as Go to Line; follow the filename with a colon and a line number or colon-separated range to go directly to a line in a file. You can also navigate directly to the implementation or declaration of a symbol by entering the symbol into the Open Quickly box, or just by selecting the symbol and pressing Command-Shift-D.
Command-line tool to open a file in the Editor
A command line tool allows you to open existing files, create new untitled or named files, and pipe text from standard input into Xcode's editor. You can use this as your EDITOR
shell variable for command-line operations on text. The command is installed at /usr/bin/xed
; the documentation can be found with man xed
.
Streamlined Debugging
In Xcode 3.0 the distinction between Run and Debug has been blurred. You can opt to launch your application under the debugger (Debug) or not (Run), but you do not need to stop and restart your application.
There is no more Standard I/O Log or Run Log, there is only the Console. Stdin to your app is now sent via the Console log while executing and to the debugger when paused. The Console window now has a toolbar like the old Run window formerly did. To make this available in existing projects, remove the <user>.mode*V3 file from the project wrapper. The debugger prompt and text colors set in the Debugger preferences are visual indicators for where the input is going.
Datatips are structured, hierarchical tool tips that show the value of variables in scope during debugging, right in your text file. You can even descend into objects or structures and perform actions, such as printing the object to the console.
The Xcode debugger now shows you the contents of C, CoreFoundation, and AppKit array types, as well as STL vectors. The first 10 array elements are shown by default, and controls allow you to see the next and last 10.
A Mini Debugger allows you to pause and step through your application while it is in front, without activating Xcode.
Debugging with Go The Debug menu has been re-organized with new launch options: Run, Debug, and Go. Corresponding changes have been made to the Build menu. Run and Debug launch the executable without and with breakpoints enabled, respectively; Go launches the executable with the breakpoint status unchanged from your last session. If you Run but then Activate Breakpoints to debug a problem, Xcode automatically launches the debugger and attaches it to the running application so you don’t have to restart your session. If you launch using a performance tool like Shark, you can use Go (or Build and Go) to launch with Shark again.
For convenience, the command-key equivalents for Go are variants on the Return key.
Project Find
The Project Find module has been rewritten to search projects and directories considerably faster. For text searches in UTF-8 files, the speed is now comparable to grep
. Project Find can now search in cross-project references as well as the current project alone: select a current Find Set (like “Project” or “Project and Frameworks”), click the Options button, and click the “Project and referenced projects” radio button. Project Find now supports “Find in source and headers” with a new checkbox in the Options panel, and a new search style “Symbols” that searches for uses of symbols (call sites), rather than just definitions or plain text. Regular Expression searches now find multiple matches on the same line.
Classes, connections, and bindings in nib files are now indexed and can be found in the Project Symbols smartgroup, Go to Definition (command-double-click), and Find in Project's Definitions or Symbols search.
Xcode's Spotlight importers for source code now index only the identifiers in your source, not the full text, making it easier to find appropriate code files with Spotlight. It also indexes the target, configuration, and product names from project files, so you can find what project builds a specific target or executable using Spotlight.
Documentation Viewing
The documentation viewer has been completely revamped. It manages Documentation Sets (downloadable and installable separately, with update notifications broadcast via subscriptions and RSS) and does full-text, API, and Document Title searches within a documentation set or across documentation sets. The API search now does “contains” matches rather than “starts with” by default. The Documentation Viewer supports the same Class Navigator popup as in the Source Editor.
Research Assistant Choosing Help ▶ Research Assistant opens a new floating window shows the declaration, abstract, and usage notes about system APIs, macros, and build settings. It covers both Apple frameworks and standard Unix C APIs, and has detailed information on API deprecation and 64-bit availability of functions and methods. Open the Research Assistant and as you select terms, the window shows useful information about the selection.
SCM Repository Management
You can now manage SCM repositories (Perforce, Subversion, and cvs) from within Xcode. The current feature set allows you to configure your repository access, manage repository authentication, browse the repository, check out a revision, and import a new project into the repository.
New Build Properties inspector tab
The Build tab of project and target inspectors has been redesigned and supports several new features. You can define per-architecture variants of most compiler-related build settings by using the Action (gear) menu in the inspector. Build settings and values can be sorted, as well as collapsed and filtered in the new outline view. Most values can be edited in the cell using the standard “click-and-a-half” editing technique.
Build System Improvements
There have been few changes in the Build System so your Xcode 2.4.x projects should build the same as they did on Tiger (excepting, of course, the change from Tiger APIs to Leopard). Most of the changes in building are to support building Objective C 2.0 and 64-bit.
New Architectures sheet for 32- and 64-bit building
The “PowerPC / Intel” Architectures checkboxes have been replaced with “32-bit / 64-bit” checkboxes. Both settings are explicitly Universal. If you want an Architectures setting that is different from the ones provided by the checkboxes, select the Architectures line and press Tab to enter the Value column of the Architectures setting to edit your architecture list manually.
The checkboxes transform hardcoded architecture settings (e.g. ppc or i386) into sets of hardcoded values (e.g. ppc64 x86_64
). If the Architectures build setting contains $(NATIVE_ARCH)
, the checkboxes transform it into a build setting that is useful for debug builds:
$(NATIVE_ARCH_32_BIT)
The 32-bit version of the build machine’s architecture. This is useful for non-64-bit-aware code.
$(NATIVE_ARCH_64_BIT)
The 64-bit version of the build machine’s architecture. This is useful for 64-bit-only code.
$(NATIVE_ARCH_ACTUAL)
The actual build machine’s architecture. This is useful for building “best thin for this machine.”
Per-Architecture Build Settings
The new Build Settings editor (available for both targets and projects) supports per-architecture entries for build settings that affect compilation and code generation. By selecting a build setting and choosing "Add Per-Architecture Setting" from the Action (gear) popup, you can specify different values for a setting for each architecture. If you don't specify a per-architecture setting for a given architecture, the "base" value of that build setting is used.
You can now specify per-architecture build settings in .xcconfig files. The syntax to define an architecture-specific setting is:
SETTING_NAME[arch=arch_name] = some_value
where arch_name
is a valid architecture name as you would enter in the ARCHS
build setting
New and Removed Build Settings
There are new predefined build settings that provide the major and minor versions of Xcode and Mac OS X at build time. These are in a format compatible with the Availability Macros so they can be passed down to your sources in Preprocessor Macros if desired. See the Build Settings Release Notes for details.
The Objective-C Garbage Collection setting enables compiling and linking Objective-C code for automatic garbage collection. It has three states: Unsupported disables garbage collection; Required (-fobjc-gc-only
) will create an executable that runs only on Mac OS X 10.5 and later and will always run garbage collected; and Supported (-fobjc-gc
) will create an executable that can run either garbage collected or not, depending on how the user chooses to launch it or, in the case of libraries and frameworks, whether the invoking application is using garbage collection.
The Enable Supplemental SSE3 Instructions build setting now sets the -mssse3
flag in gcc 4.0.
The Treat Missing Function Prototypes as Errors build setting now sets the -Werror-implicit-function-declaration
flag in gcc 4.0 for C and Objective-C only.
The Order File build setting now sets the -order_file
parameter of the linker. Its value should be a path to a file relative to the project folder; that file should contain the newline-separated mangled names of functions in the linked executable, in order of call frequency. Order files help increase locality of reference and reduce swapping.
In Xcode 3.0, the Zero Link build setting is ignored and has no effect. It still appears in the user interface and is preserved for backwards compatibility with Xcode 2.5 and earlier, but all executables are always fully linked in Xcode 3.0.
In Xcode 3.0, the Essential Symbols feature for STABS-based debugging has been removed, and its build setting is ignored.
Composite SDKs
You can now specify multiple SDKs; for example, a system SDK, a QuickTime SDK, and the SDK for a third-party library or framework. To do this, set the Base SDK Path build setting to a system SDK and set the Additional SDKs build setting to the list of additional SDKs to composite. At build time Xcode will create a composite SDK and cache it in a common location; all projects that use that combination will share the one composite SDKs. This allows you, for example, to use libraries provided by third parties when building against a system SDK.
Parallel Target Builds
A checkbox in the Project Inspector allows all aggregate targets in the project to build their dependent targets in parallel when possible. This means that you can build a short command-line tool while preprocessing your header files for your main application. This is especially useful on multiprocessor machines and while using Distributed Network Builds or distcc.
Note: Using parallel target builds may reveal implicit dependencies that have been masked by the serial building of targets. Turning on parallel target builds may result in intermittent and hard-to-reproduce build failures due to one target needing the output of another that has not yet been built. Inspect your project carefully and ensure that each target has its Direct Dependents set correctly before enabling Parallel Target builds.
Two- and Three-Way Unit Tests with Garbage Collection
Unit Tests now run as many architectures as possible on the build machine. Unit tests on Intel will attempt to run the 32-bit PowerPC unit tests in Rosetta, and tests on 64-bit machines will run both 64-bit and 32-bit architectures. Unit Tests can now be run on garbage-collected Objective-C code.
Run Script Build Phase
You can check a check box in the Run Script build phase to suppress the output of environment variables in the build log.
Xcode News
If you launch Xcode with no projects, documents, or other windows open, the Xcode News window will appear, showing a selection of the Apple Developer Connection website with news and information for Apple developers. You can reopen this window at any time using the Xcode News item in the Help menu; a checkbox on the window prevents its opening automatically at launch for that release of Xcode.
CoreData Mapping Model and Model Versioning
There is a new Design Model available in the Design menu to create Core Data mapping models. In addition, data models are now versioned, so you can change your data models and retain compatibility with older data files.
Here are some commonly-reported issues that are known with this release of Xcode.
Creating a project in /tmp may prevent certain project template variables to not expand properly
Changing the Configuration popup in the Build Settings inspector may not update the Based On popup. Close and reopen the inspector to see the correct value.
After changing from Textual to Definitions and back to Textual, Project Find may not find all valid matches in a project.
The Build toolbar item is occasionally disabled when the project is buildable. Use the Build menu item instead.
Much of the functionality new in Xcode 3.0 does not have AppleScript support.
Circular #includes of header files or a cycle of symbolic links may cause Xcode to crash while building or indexing a project.
Opening the same project file simultaneously from two separate instances of Xcode may cause one to crash.
Projects that generate source files at build time must turn off Lazy Symbol Loading in order to stop at breakpoints in those files.
Strings containing Unicode characters do not display properly in the Debugger.
Deleting a header file from a project may not force a rebuild of source files that include it.
You cannot recover a deleted project from a snapshot of it using Xcode. Navigate directly to the Snapshot repository and duplicate the most recent snapshot.
Custom Build Rules no longer output the value of all environment variables in the build log, and there is no way to make them do so. IF you need to do this in order to debug a build rule, add a “set” command to the rule script.
As in previous versions of Xcode, for some Preferences (especially Distributed Builds) you may need to close the Preferences panel and reopen it in order to see the new value of the settings in the Preferences pane.
You cannot distribute builds using Shared Network Builds if Xcode 3.0 is installed in a location other than /Developer
.
Sharing your computer for distributed builds and changing the share priority for build tasks on your machine require administrator privileges. If you are unable to unlock sharing in the Xcode 3.0 Distributed Builds Preferences pane, ensure that you have a valid administrator user name and password. If you are still unable to authorize sharing, you will need to re-install the Developer Tools.
Sharing your computer for distributed builds also requires that your machine be able to reach the remote build host(s) over the network. If remote hosts are unable to access your machine for distributed builds, first ping the remote machines to ensure that your machine can reach them over your network. For network problems, contact your system administrator.
Sharing for distcc
If the checkbox "Share my computer for shared workgroup builds (distcc)" in the Xcode 3.0 Distributed Builds Preferences is enabled, and you can ping the remote build host(s) in your workgroup, check the configuration of your machine.
The executable /usr/bin/distccd
must be installed, owned by root:wheel
, with permissions -rwxr-xr-x
The file /System/Library/LaunchDaemons/distccd.plist
must be installed, owned by root:wheel
, with permissions -rw-r--r--
If any of these conditions is not true, you should reinstall the Developer Tools.
If your system appears to be configured correctly, you should be able to start the shared workgroup builds daemon by typing the following command into a Terminal window:
sudo launchctl load -w /System/Library/LaunchDaemons/distccd.plist |
Turning off sharing for distcc
If the checkbox "Share my computer for shared workgroup builds (distcc)" in the Xcode 3.0 Distributed Builds Preferences is disabled but Activity Monitor shows one or more distccd processes running on your machine, you should be able to stop all the distccd processes at once by typing the following command into a Terminal window:
sudo launchctl unload -w /System/Library/LaunchDaemons/distccd.plist |
Note that the "kill" command will stop but not disable the daemon, and launchd will immediately relaunch it.
If you encounter an error when attempting to enable or disable the checkbox "Share my computer for shared workgroup builds (distcc)" in the Xcode 3.0 Distributed Builds Preferences, follow the steps above for sharing or stopping sharing of distcc.
Changing the share priority for shared workgroup builds (distcc)
If you are able to set the share priority of your machine for shared workgroup builds in the Xcode 3.0 Distributed Builds Preferences, but the priority of the distccd process(es) on your machine does not change, check the configuration of your machine.
The executable /Library/Developer/3.0/distcc/distcclaunchdconfig
must be installed, owned by root:wheel
, with permissions -rwxr-xr-x
The file /System/Library/LaunchDaemons/com.apple.distccdConfig.plist
must be installed, owned by root:wheel
, with permissions -rw-r--r--
If any of these conditions is not true, you should reinstall the Developer Tools.
If your system appears to be configured correctly, you may be able to change the priority of the shared workgroup builds processes by typing the following command into a Terminal window:
sudo renice <priority> <pid> |
for the process with the lowest process ID. Valid priorities are 0 (high), 10 (medium), and 20 (low).
If you encounter an error when attempting to set the share priority for shared workgroup builds in the Xcode 3.0 Distributed Builds Preferences, follow the steps above.
Sharing for dedicated network builds (DNB)
If the checkbox "Share my computer for dedicated network builds" in the Xcode 3.0 Distributed Builds Preferences is enabled, and you can ping the remote build host(s) in your dedicated network, check the configuration of your machine.
The following files must be installed in /Library/Developer/3.0/DNB/DedicatedNetworkBuilds.framework/Resources
, owned by root:wheel
, with the correct permissions:
DNB.zip -rw-r--r--
bfobserver -rwxr-xr-x
dnbd -rwxr-xr-x
scmount -rwxr-xr-x
The following files must be installed in /System/Library/LaunchDaemons
, owned by root:wheel
, with permissions -rw-r--r--
:
com.apple.dnbobserver.plist
com.apple.dnbvolunteer.plist
If any of these conditions is not true, you should reinstall the Developer Tools.
If your system appears to be configured correctly, use Activity Monitor to check that both the bfobserver and dnbd daemons are running. If one or both of these daemons is not running, you should be able to start it manually by typing the appropriate command into a Terminal window.
First start the build files observer:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dnbobserver.plist |
Then start the DNB volunteer:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple. dnbvolunteer.plist |
Stopping sharing for dedicated network builds (DNB)
If the checkbox "Share my computer for dedicated network builds" in the Xcode 3.0 Distributed Builds Preferences is disabled but Activity Monitor shows a dnbd process running as root on your machine, you should be able to stop the process by typing the following command into a Terminal window:
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple. dnbvolunteer.plist |
Note that the "kill" command will stop but not disable the daemon, and launchd will immediately relaunch it. You should not stop the build files observer daemon (bfobserver).
If there is a dnbd process running as your user ID on your machine, your machine is acting as a dedicated network builds remote host (recruiter), sending build jobs to other machines. Killing that process will not disable your machine for sharing for dedicated network builds.
If you encounter an error when attempting to enable or disable the checkbox "Share my computer for dedicated network builds" in the Xcode 3.0 Distributed Builds Preferences, follow the steps above for sharing or stopping sharing of dedicated network builds.
The gcc_select
command-line tool has been removed.
Last updated: 2010-05-22