4
votes

I created a settings bundle for my iOS app and tried to edit the Root.plist file.

I can change some of the existing values (those that are created by default), but if I try to add a new item (no matter the type), Xcode 4 crashes with the following error:

enter image description here

Anybody knows what might be causing this?

I'm using Xcode 4.02 build 4A2002a. This is the log:

ASSERTION FAILURE in /SourceCache/DVTKit/DVTKit-221/Framework/Classes/PlistView/DVTPlistDictionaryNode.m:171
Details:  method -[DVTPlistDictionaryNode value] is inappropriate for instances of DVTPlistDictionaryNode
Object:   <DVTPlistDictionaryNode: 0x202442340>
Method:   -value
Thread:   <NSThread: 0x200020700>{name = (null), num = 1}
Hints:   None
Backtrace:
  0  0x0000000100949773 -[IDEAssertionHandler handleFailureInMethod:object:fileName:lineNumber:messageFormat:arguments:] (in IDEKit)
  1  0x000000010006d394 _DVTAssertionFailureHandler (in DVTFoundation)
  2  0x00000001002ed3cb -[DVTPlistDictionaryNode value] (in DVTKit)
  3  0x00000001002f0443 -[DVTPlistModel replacePlist:withPlist:] (in DVTKit)
  4  0x00000001003030d4 -[DVTPlistViewController outlineView:setObjectValue:forTableColumn:byItem:] (in DVTKit)
  5  0x00007fff8830e149 -[NSOutlineView _dataSourceSetValue:forColumn:row:] (in AppKit)
  6  0x00007fff883c4dd9 -[NSTableView performClickOnCellAtColumn:row:] (in AppKit)
  7  0x00007fff883c1200 -[NSTableView _attemptToPerformClickOnFocusedColumn] (in AppKit)
  8  0x00007fff86bd511c __NSFireDelayedPerform (in Foundation)
  9  0x00007fff867f5be8 __CFRunLoopRun (in CoreFoundation)
 10  0x00007fff867f3dbf CFRunLoopRunSpecific (in CoreFoundation)
 11  0x00007fff88f577ee RunCurrentEventLoopInMode (in HIToolbox)
 12  0x00007fff88f575f3 ReceiveNextEventCommon (in HIToolbox)
 13  0x00007fff88f574ac BlockUntilNextEventMatchingListInMode (in HIToolbox)
 14  0x00007fff87ec4e64 _DPSNextEvent (in AppKit)
 15  0x00007fff87ec47a9 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] (in AppKit)
 16  0x00007fff87e8a48b -[NSApplication run] (in AppKit)
 17  0x00007fff87e831a8 NSApplicationMain (in AppKit)
 18  0x0000000100000eec
 19  0x0000000000000002

This is the contents of the root.plist created by Xcode itself:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>PreferenceSpecifiers</key>
    <array>
        <dict>
            <key>Title</key>
            <string>Group</string>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
        </dict>
        <dict>
            <key>AutocapitalizationType</key>
            <string>None</string>
            <key>AutocorrectionType</key>
            <string>No</string>
            <key>DefaultValue</key>
            <string></string>
            <key>IsSecure</key>
            <false/>
            <key>Key</key>
            <string>name_preference</string>
            <key>KeyboardType</key>
            <string>Alphabet</string>
            <key>Title</key>
            <string>Name</string>
            <key>Type</key>
            <string>PSTextFieldSpecifier</string>
        </dict>
        <dict>
            <key>DefaultValue</key>
            <true/>
            <key>Key</key>
            <string>enabled_preference</string>
            <key>Title</key>
            <string>Enabled</string>
            <key>Type</key>
            <string>PSToggleSwitchSpecifier</string>
        </dict>
        <dict>
            <key>DefaultValue</key>
            <real>0.5</real>
            <key>Key</key>
            <string>slider_preference</string>
            <key>MaximumValue</key>
            <integer>1</integer>
            <key>MaximumValueImage</key>
            <string></string>
            <key>MinimumValue</key>
            <integer>0</integer>
            <key>MinimumValueImage</key>
            <string></string>
            <key>Type</key>
            <string>PSSliderSpecifier</string>
        </dict>
    </array>
    <key>StringsTable</key>
    <string>Root</string>
</dict>
</plist>
1
What is the root element of your plist? Is it a dictionary (which Xcode seems to be expecting) or an array? - Jeremy W. Sherman
It's an array (you can actually see it on the image above). The plist was created by Xcode itself though... - cfischer
I checked the root.plist with a text editor and the root element is a dictionary. You may see it below. BTW, this happens with all projects, not just mine. - cfischer
Odd. Can you keep working with it after telling Xcode not to crash? Sometimes that has been enough for me to do what I want to do. If all else fails, you might consider using PlistBuddy or defaults to manipulate your plist. (Property List Editor.app would be ideal, but I don't think it's included in the Xcode 4 installation.) - Jeremy W. Sherman
If I ignore the crash, it seems to work. If you post this as an answer, I'll accept it. - cfischer

1 Answers

3
votes

Sounds like an Apple bug. If you tell Xcode to Continue rather than Crash, you might be able to keep working as if nothing went wrong. If all else fails, you might consider using PlistBuddy or defaults to manipulate your plist. (Property List Editor.app would be ideal, but I don't think it's included in the Xcode 4 installation.)