无法打开项目...无法打开,因为无法解析项目文件

时间:2008-12-12 03:32:35

标签: iphone xcode

我已经工作了一段时间来创建一个iPhone应用程序。今天当我的电池电量不足时,我正在工作并不断保存我的源文件,然后电源耗尽......

现在,当我重新插入计算机并且功能强大时,我尝试打开我的项目文件并收到错误:

  

无法打开项目

     

Project ...无法打开,因为无法解析项目文件。

有没有人知道我可以从中恢复的方式?我尝试使用较旧的项目文件并重新插入然后编译。它给了我一个时髦的错误,可能是因为它没有找到它想要的所有文件......

如果可能的话,我真的不想从头开始重建我的项目。


修改

好吧,我在这个和一个稍微老一点的项目文件之间做了一个差异,看起来文件中有一些损坏。合并后(好的和最新的部分)它现在正在工作。

关于SVN的好点。我有一个,但有一些funkiness尝试同步XCode。我现在肯定会花更多的时间......; - )

enter image description here

21 个答案:

答案 0 :(得分:220)

我遇到了这个问题,我的大四学生告诉我一个解决方案,即:

右键点击projectname.xcodeproj文件,此处projectname将是您项目的名称。右键单击后,选择显示包内容。之后,在文本编辑器中打开projectname.pbxproj文件。现在搜索包含<<<<<<< .mine=======>>>>>>> .r的行。例如在我的情况下看起来很喜欢这个

<<<<<<< .mine
    9ADAAC6A15DCEF6A0019ACA8 .... in Resources */,
=======
    52FD7F3D15DCEAEF009E9322 ... in Resources */,
>>>>>>> .r269

现在删除这些<<<<<<< .mine=======>>>>>>> .r行,使其看起来像这样

    9ADAAC6A15DCEF6A0019ACA8 /* BuyPriceBtn.png in Resources */,

    52FD7F3D15DCEAEF009E9322 /* discussionForm.zip in Resources */,

现在保存并打开您的Xcode项目并构建它。一切都会好的。

答案 1 :(得分:39)

穆罕默德的回答非常有帮助(并帮助我解决了问题)。但是,只需删除&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; =======&lt;&lt;&lt;&lt;&lt;&lt;&lt;在合并后保留两个分支的更改时,还不足以修复project.pbxproj(对我来说)中的解析问题。

我在PBXGroup部分(其开头由如下的块注释表示:/ * Begin PBXGroup部分* /)中有一个合并冲突,该部分是project.pbxproj文件。但是,我遇到的问题也可能出现在project.pbxproj文件的其他地方。

以下是我遇到的合并冲突的简化:

    <<<<<<< HEAD
          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
    =======
          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
    >>>>>>> branch name
            sourceTree = "<group>";
          };

当我删除合并冲突标记时,这就是我留下的内容:

          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
            sourceTree = "<group>";
          };

通常,删除合并冲突标记会修复project.pbxproj文件中的解析问题并恢复工作区完整性。这一次没有。

以下是我为解决问题所做的工作:

          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
            sourceTree = "<group>";
          };

          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
            sourceTree = "<group>";
          };

我实际上必须在第一个PBXGroup的末尾添加2行。

你可以看到,如果我选择放弃Head或合并分支的更改,那么就不会有解析问题了!但是,在我的情况下,我想保留我从每个分支添加的两个组,只是删除合并标记是不够的;我不得不在project.pbxproj文件中添加额外的行以保持正确的格式化。

因此,如果您在考虑解决了所有合并冲突之后再遇到解析问题,您可能需要仔细查看.pbxproj并确保没有& #39; t任何格式化问题!

答案 2 :(得分:28)

我得到了完全相同的错误,因为Cordova将允许您创建一个包含空格的项目,Xcode不知道如何处理。

答案 3 :(得分:23)

Xcode项目文件的可视化分析并没有帮助我在合并后找到错误。在Xcode试图解析文件时,查看syslog发现这样的行:

2/7/14 12:39:12.792 PM Xcode[9949]: CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 4426. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug.

修复后可以打开该项目。

答案 4 :(得分:21)

我有类似的问题。

Screenshot 1

以下是解决问题的步骤:

  1. 导航到projectName.xcodeproj

    所在的文件夹

    Screenshot 2

  2. 右键单击并选择&#39; Show Package Contents&#39;。您将能够看到.pbxproj扩展名的文件列表。

    Screenshot 3

  3. 选择project.pbxproj。右键单击并使用&#39; Text Edit&#39;。

    打开此文件

    Screenshot 4

  4. 您将能够看到<<<<<< .mine============>>>>>>>>>> .r123。这些通常是您从SVN获取更新时出现的冲突。 删除这些并保存文件。

    Screenshot 5

    Screenshot 6

  5. 现在,您可以打开项目而不会出现任何错误消息

答案 5 :(得分:3)

我最近在尝试将我的分支与远程分支合并时遇到了同样的问题。但是,上述解决方案似乎都不适合我的问题。

我的分支中的project.pbxproj文件或远程分支之间没有合并冲突。但是,我的projectName.xcodeproj文件将拒绝打开,原因与问题中显示的原因相同。

我的解决方案是使用文本编辑器查看project.pbxproj并查找文件语法是否存在任何不规则性(例如,额外的大括号)。通过关注与旧文件中插入或删除的行(与合并文件相比),我加快了这一过程。仔细研究后,我发现问题的原因是重复以下一行:

xxxxxxxxxxxxx /* [CP] Check Pods Manifest.lock */ = {

在我的合并文件中。这导致了一个未闭合的大括号和随之而来的无效pbxproj语法。删除上面的行修复了我的问题。

答案 6 :(得分:2)

分析项目文件的语法。在终端中检查项目内部:

plutil -lint project.pbxproj

这将显示解析器的错误。

可能出现的问题:有些项目为项目文件设置了git合并策略union。这适用于大多数时间,但如果失败,将默默地杀死您的项目文件。此策略在存储库的.gitattributes文件中定义。

答案 7 :(得分:2)

我遇到了同样的问题。我一如既往地删除了git生成的字符串,但Xcode仍拒绝打开.xcodeproj文件。但是一切都是正确的,没有丢失括号等。最后我尝试退出Xcode 并在 Xcode关闭时打开项目 ..然后它起作用了。我希望这有助于某人。

编辑:

要解决.xcodeproj文件中的冲突,您可以使用这个方便的脚本:

  1. 在项目目录中创建空的.sh文件(例如resolve_conflicts.sh)
  2. 以下是脚本:

    project文件= find -d . -name 'project.pbxproj' PROJECTDIR = echo *.xcodeproj project文件= “$ {} PROJECTDIR /project.pbxproj” 临时文件= “$ {} PROJECTDIR /project.pbxproj.out” SAVEFILE = “$ {PROJECTDIR} /project.pbxproj.mergesave”

    cat $ projectfile | grep -v“&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD”| grep -v“=======”| grep -v“^&gt;&gt;&gt;&gt;&gt;&gt;&gt;”&gt; $临时文件 mv $ tempfile $ projectfile

  3. 使用sh命令从终端运行它:sh resolve_conflicts.sh

答案 8 :(得分:1)

还原project.pbxproj

svn revert --filename -

答案 9 :(得分:0)

转到PhoneGapTest&gt;&gt;平台 然后删除文件夹ios 之后去终点站 然后输入: sudo phonegap build ios 之后你可以运行项目

答案 10 :(得分:0)

如果您曾经合并而仍然遇到不知道它们是什么的问题,我的意思是没有明显的区别

<<<<<
....
======
>>>>>>

然后,您可以使用https://github.com/Karumi/Kin对项目文件进行分析,安装并使用它

kin project.pbxproj

它具有使得无法打开项目的更广泛的错误(哈希,分组等)。


顺便说一句,这可能也会有所帮助,以为我没有使用它来尝试区分项目文件的两个版本https://github.com/bloomberg/xcdiff,因此这将为您提供真正的帮助。

答案 11 :(得分:0)

如果您在文本===或<<<或>>>>中找不到像我这样的问题,那真的很简单又有趣... 我在Xcode中更改了App的名称,但在构建之前未在UnityProjectSettings中更改它-这就是问题所在...

答案 12 :(得分:0)

要遵循的步骤:- 1.导航到您的projectName.xcodeproj所在的文件夹 2.右键单击并选择“显示包装内容”。您将能够看到带有.pbxproj扩展名的文件列表。 3.选择project.pbxproj。右键单击并使用“文本编辑”打开此文件。 4.您将能够看到<<<<<<,============和>>>>>>>>>>。当您从Sourcetree / SVN / GITLAB进行更新时,通常会发生这些冲突。删除它们并保存文件。 5.现在,您将可以打开项目而没有任何错误消息。

答案 13 :(得分:0)

通过还原,您可以撤消提取的代码。

如果要撤消该拉取请求,只需将此命令放在项目路径上

-> git merge --abort

答案 14 :(得分:0)

听起来你将不得不在Xcode中创建一个新项目,进入旧目录,并将所有源文件,nib和资源拖到新项目的Xcode文件侧栏中。它不应该花费超过几分钟,除非您真的使用自定义构建设置或目标做了很多工作。要么是这样,要么恢复到源代码管理中的最后一个签到,并手动添加从现在开始到之后改变的任何代码文件。

答案 15 :(得分:0)

尝试在行之间找到HEAD和_HEAD并删除project.pbxproj中的这些单词。 在执行此操作之前备份此文件..

答案 16 :(得分:0)

只需检查project.pbproject文件,并针对项目文件的工作版本执行diff。

通常情况下,当您发布版本控制系统(如User file cannot be parsed in subversion in MAC iphone SDK

)时发生冲突时会发生这种情况

答案 17 :(得分:0)

将当前项目文件夹nam和checkout模块更改为同一个项目。然后添加当前文件更改。

答案 18 :(得分:0)

一旦你再次开始工作,你应该考虑使用subversion或mercurial这样的东西进行备份和修订控制。请记住,他的电子并不总能达到预期的位置,经常备用并经常备用!

答案 19 :(得分:-1)

这是因为项目名称之间不能有空格

答案 20 :(得分:-2)

subversion将在几乎每周一次的svn之后破坏我的项目文件。我试图找出它为什么现在这样做并遇到了这个问题。