我在iOS应用的版本控制中遇到了两个分支的复杂合并。在我完成识别并选择project.pbxproj
中的冲突行之后,Xcode将不会加载该文件。通过plutil
运行它会显示:
CFPropertyListCreateFromXMLData():旧式plist解析器:字典中缺少分号。
我已经恢复并尝试合并(小心)几次,每次都得到相同的结果,虽然我看不到我在哪里引入格式问题。
是否有一个工具可以用来找出错误所在的行或对象,以便找到我正在犯的错误?< / p>
答案 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时减小大小会让你更接近消化不良的程度。