I have been working on full-time iPhone apps since the launch of the SDK; most of the time I worked on teams with several developers.
The truth is that it is more dangerous to refuse to merge this .pbxproj file than it is useful. As you say, when you add a file, if other people do not receive this file, they should also add it to their project - in an application of any size, which sucks, and also takes away a huge profit from source control, since you cannot really return to the full earlier state of the project only through git.
A .pbxproj file is just a list of properties (similar to XML). From experience, just about the only merge conflict that you have ever received is if two people added files at the same time. The solution in 99% of cases of a merge conflict is to preserve both sides of the merge, which for git at least simply involves deleting any โ โ, <<<and ==== lines. In fact, it is so common that I created a simple shell script to fix the .pbxproj file in a merge state from git, I run it from the project directory (at the class level):
#!/bin/sh projectfile=`find -d . -name 'project.pbxproj'` projectdir=`echo *.xcodeproj` projectfile="${projectdir}/project.pbxproj" tempfile="${projectdir}/project.pbxproj.out" savefile="${projectdir}/project.pbxproj.mergesave" cat $projectfile | grep -v "<<<<<<< HEAD" | grep -v "=======" | grep -v "^>>>>>>> " > $tempfile cp $projectfile $savefile mv $tempfile $projectfile
In case of failure (you ask Xcode to download the project, and it does not load), you simply delete the .pbxproj file, check the wizard from git and re-add your files. But I have never done this for many months with this script, again working full time on iPhone apps with several other developers.
Another option (mentioned in the comments below) that you can try to use instead of the script is to add this line to the .gitattributes file:
*.pbxproj text -crlf -diff -merge=union
Then git will always take both sides of the merge for .pbxproject files that have the same effect as script I, only without extra work.
Finally, here is my full .gitignore file showing what I have to ignore, since there are a few things you don't want - in my case, really just the remains of emacs and the entire assembly directory:
# xcode noise build/* *.pbxuser *.mode1v3 *~