Sunday, October 12, 2008

First things first.... versioning

So before we get all into Objective-C or Cocoa I would like to setup Xcode to do versioning.

Why versioning?

First of all, versioning does not save you from making backups. Having said that, if you mess around with code a lot you will find yourself trying out stuff. Most of the times you will have to try things to get your app to do what you want to. Sooner or later it will happen that you will think "didn't this work the other day??"

I tried to save myself from such a thought over the years with making several backups including timestamps but let's face it... You always forget the important one and comparing different versions is a pain. Versioning is supposed to help you here, so let's try it out.

Which versioning system?

Xcode supports three systems (at least the dialog box tells me that it supports three): CVS, Subversion and Perforce. Perforce is AFAIK not for free, so we'll skip that one. Since CVS is pretty old and since I read somewhere that Subversion is somehow a better/newer CVS I wanted to give it a try.

Getting started

I tripped over this article on the developer pages of apple which gives a basic guidance to setting up Subversion with Xcode. The main issue with the article is that it focuses a real server (with a lot of people working on it). Now this usecase is the most interesting one when it comes down to sourcecode management (SCM) software in general, but right now I am only interested in getting versioning for myself (and only on my computer since I don't have a MacBook right now).

So when you read through the article you will probably see that svnserve is better for you then the Apache module, at least that is what I thought. So what I did is set up a repository as described in "Creating a Subversion Repository"(only creating it in my User directory instead of /Library), I skipped the Apache configuration and continued on "Using Subversion from Xcode". That chapter basically just tells you to set the project settings to have the build output put somewhere else (so that you do not checkin those files) and how to use the repository with Xcode.
Now I do not know what I did wrong, but the best that I could get is an authorizations error after manually starting the svnserve deamon (which is not necessary according to the documentation). I searched the apple pages and googled around a bit but didn't get to lucky on what to do next. Finally I found this page which tells me where the config file of Subversion is (actually it just tells me that there is a config file and what it's name is, but since we have spotlight...)
When I opened the config file I found an interesting note:

   ### This file controls the configuration of the svnserve daemon, if you
   ### use it to allow access to this repository.  (If you only allow
   ### access through http: and/or file: URLs, then this file is
   ### irrelevant.)

Ok, so if I can use file:/ instead of svn/svn+ssh or http I should be fine..... at least that was my guess. Happily it turned out that this guess wasn't so bad so without starting anything manually and without messing around with the authorizations to much I know have the following config:

scheme: file
Path:

That's it! Now all the versioning works fine.


Finally a blog......

No, this post will not contain a "First post" post.

Having said that, what's this about?

I bought myself another computer book two weeks ago to not completely forget what I once knew about programming at all. That book is about Cocoa and I somehow want to share the first days of experience in that area. I don't want to discuss any general programming stuff here, just a bit of Objective-C specific stuff (since this will be the kind of stuff which I will find strange not knowing that language) and of course a lot of Cocoa and Xcode related stuff.

Where I come from....

I've been a geek for over a decade and came across several programming languages including C/C++, PHP, Java and Python as well as SQL and some other stuff. I wouldn't say that I'm an expert in any of these languages and the fact is that I've probably already forgotten most of what I once knew about these languages.

Quo vadis?

Reflection and sharing..... let's rock'n'roll