Mac OS X Reference Library Apple Developer
Search

Interface Builder Release Notes

This document contains the release notes for Interface Builder 3.0 and later.

Contents:

Interface Builder 3.2 Release Notes
Interface Builder 3.1.1 Release Notes
Interface Builder 3.1 Release Notes
Interface Builder 3.0 Release Notes


Interface Builder 3.2 Release Notes

Interface Builder 3.2, included with the Xcode 3.2 toolset, is available only with Snow Leopard and is not supported in previous versions of Mac OS X.

Summary of Changes in Interface Builder 3.2

General

Inspectors

Interface Builder Plug-ins

Connections

Working with Objects in the Design Canvas

ibtool and the Interface Builder NIB Post-Processor

Integration with Xcode

File Formats

Changes to Specific Controls

Details About Enhancements in Interface Builder 3.2

The Library's Classes tab

The Classes tab in Interface Builder's Library contains all of the classes IB has parsed from your Xcode project, linked frameworks, system and user plug-ins, and manually added headers. The Classes tab offers a one-stop location for class management. With it, you can:

Note: You can use the key combination Command-Shift-Right-Arrow (‚áß‚åò‚Üí) on any object in your document to quickly jump to that object's class in the Classes tab.

64-bit Interface Builder

Interface Builder 3.2 will launch in 64-bit mode on supported hardware. Developer plug-ins should be compiled 64 and 32-bit Universal. If you open a document that contains objects from a 32-bit only plug-in (such as Carbon), then Interface Builder will relaunch automatically in 32-bit mode.

Important: Developers need to re-compile their Interface Builder plug-ins to be 32-bit and 64-bit Universal.

Adding your own size inspectors

With IB 3.2, you can add custom size inspectors for the classes integrated with your Interface Builder plug-ins. This is done much in the same way as attribute inspectors. In the integration file for your class, implement the ibPopulateSizeInspectorClasses: method. In this method, you will add the class for your class's size inspector to the array of existing size inspector classes.

An example implementation of ibPopulateSizeInspectorClasses: may look like this:

#import <InterfaceBuilderKit/InterfaceBuilderKit.h>
#import "MyControlSizeInspector.h"
#import "MyControl.h"
 
@implementation MyControl (MyControlIntegration)
 
//...
 
- (void)ibPopulateSizeInspectorClasses:(NSMutableArray *)classes {
    [super ibPopulateSizeInspectorClasses:classes];
    [classes addObject:[MyControlSizeInspector class]];
}
 
@end

Important: Be sure to call the super class's implementation of ibPopulateSizeInspectorClasses: first.

Determining if and how children are removed from classes integrated with Interface Builder plug-ins

When developing Interface Builder plug-ins, you can use the following methods to determine if and how the children of your custom classes are removed:

For example, if you have a control (MyOneComponentControl) that you want to always have at least one subcomponent (or child), you would implement ibCanRemoveChildren and ibRemoveChildren in the following way:

#import <InterfaceBuilderKit/InterfaceBuilderKit.h>
#import "MyOneSubviewControl.h"
 
@implementation MyOneComponentControl (MyOneComponentControlIntegration)
 
- (BOOL)ibCanRemoveChildren:(NSSet *)objects {
    // assure there will always be at least one subview.
    BOOL willHaveAtLeastOneComponent = ([[[NSSet setWithArray:[self components]] setBySubtractingSet:objects] count] >= 1);
    return willHaveAtLeastOneComponent && [super ibCanRemoveChildren:objects];
}
 
- (void)ibRemoveChildren:(NSSet *)objects {
    [self removeComponents:[[NSSet setWithArray:[self components]] setByIntersectingSet:objects]];
    [super ibRemoveChildren:objects];
}
 
@end

Important: Always call through to the superclass in ibCanRemoveChildren (if not returning NO, don't return YES, return the superclass's value) and ibRemoveChildren (after you remove your children).

Copying and pasting objects with connections

When a set of objects is copied to the pasteboard, the connections (outlets, actions, and bindings) between those objects are maintained. In Interface Builder 3.2, the connections to and from those objects to other objects that aren't included in the set being copied and pasted are also maintained in the following cases:

To paste objects without maintaining any connections, use the "Paste Without Connections" menu item or use the Option-Command-V (‚å•‚åòV) key equivalent.

Integration with the AppleScript to Objective-C Bridge

Snow Leopard contains a new AppleScript/Objective-C bridge named AppleScriptObjC, similar to the bridges for Python and Ruby. Interface Builder can read and write AppleScript source files for use with AppleScriptObjC, making connections simpler to use by making the outlets and actions from your AppleScript classes available. In addition, you can generate AppleScript source files from classes you create in Interface Builder (from using the Subclass feature of the Library's Classes tab).

For details on using AppleScriptObjC, see the AppleScriptObjC Release Notes.

Interface Builder 3.1.1 Release Notes

Enhancements

UIViewController NIB Name

The UIViewController attributes inspector's NIB Name combo box auto-populates and completes with the names of Interface Builder documents from the project containing the edited document. The design window for a view controller also contains a hyperlink that can be used to quickly navigate to the nib file loaded by a view controller.

UIScrollView

The Interface Builder library has been updated to contain an instance of UIScrollView for direct use in Interface Builder documents. To use a scroll view in a nib file, simply drag it from the library window, configure it with the inspector, and then optionally add subviews in Interface Builder or provide content at runtime. Remember to set the scroll view's content size at runtime.

Simulated Metrics Support for Top-Level UIViews

To aid in laying out UIViews that are loaded from UIViewControllers, this release of Interface Builder introduces the concept of simulated metrics for top-level UIViews. The simulated metrics allow you to specify the styles of the various bars that will be present on the window that will house the view that is being designed. For example, while working with a view that is intended to be loaded by a view controller that will be used in a tab bar controller, the simulated bar metrics can specify a simulated status bar and a simulated tab bar. In addition to giving a more accurate visual preview of the final interface, the simulated metrics will also constrain the layout of the view and aid in correct alignment and positioning of the subviews. The simulated metrics have no bearing on the view at runtime, they are simply a visual aid at design time.

Simulated Rotation Support for Top-Level UIViews

With this release of Interface Builder, UIViews have the same rotation preview control that UIWindows have. A top-level view's title bar presents a rotation button in the upper-right corner. Clicking the rotation button provides a preview of how the rotated view will look at runtime. This feature is intended to be used to validate the auto-resizing settings of the subviews of the top-level view.

Known Issues

CompileXIB Fails Because of Missing Plug-ins

If the Xcode CompileXIB build step fails because of a missing plug-in, follow these steps to workaround the issue:

  1. Open the xib file that is failing to build. Interface Builder should prompt you to load the missing plug-in.

  2. Choose to locate the plug-in and navigate to /System/Library/Frameworks.

  3. Choose the framework for the missing Interface Builder plug-in. See the table below for a list of plug-ins and their related frameworks.

  4. Save the document and quit Interface Builder.

  5. Return to Xcode and rebuild.

Interface Builder plug-ins and their related frameworks

AddressBook

com.apple.AddressBook.ibplugin

AddressBook.framework

Automator

com.apple.automator.AutomatorPalette

Automator.framework

ImageKit

com.apple.imagekit.ibplugin

Quartz.framework

QuartzComposer

com.apple.QuartzComposerIBPlugin

Quartz.framework

PDFKit

com.apple.pdfkit.ibplugin

Quartz.framework

QTKitIB

com.apple.QTKitIBPlugin

QTKit.framework

OSAKit

com.apple.OSAKit.IBPlugin

OSAKit.framework

DiscRecording

com.apple.InterfaceBuilder.DiscRecordingPlugin.ibplugin

DiscRecordingUI.framework

Interface Builder 3.1 Release Notes

What’s New

Cocoa Touch Support

General

Cocoa Touch Support

FAQ: How does UIViewController’s Autoresizes View To Fill Screen work?

FAQ: How do I re-order or modify the sub-controllers in a UITabBarController?

FAQ: How do I create a ‘Plain’ style UITableView?

FAQ: How do I use View Controllers?

FAQ: How do I add an Action to my object?

FAQ: How do I configure my Cocoa Touch application to load a NIB file automatically?

FAQ: How do I edit a Cocoa Touch view controller?

FAQ: How do I rotate a Cocoa Touch window to simulate the user rotating a device?

FAQ: What is a Proxy Object, and how do I configure a it?

FAQ: What is different about NIB loading in a Cocoa Touch application?

Known Cocoa Touch Issues

General Support

FAQ: What does refocusing the connections window mean?

FAQ: What does selecting a connection's endpoint in the connections window do?

FAQ: How do I use the selection menu to select objects?

FAQ: Why did my window disappear when resizing it?

FAQ: How do I find and replace all instances of a string in my document?

FAQ: How do I edit using the strings window?

FAQ: How do I extract content from the strings window?

Known General Issues

Interface Builder 3.0 Release Notes

General

File Format and Compatibility

Process

Summary of New Features

Known Issues and Workarounds



Last updated: 2009-10-07

Did this document help you? Yes It's good, but... Not helpful...