iOS development & running

@vtim - iOS development and running

May 3

Embedding GitHub projects in your svn repository

GitHub is the place to be for sharing code. Unfortunately a lot of companies are still using subversion internally. Luckily, GitHub offers read-only svn access to all repositories (See this April-Fools’-that’s-actually-not-a-joke blogpost from 2010).

This means that you can use svn:externals (http://svnbook.red-bean.com/en/1.0/ch07s03.html) to refer to the main repo instead of exporting code from GitHub and then keeping your own version in svn.

Here’s how I am using this to pull down the official facebook-ios-sdk in our “subversioned” project:

If you don’t have a directory to put your “external” code yet, create one and add/commit it:

mkdir libraries
svn add libraries
svn commit libraries -m "Created libraries dir"

Create the SVN_EDITOR variable if it’s not set already you can choose another editor if you like

export SVN_EDITOR=vi

Set the svn:externals property on your libraries directory:

svn propedit svn:externals libraries

Copy/paste this in the editor

facebook-ios-sdk    https://github.com/facebook/facebook-ios-sdk/tags/v1.2/src

Save and quit vi

As you can see in the GitHub url, I’m using the 1.2-tag to avoid build errors when changes are made to the external repo. When there’s a 1.3-tag, I can switch to that one by updating the externals definition using propedit. You can also specify a revision number instead of a tag, if you like.

Don’t forget to commit the libraries-directory so the build-server and your colleagues also have the definition. This will only commit the property on the directory to your repository, not the external code itself.

svn commit libraries -m "Added 'facebook-ios-sdk' externals definition"

Done. When you now update, the external code will also be fetched, so svn update results in:

Fetching external item into 'facebook-ios-sdk'
A    facebook-ios-sdk/FBConnect.h
A    facebook-ios-sdk/FBDialog.bundle
A    facebook-ios-sdk/FBDialog.bundle/images
A    facebook-ios-sdk/FBDialog.bundle/images/close.png
A    facebook-ios-sdk/FBDialog.bundle/images/close@2x.png
A    facebook-ios-sdk/FBDialog.bundle/images/fbicon.png
A    facebook-ios-sdk/FBDialog.h
A    facebook-ios-sdk/FBDialog.m
A    facebook-ios-sdk/FBLoginDialog.h
A    facebook-ios-sdk/FBLoginDialog.m
A    facebook-ios-sdk/FBRequest.h
A    facebook-ios-sdk/FBRequest.m
A    facebook-ios-sdk/Facebook.h
A    facebook-ios-sdk/Facebook.m
A    facebook-ios-sdk/JSON
A    facebook-ios-sdk/JSON/JSON.h
A    facebook-ios-sdk/JSON/NSObject+SBJSON.h
A    facebook-ios-sdk/JSON/NSObject+SBJSON.m
A    facebook-ios-sdk/JSON/NSString+SBJSON.h
A    facebook-ios-sdk/JSON/NSString+SBJSON.m
A    facebook-ios-sdk/JSON/SBJSON.h
A    facebook-ios-sdk/JSON/SBJSON.m
A    facebook-ios-sdk/JSON/SBJsonBase.h
A    facebook-ios-sdk/JSON/SBJsonBase.m
A    facebook-ios-sdk/JSON/SBJsonParser.h
A    facebook-ios-sdk/JSON/SBJsonParser.m
A    facebook-ios-sdk/JSON/SBJsonWriter.h
A    facebook-ios-sdk/JSON/SBJsonWriter.m
A    facebook-ios-sdk/facebook-ios-sdk.xcodeproj
A    facebook-ios-sdk/facebook-ios-sdk.xcodeproj/project.pbxproj
A    facebook-ios-sdk/facebook-ios-sdk.xcodeproj/project.xcworkspace
A    facebook-ios-sdk/facebook-ios-sdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata
A    facebook-ios-sdk/facebook-ios-sdk.xcodeproj/project.xcworkspace/xcuserdata
A    facebook-ios-sdk/facebook-ios-sdk.xcodeproj/project.xcworkspace/xcuserdata/mkijewski.xcuserdatad
A    facebook-ios-sdk/facebook-ios-sdk.xcodeproj/project.xcworkspace/xcuserdata/mkijewski.xcuserdatad/UserInterfaceState.xcuserstate
A    facebook-ios-sdk/facebook-ios-sdk.xcodeproj/xcuserdata
A    facebook-ios-sdk/facebook-ios-sdk.xcodeproj/xcuserdata/mkijewski.xcuserdatad
A    facebook-ios-sdk/facebook-ios-sdk.xcodeproj/xcuserdata/mkijewski.xcuserdatad/xcschemes
A    facebook-ios-sdk/facebook-ios-sdk.xcodeproj/xcuserdata/mkijewski.xcuserdatad/xcschemes/facebook-ios-sdk.xcscheme
A    facebook-ios-sdk/facebook-ios-sdk.xcodeproj/xcuserdata/mkijewski.xcuserdatad/xcschemes/xcschememanagement.plist
A    facebook-ios-sdk/facebook_ios_sdk_Prefix.pch
Updated external to revision 119.