Updated for Xcode Version 7.3.1
Thanks to Jake for pointing out that his blog post needed a little freshening up!
After watching the WWCD keynote I wanted to fool around in Cocoa and Objective-C again. It’s been a while and my Xcode skills were rusty. One task that always seems tricky is getting Xcode’s local git repository to work well with GitHub’s remote repositories. I clicked around, read some docs, did a little Googling, and experimented until I got it to work and in way that works every time.
There are many other blog and stackoverflow posts on this subject but most are either missing a critical step or making it out to be way more complicated than it really is. That’s the problem with Apple magic: Sometime’s they design away the details to a point that you really don’t know what is going on.
The best tutorial on Git, Xcode, and GitHub for the white belt hacker is here: http://www.raywenderlich.com/13771/how-to-use-git-source-control-with-xcode-in-ios-6
But the part on connecting your local Git repository created and managed by Xcode to your remote GitHub repository is a little brief and lacks detail that might trip you up. Here is all you need to do to get Xcode and GitHub to play nice…
- Create your Xcode project with a local Git repository and write some code
- Commit your changes locally (File > Source Control > Commit…)
- Create your GitHub remote repository on GitHub but do not initialize it and do not add a readme.md file!
- Note: You can give that remote repository any name you want, I gave it the same name as my local git repository because I’m lazy
- Go to the Source Control menu and and choose the second item with the name of your repo. This item leads to a popup menu. Choose the last item of that popup menu which has the name of your repo and word “configure”
- In the configure dialog choose the Remotes item
- Click the + button and choose “Add Remote” to associate a remote repo
- In the Add a Remote dialog box you have two fields to fill out
- In the name field enter the name of the GitHub repository you just created
- In the location filed paste the “HTTPS” URI from GitHub for your repo
- It will look like this: https://github.com/you-account-name/your-repo-name.git
- Now you have a connected local and remote repository 🙂
- Go back to the Source Code menu and choose Push…
- A dialog box pops up with a drop down menu
- Choose the only option you can which will be something like your-repo-name/create
- Click the push button
- Enter your user name and password in the dialog box that appears
Remember to check “Push to remote” in the Commit dialog box so you check in your code both locally and remotely.
I use Two Factor Authentication and I had to turn it off to test this. That made me a little nervous and I immediately turned Two Factor back on.
However you can generate a Personal Access Token so that that you can push to GitHub from Xcode and keep Two Factor on!
- Log into you GitHub Account and go to Settings > Personal Access Tokens
- Click the Generate New Token button
- Give the button a description such as “Xcode Repo-Name”
- Check the least amount of scope needed to commit code remotely: “Repo”
- Click the Generate Token button at the bottom.
- Copy the token (which is a long string of numbers)
- Back in Xcode go to Preferences > Accounts and choose your repo under the list of repositories.
- The Address field will contain the HTTS URI you entered earlier
- The Description is the name of your repo
- Authentication should be set to User Name and Password
- User Name should be your GitHub user name
- In the Password field paste token
Boom! Now you can commit remotely with Two Factor Auth in full effect!