If you want to develop applications for iPhone OS, you will need a Mac OS X computer running the Xcode tools. Xcode is Apple’s suite of development tools that provide support for project management, code editing, building executables, source-level debugging, source-code repository management, and performance tuning.
First is Xcode. It is an integrated development environment (IDE) that provides all of the tools you need to create and manage your iPhone projects and source files. With it you can build your code into an executable, and run and debug your code either in iPhone simulator or on a device.
The Xcode software comes with an advanced text editor, which supports features such as code completion, syntax coloring, code folding (to hide code blocks temporarily), and inline annotations for errors, warnings, and notes. The build system in Xcode provides both appropriate default settings and the ability to configure the environment to your heart’s content.

Then there is the Interface Builder. It is the tool you use to assemble your application’s user interface. Using Interface Builder, you assemble your application’s window by dragging and dropping preconfigured components onto it. The components include standard system controls such as switches, text fields, and buttons, and also custom views to represent the views your application provides. Note: Interface Builder is not in the early beta of the iPhone SDK. It will be available in the final release of the product.
To ensure that you deliver the best user experience for your software, the Instruments environment lets you analyze the performance of your iPhone applications while running in the simulator or on a device. Instruments gathers data from your running application and presents that data in a graphical display called the timeline. You can gather data about your application’s memory usage, disk activity, network activity, and graphics performance. The timeline view can display all of the different types of information side by side, letting you correlate the overall behavior of your application, not just the behavior in one specific area.