我在 iOS 应用程序的版本控制中面临两个分支的复杂合并。在我识别并选择了 中的冲突行之后project.pbxproj
,Xcode 将不会加载该文件。运行它plutil
显示了这一点:
CFPropertyListCreateFromXMLData():旧式 plist 解析器:字典中缺少分号。
我已经恢复并尝试了几次合并(小心地),每次都得到相同的结果,尽管我看不到我在哪里引入了格式问题。
有没有一种工具可以用来至少找出错误所在的行或对象,以便找到我正在犯的错误?
我在 iOS 应用程序的版本控制中面临两个分支的复杂合并。在我识别并选择了 中的冲突行之后project.pbxproj
,Xcode 将不会加载该文件。运行它plutil
显示了这一点:
CFPropertyListCreateFromXMLData():旧式 plist 解析器:字典中缺少分号。
我已经恢复并尝试了几次合并(小心地),每次都得到相同的结果,尽管我看不到我在哪里引入了格式问题。
有没有一种工具可以用来至少找出错误所在的行或对象,以便找到我正在犯的错误?
我创建了以下测试:
#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 进行调试。
我确定您已经考虑过这一点,但我看到的唯一选择是编写一个快速实用程序。
您可以尝试CFPropertyListIsValid()
并希望它吐出一些有用的东西。标题说:
调试库版本会吐出一些有用的消息。
也许这个功能可以让您更深入地了解它的日志记录活动?我不知道 Apple 认为“有帮助”或“某些”是什么意思(也许只是,“不。它是无效的。”以及返回false
),但那将是我的下一次尝试。
此外,CFPropertyListCreateWithStream()
如果您一次阅读一点,可能会有所帮助。您可以通过分部分输入它直到它返回 NULL 来使用它来将错误位置归零。当遇到 NULL 时减少大小会让你更接近它的消化不良点。