3

我在 iOS 应用程序的版本控制中面临两个分支的复杂合并。在我识别并选择了 中的冲突行之后project.pbxproj,Xcode 将不会加载该文件。运行它plutil显示了这一点:

CFPropertyListCreateFromXMLData():旧式 plist 解析器:字典中缺少分号。

我已经恢复并尝试了几次合并(小心地),每次都得到相同的结果,尽管我看不到我在哪里引入了格式问题。

有没有一种工具可以用来至少找出错误所在的对象,以便找到我正在犯的错误?

4

2 回答 2

3

我创建了以下测试:

#import <Foundation/Foundation.h>
#import <err.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        NSString *path = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:argv[1] length:strlen(argv[1])];
        NSData *data = [NSData dataWithContentsOfFile:path];

        if (!data)
            errx(EXIT_FAILURE, "open failed: %s\n", argv[1]);

        NSString *errorString;
        id plist = [NSPropertyListSerialization propertyListFromData:data
                                                    mutabilityOption:NSPropertyListImmutable
                                                              format:NULL
                                                    errorDescription:&errorString];


        if (!plist)
            errx(EXIT_FAILURE, "%s\n", [errorString UTF8String]);

        printf("plist successfully read\n");
    }
    return 0;
}

并使用修改后的 project.pbxproj 运行它:

// !$*UTF8*$!
{
        archiveVersion = 1;
        classes = {
                x = 1
        };
...

并得到以下错误:

2012-05-11 20:51:14.381 plist-test[41890:303] CFPropertyListCreateFromXMLData():旧式 plist 解析器:第 6 行的字典中缺少分号。解析将被放弃。中断 _CFPropertyListMissingSemicolon 进行调试。

于 2012-05-12T01:09:22.113 回答
0

我确定您已经考虑过这一点,但我看到的唯一选择是编写一个快速实用程序。

您可以尝试CFPropertyListIsValid()并希望它吐出一些有用的东西。标题说:

调试库版本会吐出一些有用的消息。

也许这个功能可以让您更深入地了解它的日志记录活动?我不知道 Apple 认为“有帮助”或“某些”是什么意思(也许只是,“不。它是无效的。”以及返回false),但那将是我的下一次尝试。

此外,CFPropertyListCreateWithStream()如果您一次阅读一点,可能会有所帮助。您可以通过分部分输入它直到它返回 NULL 来使用它来将错误位置归零。当遇到 NULL 时减少大小会让你更接近它的消化不良点。

于 2012-05-11T14:17:58.940 回答