我应该忽略 xcodeproject/project.pbxproj 文件吗?

Posted

技术标签:

【中文标题】我应该忽略 xcodeproject/project.pbxproj 文件吗?【英文标题】:Should I git ignore xcodeproject/project.pbxproj file? 【发布时间】:2011-12-23 00:13:16 【问题描述】:

在一个 XCode 项目中,我将 xcodeproject/project.pbxproj 文件更改了,但对我来说没有用的信息,它用于编译。

我应该忽略这个文件和 xcodeproject/projectxworkspace/username.xcuserdata/UserInterfaceState.xcuserstate 文件吗?

【问题讨论】:

.xcuserstate 文件可以忽略,pbxproj 文件不行。 不,这是你的答案:***.com/questions/49478/… 【参考方案1】:

根据 Swift 包管理器更新:如果您将项目构建为 Swift 包 - 您绝对应该忽略此文件,因为它可以使用文件系统作为事实来源生成。您可以使用以下命令来做到这一点:

$ cd ~/Projects/MyProjectFolder/
$ swift package generate-xcodeproj

对于非 SwiftPM 的回答 - 见下文。

此文件包含项目中所有文件的列表、目标设置以及哪些文件属于哪些目标。它可能是项目包中最丰富的文件。您不应忽略此文件。这有几点:

    您可能不想单独处理这个项目,或者; 您正计划使用不同的机器处理项目; 您会希望与他人共享您的代码库;

【讨论】:

【参考方案2】:

这是您在 xcodeproj 包中的存储库中唯一需要的文件。该文件包含目标文件和构建设置的所有信息。

【讨论】:

这个答案可能曾经是正确的,但目前是错误的。它拥有“所有信息”既不是真的(例如自定义可执行文件存储在不同的文件中,例如工作空间存储在不同的文件中等),它也不是你的“唯一文件”想要存储。参考文献关于在 .gitignore 中包含什么的问题 - ***.com/questions/49478/… 这似乎是经过深思熟虑的......以后继续这样做。【参考方案3】:

不幸的是,如果您的构建设置包含代码签名,如果其他团队成员更改了代码签名实体,则您必须在每次“git pull”后重新输入代码签名实体。在我看来,这个信息应该在用户设置中,而不是全局 pbxproj 文件中。

【讨论】:

您可以设置代码签名,以便项目中的每个人都有一个与项目中相同(共享)设置匹配的不同代码签名配置文件,例如通过使用通配符名称,然后每个人分别匹配它,或者通过例如所有人都在同一个 iTunes 团队并共享个人资料。【参考方案4】:

如果您排除 project.pbxproj,Jenkins 构建将失败。因此,如果您使用 Jenkins,这一点很重要。

【讨论】:

【参考方案5】:

project.pbxproj 是 Xcode 配置包中的一个重要文件。它负责维护对所有链接文件及其分组、链接框架以及最重要的是项目的构建设置的引用。因此,我们无法将 project.pbxproj 从版本控制中排除。

这是我的 Xcode 项目的一般 .gitignore

# OS X Finder
.DS_Store

# Xcode per-user config
*.mode1
*.mode1v3
*.mode2v3
*.perspective
*.perspectivev3
*.pbxuser
*.xcworkspace
xcuserdata

# Build products
build/
*.o
*.LinkFileList
*.hmap

# Automatic backup files
*~.nib/
*.swp
*~
*.dat
*.dep

【讨论】:

【参考方案6】:

我发现我还需要保留 xcworkspace 文件。如果没有,带有子项目的项目就坏了。

【讨论】:

【参考方案7】:

您可以使用 Xcodegen 从 YAML 项目规范文件中生成 pbxproj,然后您可以在 git 中忽略 pbxproj 并在每次需要时生成它们。

我已经在第二个项目中使用了 Xcodegen,该项目具有模块化架构(许多 pbxprojs),并且有超过 8 个开发人员正在开发它。

https://github.com/yonaskolb/XcodeGen

希望对您有所帮助。

【讨论】:

以上是关于我应该忽略 xcodeproject/project.pbxproj 文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

我应该推送已编译的 javascript 还是忽略它们?

我应该忽略_SCoreData ConstraintViolationException 吗?

在 React Native 项目中应该忽略哪些文件夹?

我应该忽略 git 中的 UnserInterfaceState 和 xcschememanagement 文件吗? [复制]

Mocha 忽略了一些测试,尽管它们应该运行

当朋友在 PHP/MySQL 应用程序中忽略某人时,我应该如何处理?