无法打开项目…无法打开,因为无法分析项目文件


93

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

现在,当我重新插入计算机并获得良好电源时,我尝试打开项目文件,但出现错误:

无法打开项目

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

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

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


编辑

好的,我在此文件和稍旧的项目文件之间进行了区分,该文件工作正常,并发现文件中存在一些损坏。合并它们(最新和最好的部分)后,它现在可以工作了。

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

在此处输入图片说明

Answers:


228

我遇到了这个问题,我的上级告诉我一个解决方案,即:

右键单击您的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项目并进行构建。一切都会好起来的。


11
谢谢。这可行。在我的情况下,它不是“ .mine”或“ .r”,而是说了别的东西... Ctrl-F表示“ ===“,以查找位置。
ck_ 2012年

这应该标记为答案。真的很好,谢谢
owen gerig 2013年

12
只是说为什么会发生这种情况:您的版本控件正在尝试合并项目文件的两个冲突版本。您必须手动告诉版本控制什么是正确的合并。XCode无法很好地处理这一事实,每天对我来说都是一个巨大的烦恼。
塔娜·布里姆霍尔

谢谢。我的问题以<<<<<<<<< HEAD ======= >>>>>>>的形式出现。.pbxproj文件的末尾有两个位置。删除这些项目后,便可以再次执行.xcodeproj文件。查找这些项目与文件其余部分的位置是否明显不同。
AgnosticDev 2014年

1
在我的情况下,它的<<<<<<< HEAD,======,>>>>>>>一些字母数字。删除这三行,然后保存并打开。像魅力一样工作!!!谢谢分配。
Gowrie Sammandhamoorthy

47

穆罕默德的答案非常有帮助(并帮助解决了问题)。但是,仅保留>>>>>>> ======= <<<<<<<不足以解决project.pbxproj中的解析问题(对我而言),同时保留两个分支的更改合并后。

我在project.pbxproj文件的PBXGroup部分(其开头由这样的块注释指示:/ * Begin PBXGroup部分* /)中发生了合并冲突。但是,我遇到的问题也可能在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并确保没有任何格式问题!


解决合并冲突时,您可能不小心除去了冒号和/或花括号。您应该仔细考虑合并冲突中的适当部分(或同时考虑两者),并删除标记。而已。
2016年

添加sourceTree =“ <group>”; }; 为我解决了!太有帮助了!谢谢!
Nitin Alabur

只是想添加一些东西。我遇到了同样的问题,但是使用CocoaPods和工作区。我必须核对工作区并重新创建它,以使Xcode能够获取此修复程序。
Nico

@Nico:您介意分享如何核弹吗?我在这里面临着类似的问题,并且很难过
Isaac

我发现修复了.pbxproj文件后,我需要关闭并重新打开项目才能使其正常工作,但它确实可以工作。谢谢史努比协议!
KeithTheBiped

28

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


非常感谢,这是答案,我有一个空间。
2013年

同样的,科尔多瓦的PhoneGap 3.4
万里M.

这正是我遇到的问题。谢谢!
fray88

@ fray88我在Xcode项目和cordova文件夹的文件夹名称中都删除了空格,但是现在我得到一个错误:ENOENT:没有这样的文件或目录错误。我如何才能腾出空间并使事情正常进行?
SaH 2016年

25

我有类似的问题。

屏幕截图1

以下是解决此问题的步骤:

  1. 导航到您的文件夹projectName.xcodeproj

    屏幕截图2

  2. 右键单击并选择“ Show Package Contents”。您将能够看到带有.pbxproj扩展名的文件列表。

    屏幕截图3

  3. 选择project.pbxproj。右键单击并使用“ Text Edit” 打开此文件。

    屏幕截图4

  4. 您将可以看到<<<<<< .mine============>>>>>>>>>> .r123。这些通常是从SVN进行更新时发生的冲突。删除它们并保存文件。

    屏幕截图5

    屏幕截图6

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


23

对Xcode项目文件的视觉分析并没有帮助我在合并后定位错误。在查看syslog后,Xcode尝试解析文件时发现了以下行:

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.

修复该项目后,可以打开ok。


2
谢谢,您保存了我的一天:)
百夫长

谢谢..这比目视检查更有意义
Ciprian

2
这极大地帮助了。我只是“ tail -f /var/log/system.log”并尝试打开该项目。在system.log中,它显示一个错误(搜索“ Xcode”),该错误显示了发生解析异常的行号。然后,我在vi中打开文件,并在文件(^ H)中看到一个控制字符,只是删除了该单个字符,瞧!它能够被打开。
DustinB '16

最好的答案,而不是尝试一试再试。阅读控制台日志。
Urmil Setia

5
只需尝试从Terminal像xcodebuild -project Project.xcodeproj build那样构建它。您将在终端中看到该错误。
Slavko Coolesoff

6

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

plutil -lint project.pbxproj

这将向您显示解析器中的错误。

可能的问题:某些项目union为项目文件设置了git合并策略。这在大多数情况下都有效,但是如果失败,它将无提示地杀死您的项目文件。此策略.gitattributes在存储库中的文件中定义。


3

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

我的分支机构或远程分支机构中的project.pbxproj文件之间没有合并冲突。但是,我的projectName.xcodeproj文件由于与所询问的问题相同的原因而拒绝打开。

我的解决方案是使用文本编辑器浏览project.pbxproj,查找文件语法中是否存在任何异常(例如,多余的花括号)。通过集中处理旧文件中与合并文件相比插入或删除的行,我加快了此过程。通过仔细检查,我发现问题的原因是重复以下行:

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

在我的合并文件中。这导致花括号未闭合并导致无效的pbxproj语法。删除上述行解决了我的问题。


2

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

编辑:

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

  1. 在您的项目目录中创建一个空的.sh文件(例如,resolve_conflicts.sh)
  2. 这是脚本:

    projectfile = find -d . -name 'project.pbxproj' projectdir = echo *.xcodeproj projectfile =“ $ {projectdir} /project.pbxproj” tempfile =“ $ {projectdir} /project.pbxproj.out” savefile =“ $ {projectdir} /project.pbxproj.mergesave”

    cat $ projectfile | grep -v“ <<<<<<< HEAD” | grep -v“ =======” | grep -v“ ^ >>>>>>>”> $ tempfile mv $ tempfile $ projectfile

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


git在哪里生成字符串?
Harshil Kotecha

这些字符串是冲突标记:“ <<<<<<<<”,“ =======和“ >>>>>>>”。有关解决git冲突的更多信息,请参见
Vojta

@Vojta,你能把那个脚本放进去吗?我收到此错误:resolve_conflicts.sh: line 1: -d: command not found resolve_conflicts.sh: line 3: $tempfile: ambiguous redirect
丹尼尔(Daniel)



1

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


0

听起来您将不得不在Xcode中创建一个新项目,进入旧目录,并将所有源文件,笔尖和资源拖到新项目的Xcode文件侧栏中。除非您确实对自定义构建设置或目标做了很多工作,否则它不会花费几分钟。要么,要么恢复到源代码管理中的最后一个签入,然后手动添加在此后之间更改过的所有代码文件。


1
只需检查project.pbproject文件,然后对项目文件的工作版本进行比较即可。
Atma 2012年

0

一旦一切恢复正常,您应该考虑使用Subversion或Mercurial之类的工具进行备份和修订控制。请记住,他的电子并不总是到应该去的地方,要早点备份并经常这样做!


最近我最喜欢的VCS是git。
莉莉·巴拉德

0

更改当前项目文件夹nam和checkout模块相同的项目。然后添加当前文件更改。



0

尝试在两行之间查找HEAD和_HEAD,然后在project.pbxproj中删除此单词。在执行此操作之前,请备份此文件。


0

转到PhoneGapTest >>平台,然后删除ios文件夹,然后转到终端,然后键入:sudo phonegap build ios之后,您可以运行项目


0

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

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

-> git merge --abort



-2

几乎每周都会出现一次svn颠覆事件,subversion会损坏我的项目文件。我试图弄清楚为什么现在这样做并遇到了这个问题。


我的猜测是,您在进行更新或提交的同时已在Xcode中打开了项目...“如果” Xcode恰巧在同一时间自动保存,我想可能会发生一些损坏
epatel

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.