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

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

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

47588 次浏览

根据 Swift Package Manager 更新: 如果你正在构建一个作为 Swift 包的项目-你一定要忽略这个文件,因为它可以使用文件系统作为真实性的来源。您可以通过使用以下命令来实现这一点:

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

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

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

  1. 您可能不想单独处理这个项目,或者;
  2. 你计划在不同的机器上进行项目工作;
  3. 您将希望与其他人共享您的代码库;

That is the only file that you want in your repos from the xcodeproj bundle. That file holds all of the info for targets files and build settings.

I found that I also need to preserve the xcworkspace file(s). If didn't, project with a sub-project broke.

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

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

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

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

Https://github.com/yonaskolb/xcodegen

Hope it helps.

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