合并后在Xcode的project.pbxproj中查找错误

时间:2012-05-11 13:13:57

标签: xcode version-control merge-conflict-resolution

我在iOS应用的版本控制中遇到了两个分支的复杂合并。在我完成识别并选择project.pbxproj中的冲突行之后,Xcode将不会加载该文件。通过plutil运行它会显示:

  

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

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

是否有一个工具可以用来找出错误所在的对象,以便找到我正在犯的错误?< / p>

2 个答案:

答案 0 :(得分: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进行调试。

答案 1 :(得分:0)

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

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

  

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

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

此外,如果您一次阅读一下,CFPropertyListCreateWithStream()可能会有所帮助。您可以使用它来归零错误的位置,方法是将其分成几部分,直到它返回NULL。遇到NULL时减小大小会让你更接近消化不良的程度。