Xcode“无法解析Info.plist的内容”

41

我在使用xCode解析Info.plist文件时遇到了困难。我已经多次用之前备份的相同版本的旧文件替换了该文件,但仍然出现同样的错误。

以下是完整的错误信息:

couldn't parse contents of '/Users/...Info.plist': The data couldn’t be read because it isn’t in the correct format.

这个我一点头绪也没有。我正在使用xCode 5.0.1,Mavericks操作系统。


请分享您的 Info.plist 文件内容。 - Jaime Hablutzel
9个回答

86

这是检测错误发生在哪一行的最佳方法之一。

只需进入包含 plist 文件的目录,然后在终端中输入此命令->

plutil filename.plist

12
我知道Stack Overflow不太喜欢感谢的话,但是这个小窍门让我很开心!虽然我最终也会通过文本编辑器找到合并指示器,但这个工具直接将我引导到了那里。谢谢你! - Tony Adams
完美的答案。运行了命令,它给了我行号。通过Xcode,在plist上右键单击,以源代码形式打开并转到该行。结果发现bundle number重复了2次。所以我删除了一个。清理并构建。项目成功运行。 - TharakaNirmana
这非常有用,因为您的plist可以是有效的xml,但仍然是无效的plist。 - lewis
1
像查克·诺里斯一样成功! - Marlhex

15

这个问题的另一个原因可能是尝试将URL(实际上只是斜杠等)放入您的app-Info.plist中。

解决方法是在您的项目构建设置中的Info.plist Other Preprocessor Flags选项中提高-traditional标志。

输入图像描述


4
天啊,这真是太晦涩了,但它解决了我的问题!谢谢!在我的情况下,我的属性列表中有一个Sparkle SUFeedURL,显然导致预处理器出现故障。你甚至是在哪里找到“-traditional”的文档的?它是什么意思? - nevyn

4

我想你可能已经使用过源代码控制工具,你可以使用基本的文本编辑工具而不是 Xcode 来打开这个 plist 文件,使用 command + F 查找 "<<<<<" 或者 ">>>>>" 字符串,然后你可能会发现类似以下的错误信息:

<<<<<<< .mine

>>>>>>> .r605

选择正确的字符串,删除另一个,错误已解决!


2
看起来用备份文件替换原文件,然后在组织器中删除项目的派生数据就是解决方法。希望这能帮到其他人。

我尝试替换plist文件和项目文件,但仍然出现错误。唉! - ganders

2

当git合并出现冲突时,我个人破坏了文件。.plist是一个XML文件,git冲突会在其中添加<<<<和>>>>以标记差异。

在Finder中找到项目文件夹中的.plist文件。使用文本编辑器打开它,找到不像正确XML的行,将其删除,并确保删除重复的XML行/节点(由于git记录的更改之前和之后)。


2
这可能是因为您将Info.plist文件移动到新文件夹中或从文件夹中删除(基本上,如果其路径发生了变化)。
请转到“构建设置”并搜索“Info.plist文件”。编辑值。例如,如果您已将plist文件从主文件夹移动到名为Resources的子文件夹中,则必须进行以下更改:
之前:
TargetName/Info.plist

之后:

TargetName/Resources/Info.plist

1
在构建iOS应用时,当默认方向设置为自动旋转时,Info.plist文件可能会损坏。第一次构建时,Info.plist文件会正确创建,但后续构建会导致...
<key>UIInterfaceOrientation</key>
<string></string>
</string>

在这一点上,Xcode无法构建项目。

除了删除文件并重新生成它,还有其他解决方法吗? - Andrew
我遇到了相同的错误,按照@Vizllx的方法仍然出现错误。然后我使用Sublime Text打开info.plist文件,发现代码冲突。 - Kathen

0

我遇到了同样的错误,并意识到问题是我的 Info.plist 中有一个 URL(例如 http://example.com/something)作为值,而我只是在它上面开启了预处理(没有使用 -traditional 标志)。显然,Xcode 将把 // 视为注释标记,并省略其余部分。

我发现的一种解决方法是采用预处理器,如下所示:http:/${}/example.com/something,这通过在中间放置一个空字符串替换来打破 //,使其不像 Xcode 的注释,但在预处理后它又变回了正常的 URL。


0

每当Xcode预处理器无法解析info.plist文件时,就会出现此错误。

因此,要查找特定行中的错误,请执行以下步骤:

  1. 在Xcode中打开您的project.xcworkspace
  2. 转到项目导航器
  3. 在您的项目内部,单击信息文件,如果存在错误,则会弹出对话框,其中包含错误存在的行号

您可以参考下面的弹出对话框图像,其中我的情况显示错误位于第35行。

enter image description here

希望这能帮到你或其他人。谢谢! 祝编程愉快 :-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接