Skip to content

Instantly share code, notes, and snippets.

@foundry
Forked from adamgit/.gitignore
Last active December 10, 2015 04:48
Show Gist options
  • Save foundry/4383910 to your computer and use it in GitHub Desktop.
Save foundry/4383910 to your computer and use it in GitHub Desktop.
#########################
#update 19 September 2015
# Xcode 7 introduces a new file .xcscmblueprint
# following this advice
# http://stackoverflow.com/questions/31584297/xcode-7-ignore-xcscmblueprint-in-repository
*.xcscmblueprint
#########################
#########################
#update 19 September 2015
#re-synched with adam's latest v2.6
##########################
#########################
# update comment 21 Septemeber 2014
# the following commands are really useful when adding this .gitignore to an existing project
# and also when altering this file on an existing project.
# we need these because .gitignore will NOT ignore files already in the repo.
#
# use THIS to list files already in your repo which .gitignore file would rather ignore
# git ls-files -i -X .gitignore
#
# use THIS to remove files from your repo which are found here
# git rm --cached `git ls-files -i -X .gitignore`
#
# nb: this is all good in theory, when testing not 100%!
# it doesn't seem always identify rogue files
#########################
#########################
# update 19 September 2015
# if your project is generating frameworks, you may want to
# exclude the built frameworks from the rep
#*.framework/
#########################
# update 21 Septemeber 2014
# ignore xccheckout (see adam's comment and bug filing below)
# we should really ignore the toplevel xcworkspace here,
# but specifying that without the project NAME, and without clobbering
# #.xcodeproj/project.xcworkspace is tricky
#########################
# update 19 Septmember 2015 removed this (uses project NAME)
# in any case xccheckout SHOULD be ignored (see below) - untested
# Wondr.xcworkspace/xcshareddata/Wondr.xccheckout
#########################
# update 4 June 2014
# ignore Pods folder and Podfile.lock
#Pods
#Podfile.lock
#########################
# update 19 September 2015
# SEE BELOW FOR COCOAPODS TREATMENT
#########################
# https://gist.github.com/foundry/4383910
# .gitignore file for Xcode4 / OS X Source projects
# Forked and adapted from https://gist.github.com/adamgit/3786883
# updated 2 June 2013 to include adamgit's latest version
# added notes on testing and adapting existing projects
#########################
#
# Apple bugs, waiting for Apple to fix/respond:
#
# 15564624 - what does the xccheckout file in Xcode5 do? Where's the documentation?
#
# Version 2.6
# For latest version, see: http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects
#
# 2015 updates:
# - Fixed typo in "xccheckout" line - thanks to @lyck for pointing it out!
# - Fixed the .idea optional ignore. Thanks to @hashier for pointing this out
# - Finally added "xccheckout" to the ignore. Apple still refuses to answer support requests about this, but in practice it seems you should ignore it.
# - minor tweaks from Jona and Coeur (slightly more precise xc* filtering/names)
# 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!
#
# In particular, if you're using CocoaPods, you'll want to comment-out this line:
*.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
#
# Apple Shared data that Apple put in the wrong folder
# c.f. http://stackoverflow.com/a/19260712/153422
# FROM ANSWER: Apple says "don't ignore it"
# FROM COMMENTS: Apple is wrong; Apple code is too buggy to trust; there are no known negative side-effects to ignoring Apple's unofficial advice and instead doing the thing that actively fixes bugs in Xcode
# Up to you, but ... current advice: ignore it.
*.xccheckout
###
# the following section, whilst informative, does not work
# as you don't seem to be able to re-include (!xcshareddata !xcschemes)
# from already-excluded directories (xcuserdata)
# cf http://stackoverflow.com/questions/13732165/gitignore-negations-ignored-by-git-for-osx-xcode-project
# #### this is Adam's latest explanation (untested), but see my version (tested) below
#
#
# OPTION 1: ---------------------------------
# throw away ALL personal settings (including custom schemes!
# - unless they are "shared")
# As per build/ and DerivedData/, this ought to have a trailing slash
#
# NB: this is exclusive with OPTION 2 below
#xcuserdata/ ##adam's fix commented out because untested
# 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/**/* ##adam's fix commented out because untested
# (requires option 2 above): Personal Schemes
#
#!xcuserdata/**/xcschemes/* ##adam's fix commented out because untested
# ####
# # 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 <-- this file is causing problems/getting corrupted
# # project.xcworkspace/
# # contents.xcworkspacedata
# # xcshareddata/ <-if included, should be under source control (shared data)
# # xcuserdata/ <-should NOT be under source control (personal data)
# # (your name).xcuserdatad/
# # UserInterfaceState.xcuserstate <-we don't want this
# # WorkspaceSettings.xcsettings <-we don't want this
# # xcuserdata/
# # (your name).xcuserdatad/
# # xcdebugger/ <-we don't want this
# # Breakpoints.xcbkptlist <-we don't want this
# # xcschemes/ <-keep??
# # (project-name).xcscheme <-keep????
# # xcschememanagement.plist <-keep????
# # xcdebugger/ <-we don't want this
# # xcschemes/ <-keep????
# #
# #
# #
# # Xcode 4 workspaces - SHARED
# #
# # This is UNDOCUMENTED (google: "developer.apple.com xcshareddata" - 0 results
# # But if you're going to kill personal workspaces, at least keep the shared ones...
# #
# #
# !xcshareddata
#
#
# ####
# # XCode 4 build-schemes
# #
# # PRIVATE ones are stored inside xcuserdata
# !xcschemes
# so instead we have to
# - optionally ignore project.xcworkspace
# - specify precisely which (other) files in xcuserdata we wish to ignore
# (there may be others, I lack the knowledge!)
# http://stackoverflow.com/questions/10956312/project-xcworkspace-is-this-important
# "project.xcworkspace ! is this important?"
# (conclusion - only important if coordinating shared workspaces between groups)
# OPTION 1 - exclude everything in project.xcworkspace (including shared workspaces)
# project.xcworkspace
# OPTION 2 - keep shared workspaces, remove user workspaces and states
project.xcworkspace/xcuserdata/
# if project.xcworkspace is not ignored, you will want to ignore this file
# (this should be excluded with project.xcworkspace/xcuserdata/ but I have
# not tested without this line so I am leaving it here)
UserInterfaceState.xcuserstate
# and in either case this
xcdebugger/
####
# 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
#
####################################
# update 24 September 2015
# we're going to include all Pods stuff
# Cocoapods says "Whether or not you check in the Pods directory,
# the Podfile and Podfile.lock should always be kept under version control."
# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
!Podfile.lock
!Pods/Manifest.lock
Pods/Pods.xcodeproj/xcuserdata
#
# RUBY:
#
# c.f. http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
#
#!Gemfile.lock
#
# IDEA:
#
# c.f. https://www.jetbrains.com/objc/help/managing-projects-under-version-control.html?search=workspace.xml
#
#.idea/workspace.xml
#
# 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
#
###########################
# TEST PROJECT - no gitignore
# create mode 100644 git test.xcodeproj/project.pbxproj
# create mode 100644 git test.xcodeproj/project.xcworkspace/contents.xcworkspacedata
# create mode 100644 git test.xcodeproj/project.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate
# create mode 100644 git test.xcodeproj/xcuserdata/user.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist
# create mode 100644 git test.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/git test custom scheme.xcscheme
# create mode 100644 git test.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist
# TEST PROJECT - with this gitignore
# create mode 100644 git test.xcodeproj/project.pbxproj
# create mode 100644 git test.xcodeproj/project.xcworkspace/contents.xcworkspacedata
# create mode 100644 git test.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/git test custom scheme.xcscheme
# create mode 100644 git test.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist
###########################
# FIXING an existing XCODE repo
# _WHILE THE PROJECT IS CLOSED_...
# fix your gitignore file to exclude things you don't want to track in future
# then
# git rm --cached on each of the files in the repo that you need to remove from tracking
# single file...
# > git rm --cached ./test.xcodeproj/project.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate
# all files in a directory...
# > git rm --cached ./test.xcodeproj/project.xcworkspace/xcuserdata/user.xcuserdatad/*
# recursive directories...
# > git rm -r --cached ./test.xcodeproj/project.xcworkspace/xcuserdata/
#
# then git commit -m "cleaned repo"
#
# (this is important - XCode will ignore your new exclusions
# if you do not make a commandline commit before using XCode again)
#
# now you can use your project in XCode
@adamgit
Copy link

adamgit commented Feb 8, 2013

I've updated original gist with what I think fixes your problems above, using the /**/ syntax

gitignore file syntax sucks. They really didn't think this through :(.

If you're feeling brave, try it out - it's a lot easier to understand and maintain, if it works (I did a quick test - seems to work, but I don't have time to test it thoroughly)

@foundry
Copy link
Author

foundry commented Jun 2, 2013

Updated to include adamgit's latest version, also added some notes on adding a .gitignore to an existing Xcode project. I have not tested adamgit's /**/ syntax, but the (less subtle) method I do use is tested.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment