This used to work flawlessly for me, too, but stopped working with Xcode 3.0. I'm sure there must be some hidden setting since it works for some, presumably those that had it activated in Xcode 2.x, however I haven't found it.
For those interested, I have a workaround that involves calling a simple AppleScript which saves all open IB documents. Here are the steps:
1) Create the Apple Script, something along these lines:
tell application "Interface Builder"
set num to count of documents
if num > 0 then
repeat with i from 1 to num
tell document i to save
end repeat
end if
end tell
2) Save it as Script (in my example /Users/myself/Programming/SaveIBFiles.scpt)
3) In your project, create a new Target. That is menu "Project" » "New Target...", there choose "Other" » "Shell Script Target". I named it "Save IB Files"
4) Expand the new target, it already contains a "Run Script" phase. Call up the info for this Run Script phase, "General" tab, leave Shell at /bin/sh
and as Script write:
if [ -f "/Users/myself/Programming/SaveIBFiles.scpt" ]; then
osascript "/Users/myself/Programming/SaveIBFiles.scpt"
fi
5) Now select your original target, call up its info, "General" tab, and add the new target as a direct dependency.
Now, whenever you build your app, the script gets called, saves your open IB files and then compiles your main target.
Note that if you don't create a new target and merely add a "Run Script" build phase to your main target, the saving seems to occur too late.
Hope this helps!