我已经工作了一段时间来创建一个iPhone应用程序。今天当我的电池电量不足时,我正在工作并不断保存我的源文件,然后电源耗尽......
现在,当我重新插入计算机并且功能强大时,我尝试打开我的项目文件并收到错误:
无法打开项目
Project ...无法打开,因为无法解析项目文件。
有没有人知道我可以从中恢复的方式?我尝试使用较旧的项目文件并重新插入然后编译。它给了我一个时髦的错误,可能是因为它没有找到它想要的所有文件......
如果可能的话,我真的不想从头开始重建我的项目。
好吧,我在这个和一个稍微老一点的项目文件之间做了一个差异,看起来文件中有一些损坏。合并后(好的和最新的部分)它现在正在工作。
关于SVN的好点。我有一个,但有一些funkiness尝试同步XCode。我现在肯定会花更多的时间......; - )
答案 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)
我有类似的问题。
以下是解决问题的步骤:
答案 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文件中的冲突,您可以使用这个方便的脚本:
以下是脚本:
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
使用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之后破坏我的项目文件。我试图找出它为什么现在这样做并遇到了这个问题。