103

我一直在努力创建一个 iPhone 应用程序。今天我的电池电量不足,我正在工作并不断保存我的源文件然后电源就坏了......

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

无法打开项目

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

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

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


编辑

好的,我在这个和一个稍微旧的项目文件之间做了一个比较,发现文件中有一些损坏。合并它们(好的和最新的部分)后,它现在可以工作了。

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

在此处输入图像描述

4

21 回答 21

240

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

右键单击您的projectname.xcodeproj文件,这里projectname将是您的项目的名称。现在右键单击后选择Show Packages Contents。之后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 项目并构建它。一切都会好起来的。

于 2012-08-16T18:04:48.253 回答
52

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

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

于 2015-03-27T00:03:36.427 回答
28

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

于 2013-06-06T13:48:24.173 回答
26

我有类似的问题。

截图 1

以下是解决它的步骤:

  1. 导航到您的projectName.xcodeproj.

    截图 2

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

    截图 3

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

    截图 4

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

    截图 5

    截图 6

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

于 2016-02-25T12:30:28.567 回答
24

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.

修复该项目后可以正常打开。

于 2014-02-07T12:59:12.740 回答
7

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

plutil -lint project.pbxproj

这将显示来自解析器的错误。

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

于 2018-06-01T14:56:34.473 回答
3

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

于 2019-10-11T16:12:33.760 回答
3

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

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

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

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

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

于 2018-03-22T13:12:01.167 回答
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"

    猫$项目文件| grep -v "<<<<<<< 头" | grep -v "=======" | grep -v "^>>>>>>> " > $tempfile mv $tempfile $projectfile

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

于 2017-01-23T13:28:39.940 回答
1

Revert the project.pbxproj

svn revert --filename--

于 2012-09-24T18:25:52.340 回答
0

Goto PhoneGapTest>>platform 然后删除文件夹 ios 之后去终端然后输入: sudo phonegap build ios 之后你可以运行项目

于 2014-09-26T10:58:16.193 回答
0

听起来您将不得不在 Xcode 中创建一个新项目,进入旧目录,然后将所有源文件、nib 和资源拖到新项目的 Xcode 文件侧边栏中。花费的时间不会超过几分钟,除非您真的对自定义构建设置或目标做了很多工作。要么这样,要么恢复到源代码管理中的最后一次签入并手动添加从现在到那时更改的任何代码文件。

于 2008-12-12T04:01:46.733 回答
0

一旦你让事情恢复正常,你应该考虑使用 subversion 或 mercurial 之类的东西来进行备份和修订控制。请记住,电子并不总是去他们应该去的地方,尽早并经常备份!

于 2008-12-12T04:37:13.590 回答
0

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

于 2014-06-01T13:32:30.800 回答
0

将您当前的项目文件夹名称和结帐模块更改为同一个项目。然后添加当前文件更改。

于 2010-04-26T13:21:46.450 回答
0

只需检查 project.pbproject 文件并对项目文件的工作版本进行比较。

当您与此处发布的版本控制系统发生冲突时,通常会发生这种情况:无法在 MAC iphone SDK 的 subversion 中解析用户文件

于 2012-07-03T18:08:12.283 回答
0

根据我的经验,我需要为此采取多种策略:

一个-

1-从命令行使用 git merge 找出需要解析的文件

2-对这些文件适当使用 git add 或 git rm

3-使用git commit完成合并

B- 1-对于 .pbxproj 我删除了 <<<< , >>>> 和 =====

2- 使用https://github.com/Serchinastico/Kin查找合并错误,并使用 SnoopyProtocol 的回答我解决了这些问题

注意:在某一时刻,Kin 显示的唯一错误是:ERROR: line 1197:40 mismatched input '1' expecting NON_QUOTED_STRING 不需要修复 Xcode 项目即可打开

于 2021-11-24T07:42:40.317 回答
0

如果您曾经合并并且仍然遇到不知道它们是什么的问题,我的意思不是明显的差异标记

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

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

kin project.pbxproj

它使不允许打开项目的额外错误更容易理解和解决(散列、组等)。


顺便说一句,这也可能会有所帮助,我以为我没有使用它尝试区分你的项目文件的 2 个版本https://github.com/bloomberg/xcdiff所以这会给你真正发生的事情。

于 2020-08-27T22:22:54.243 回答
0

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

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

-->git merge --abort

于 2019-08-06T12:32:18.817 回答
0

如果您没有在 Text === 或 <<< 或 >>>> 中找到对我来说类似的问题,那么问题真的很简单也很有趣......我在 Xcode 中更改了 App 的名称,但在构建之前没有在 UnityProjectSettings 中更改它——这就是问题所在……

于 2020-07-08T10:23:17.473 回答
-2

subversion 几乎每周都会在 svn up 后损坏我的项目文件。我试图弄清楚为什么它现在这样做并遇到了这个问题。

于 2009-03-17T23:19:30.943 回答