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

126
在XCode项目中,我经常会发现xcodeproject/project.pbxproj文件被修改,但这对我来说是无用的信息,它只与编译有关。我是否应该在Git中忽略此文件以及xcodeproject/projectxworkspace/username.xcuserdata/UserInterfaceState.xcuserstate文件?

可以忽略 .xcuserstate 文件,但不能忽略 pbxproj 文件。 - Kendall Helmstetter Gelner
不,这是你的答案:https://dev59.com/3nVD5IYBdhLWcg3wNY1Z - jeswang
7个回答

147

针对Swift Package Manager的更新:如果你正在构建一个作为Swift包的项目,你应该忽略这个文件,因为它可以通过文件系统作为真相源生成。你可以使用以下命令实现:

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

对于非SwiftPM的答案,请见下文。

该文件保存了项目中所有文件的列表,目标的设置以及哪些文件属于哪个目标。这可能是项目包中最重要的文件。您不应该忽略此文件。原因如下:

  1. 您可能不想独自处理此项目或;
  2. 您计划在不同计算机上处理该项目或;
  3. 您将想要与他人共享您的代码库。

我遇到的问题是,.gitignore 中被忽略的文件夹和文件仍会被添加到 project.pbxproj 文件中,并可能被推送到服务器。具体情况是,我创建了一个用于本地测试目的的测试文件夹来存储密码,该文件夹将被 Git 忽略,但会包含在 project.pbxproj 文件中。 - Zhou Haibo

8

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

7

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


1
这个答案可能曾经是正确的,但现在已经不对了。它既不是真的包含“所有信息”(例如,一些自定义可执行文件存储在不同的文件中,工作区存储在不同的文件中等),也不是你想要存储的“唯一文件”。参见有关在.gitignore中包含什么的问题-https://dev59.com/3nVD5IYBdhLWcg3wNY1Z - Adam
1
看起来这个想法经过了深思熟虑... 以后可以跟随这个想法。 - Grady Player

5

如果你排除 project.pbxproj 文件,Jenkins 构建将会失败。因此,如果你使用 Jenkins,这是非常重要的。


5

很遗憾,如果您的构建设置包括代码签名,则在另一个团队成员更改它后,您必须在每次“git pull”之后重新输入您的代码签名实体。 我认为这些信息应该在用户设置中而不是全局pbxproj文件中。


2
你可以设置代码签名,使得项目中的每个人都拥有不同的代码签名配置文件,与项目中相同的(共享)设置相匹配,例如使用通配符名称,然后每个人单独匹配它,或者例如所有人都在同一个iTunes团队中并共享配置文件。 - Adam

1
你可以使用 Xcodegen 将 YAML 项目规范文件生成 pbxproj,然后在 git 中忽略 pbxproj 并在需要时每次生成它们。
我已经在第二个具有模块化架构(许多 pbxprojs)且有超过8名开发人员正在进行的项目上使用了 Xcodegen。

https://github.com/yonaskolb/XcodeGen

希望有所帮助。

0
我发现我还需要保留xcworkspace文件。如果不这样做,带有子项目的项目将会出错。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接