Xcode 4项目:用于清理pbxproj文件的实用程序?

时间:2011-05-19 20:26:05

标签: xcode xcode4

我有一个包含2个目标的Xcode 4项目,一个用于iPhone,另一个用于iPad。如果我点击iPad目标并尝试转到Build Settings Xcode 4崩溃:

  

遇到多个断言。第一个断言是:/SourceCache/IDEXcode3ProjectSupport/IDEXcode3ProjectSupport-269/Xcode3Sources/XcodeIDE/Frameworks/DevToolsBase/pbxcore/FileTypes/../PBXFileType.m:594中的ASSERTION FAILURE   详细信息:filename应该是非空字符串,但它是nil

显然pbxproj文件在某处有一个错误的引用 - 可能是由于我被git强制执行的许多手动合并引起的。有没有办法清理pbxproj文件,以便它再次正常工作或告诉哪一行导致问题?我真的真的不想从头开始重新创建项目。

6 个答案:

答案 0 :(得分:22)

我试过gorbster的方法没有成功(虽然它在过去解决了类似的问题)。

我进入了我的project.pbxproj文件(在项目的.xcodeproj包内),发现两行看起来有点可疑,两种形式都有:

53A45F8F138FE6F40077017F /* (null) in Resources */ = {isa = PBXBuildFile; };

我删除了这些行,并且vo:我可以再次访问此目标的构建设置。

不知道他们是如何进入那里的。我想猜测与SVN下的错误合并有什么关系。

答案 1 :(得分:15)

在拉开一位同事的合并之后,今天早上进入了同样的问题。

我能够通过以下方式解决这个问题:

  1. 关闭Xcode
  2. 在Finder
  3. 中打开 .xcodeproj
  4. 删除 project.xcworkspace 文件/包
  5. 打开 xcuserdata 文件夹,然后删除特定于用户的.xcuserdatad 文件夹。
  6. 重新打开Xcode和项目
  7. 我丢失了一些次要的用户偏好(文件和标签历史记录等),但现在可以单击所有(9)我的目标而不会出现问题。事实证明我的同事是在早期版本的Xcode上,但我不确定这是否会导致IDE崩溃。

答案 2 :(得分:9)

Ben Mosher找到了解决方案。 是的,这是由于SVN合并问题。

当我们与SVN合作时,错误经常发生,所以我写了一个bash脚本:

#!/bin/bash
sed "/(null) in/d" project.pbxproj > tmp_project.pbxproj
mv tmp_project.pbxproj project.pbxproj

答案 3 :(得分:6)

关闭XCode时,请尝试以下步骤。

  1. 在Finder中转到 {YOUR_PROJECT} .xcodeproj 文件。

  2. 右键点击 {YOUR_PROJECT} .xcodeproj 文件。

  3. 选择显示包装内容 ...这将在另一个Finder屏幕中打开内容。

  4. 打开文件 project.pbxproj 并搜索所有包含字符串“(null)”的行

  5. 删除(null)中的所有行...不用担心....自信地删除。

  6. 保存文件。

  7. 现在使用XCode打开您的项目并尝试打开Build Settings选项卡...希望您的问题能够得到解决。

    谢谢, 穆罕默德。

答案 4 :(得分:0)

右键单击.xcodeproj文件和“显示包内容”。

然后用TextEdit打开project.pbxproj文件并复制。

使用相同的名称和扩展名保存重复文件。 (project.pbxproj)

并替换旧文件。

答案 5 :(得分:0)

如果您还尝试了删除(null)引用行并删除特定于用户的.xcuserdatad 文件夹,并且这些文件不起作用,则这是一个潜在的解决方案。仅供参考......这是在Xcode 7.3.1上体验的。

以下是我面临的情景:

我遇到了这个问题,这个问题是由于" twin" git repo中的分支...(即一个分支BRANCH_A是一个开发分支,其中一些功能不会发布,另一个分支具有相同的提交,除了新功能,称之为BRANCH_B)。

开发工作流程如下:从BRANCH_B开始,创建提交分支CHANGE_C,进行更改和提交,然后签出BRANCH_A,创建提交分支,然后从CHANGE_C中挑选更改。 BRANCH_A正在以这种方式跟踪BRANCH_B及其附加功能文件。

在我的情况下,(出于某种原因,在BRANCH_B跟踪的远程工作人员的同事变更问题上,BRANCH_B的项目文件被破坏了。

在这种情况下,解决方案是保存BRANCH_A项目文件的副本(这是好的并编译),然后签出BRANCH_B,并用副本替换其项目文件。

最初,它不会编译,直到从目标的构建阶段>中删除对特征文件(来自BRANCH_A)的所有引用。编译来源。

效果很好。