Last active

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

.gitignore file for Xcode4 / OS X Source projects

View .gitignore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
#########################
# .gitignore file for Xcode4 and Xcode5 Source projects
#
# Apple bugs, waiting for Apple to fix/respond:
#
# 15564624 - what does the xccheckout file in Xcode5 do? Where's the documentation?
#
# Version 2.3
# For latest version, see: http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects
#
# 2014 updates:
# - appended non-standard items DISABLED by default (uncomment if you use those tools)
# - removed the edit that an SO.com moderator made without bothering to ask me
# - researched CocoaPods .lock more carefully, thanks to Gokhan Celiker
# 2013 updates:
# - fixed the broken "save personal Schemes"
# - added line-by-line explanations for EVERYTHING (some were missing)
#
# NB: if you are storing "built" products, this WILL NOT WORK,
# and you should use a different .gitignore (or none at all)
# This file is for SOURCE projects, where there are many extra
# files that we want to exclude
#
#########################
 
#####
# OS X temporary files that should never be committed
#
# c.f. http://www.westwind.com/reference/os-x/invisibles.html
 
.DS_Store
 
# c.f. http://www.westwind.com/reference/os-x/invisibles.html
 
.Trashes
 
# c.f. http://www.westwind.com/reference/os-x/invisibles.html
 
*.swp
 
#
# *.lock - this is used and abused by many editors for many different things.
# For the main ones I use (e.g. Eclipse), it should be excluded
# from source-control, but YMMV.
# (lock files are usually local-only file-synchronization on the local FS that should NOT go in git)
# c.f. the "OPTIONAL" section at bottom though, for tool-specific variations!
 
*.lock
 
 
#
# profile - REMOVED temporarily (on double-checking, I can't find it in OS X docs?)
#profile
 
 
####
# Xcode temporary files that should never be committed
#
# NB: NIB/XIB files still exist even on Storyboard projects, so we want this...
 
*~.nib
 
 
####
# Xcode build files -
#
# NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "DerivedData"
 
DerivedData/
 
# NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "build"
 
build/
 
 
#####
# Xcode private settings (window sizes, bookmarks, breakpoints, custom executables, smart groups)
#
# This is complicated:
#
# SOMETIMES you need to put this file in version control.
# Apple designed it poorly - if you use "custom executables", they are
# saved in this file.
# 99% of projects do NOT use those, so they do NOT want to version control this file.
# ..but if you're in the 1%, comment out the line "*.pbxuser"
 
# .pbxuser: http://lists.apple.com/archives/xcode-users/2004/Jan/msg00193.html
 
*.pbxuser
 
# .mode1v3: http://lists.apple.com/archives/xcode-users/2007/Oct/msg00465.html
 
*.mode1v3
 
# .mode2v3: http://lists.apple.com/archives/xcode-users/2007/Oct/msg00465.html
 
*.mode2v3
 
# .perspectivev3: http://stackoverflow.com/questions/5223297/xcode-projects-what-is-a-perspectivev3-file
 
*.perspectivev3
 
# NB: also, whitelist the default ones, some projects need to use these
!default.pbxuser
!default.mode1v3
!default.mode2v3
!default.perspectivev3
 
 
####
# Xcode 4 - semi-personal settings
#
#
# OPTION 1: ---------------------------------
# throw away ALL personal settings (including custom schemes!
# - unless they are "shared")
#
# NB: this is exclusive with OPTION 2 below
xcuserdata
 
# OPTION 2: ---------------------------------
# get rid of ALL personal settings, but KEEP SOME OF THEM
# - NB: you must manually uncomment the bits you want to keep
#
# NB: this *requires* git v1.8.2 or above; you may need to upgrade to latest OS X,
# or manually install git over the top of the OS X version
# NB: this is exclusive with OPTION 1 above
#
#xcuserdata/**/*
 
# (requires option 2 above): Personal Schemes
#
#!xcuserdata/**/xcschemes/*
 
####
# XCode 4 workspaces - more detailed
#
# Workspaces are important! They are a core feature of Xcode - don't exclude them :)
#
# Workspace layout is quite spammy. For reference:
#
# /(root)/
# /(project-name).xcodeproj/
# project.pbxproj
# /project.xcworkspace/
# contents.xcworkspacedata
# /xcuserdata/
# /(your name)/xcuserdatad/
# UserInterfaceState.xcuserstate
# /xcsshareddata/
# /xcschemes/
# (shared scheme name).xcscheme
# /xcuserdata/
# /(your name)/xcuserdatad/
# (private scheme).xcscheme
# xcschememanagement.plist
#
#
 
####
# Xcode 4 - Deprecated classes
#
# Allegedly, if you manually "deprecate" your classes, they get moved here.
#
# We're using source-control, so this is a "feature" that we do not want!
 
*.moved-aside
 
####
# OPTIONAL: Some well-known tools that people use side-by-side with Xcode / iOS development
#
# NB: I'd rather not include these here, but gitignore's design is weak and doesn't allow
# modular gitignore: you have to put EVERYTHING in one file.
#
# COCOAPODS:
#
# c.f. http://guides.cocoapods.org/using/using-cocoapods.html#what-is-a-podfilelock
# c.f. http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
#
#!Podfile.lock
#
# RUBY:
#
# c.f. http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
#
#!Gemfile.lock
#
# IDEA:
#
#.idea
#
# TEXTMATE:
#
# -- UNVERIFIED: c.f. http://stackoverflow.com/a/50283/153422
#
#tm_build_errors
 
####
# UNKNOWN: recommended by others, but I can't discover what these files are
#
# Community suggestions (unverified, no evidence available - DISABLED by default)
#
# 1. Xcode 5 - VCS file
#
# "The data in this file not represent state of your project.
# If you'll leave this file in git - you will have merge conflicts during
# pull your cahnges to other's repo"
#
#*.xccheckout
Owner

Done. Sorry, forgot to add at the time

I suggest adding these lines, for those who currently use CocoaPods:

Pods/
Podfile.lock

Owner

@marzapower thanks, updated with your comments from the SO answer

Podfile.lock contains the pod commit SHAs that just got installed so that you can easily restore that exact environment later on other machines (very important in teams). I think that this file must be removed from .gitignore

matej commented

I agree with @rais38, Podfile.lock should not be ignored any longer. See this issue for details.

It actually even needs to be explicitly allowed (by changing Podfile.lock to !Podfile.lock), so it does not get added by the *.lock declaration.

tvon commented

:+1: on removing the Podfile.lock (and the *.lock line, Gemfile.lock is important if it exists).

Does this pattern work for SVN?

Seems Xcode 5 has added a new file type .xccheckout . There is a discussion about it at:

http://stackoverflow.com/questions/18340453/should-xccheckout-files-in-xcode5-be-ignored-under-vcs

Might also want to update your description: ".gitignore file for Xcode4 / OS X Source projects" and comments "Xcode 4" for Xcode 5.

+1 to remove the *.lock line (for Gemfile.lock and Podfile.lock)

+1 to remove the *.lock line (for Gemfile.lock and Podfile.lock)

Also, I know not everyone will use AppCode IDE but, because it does not affect to include it and it can be helpful for the ones who do, I would recommend to include this:

####
# AppCode
#

.idea/

As suggested in this StackOverflow answer: http://stackoverflow.com/a/16062099

Otherwise, great. Thanks for this.

Saves my life time and time again. Thanks!

Owner

I've merged in all the outstanding items I could find and verify.

NOTE: for all the non-Apple tools, I've put them at the bottom commented out, titled by name. It should be easy this way for you to "enable" support for whichever combination of tools you're using. At the moment, it's mostly whitelisting on top of the catch-all blacklisting at top of the file.

I'm in two minds about ".lock" - it traditionally (in unix/BSD/linux world) means "something that should not go in source control - local file-locking on my computer only". Some apps still use it to mean that - I suspect MANY unix/BSD command-line apps still use it for this. Ruby seems to have redefined it to mean something different, almost the opposite (but even in Ruby, you are sometimes required to exclude it from git; it's complicated!).

Most iOS devs don't use Ruby. So, for now, I'm putting ".lock" as an exclusion, and the OPTIONAL ability to whitelist Ruby + Cocoapods proprietary lock files.

Apple states that .xccheckout files should NOT be ignored.
If you have more than one repository associated with your Xcode project, they are saved as a .xccheckout file, so that if another person on your team checks out your git repository on Xcode, these other repositories are also checked out automatically.
See session 414 of WWDC 2013, named "Understanding Source Control in Xcode". That feature of Xcode is demoed there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.