Forse non lo sapevate, ma ogni Apple Macintosh che comprate con Snow Leopard, ha in dotazione un potentissimo sistema di gestione revisione per i files e progetti che scrivete.
Perchè è importante adottare un sistema di revisione per i propri files/progetti? Innanzitutto XCode è pronto per utilizzare appieno le caratteristiche dei sistemi di revisione multipli ed, inoltre, poter avere capillarità su ogni singolo file e relativa subversione all’interno del progetto, potrebbe aiutare (e di molto) lo sviluppo in team e la correzione di errori. Questa piccola guida, vuole essere un prontuario facile per la configurazione di caratteristiche e programmi già presenti, al momento in cui scrivo (10.6.5+), su MacOS X.
1. Configurazione del repository
Prima di tutto, bisogna configurare SVN. SVN, alias Subversion, è un potente sistema di revisione multipla per progetti e/o files non necessariamente legati ad XCode, anche se noi, oggi, vedremo proprio questo aspetto. Per maggiori dettagli, vi invito a visionare questo link.
Per poter creare un Repository di revisioni, è necessario utilizzare il tool da linea di comando svnadmin. Niente di più semplice:
svnadmin create /svnrepos
Il comando sopra CREA una cartella per i nostri repositories a partire dalla root del nostro disco. In automatico viene creato un file di configurazione che dovrà essere modificato secondo le nostre esigenze. In particolare, ritengo sia importante impostare almeno i seguenti parametri:
anon-access = none
auth-access = write
Il primo parametro indica l’impossibilità senza un login valido di accedere al nostro repository. La seconda opzione, ci permette di specificare il permesso di scrittura per gli autenti autorizzati.
A questo punto, spostiamoci nella cartella /Library/LaunchDaemons ed aggiungiamo un file per rendere il nostro nuovo servizio sempre disponibile all’avvio del nostro computer:
cd /Library/LaunchDaemons
vim org.tigris.subversion.plist
Ecco una copia del mio file di configurazione:
Label
org.tigris.Subversion
ProgramArguments
/usr/bin/svnserve
--daemon
--root
/svnrepos
RunAtLoad
Disabled
StandardErrorPath
/dev/null
UserName
root
Proviamo ad avviare il nostro servizio:
launchctl load org.subversion.plist
se tutto, è andato correttamente, digitando:
ps aux | grep svnserve
Otterremo qualcosa di questo tipo:
root … … … … /usr/bin/svnserve --daemon --root /svnrepos
Questo significa che il nostro servizio di repository è pronto per essere utilizzato. Complimenti!
2. Il client SVN ed i files da non sincronizzare
A questo punto è necessario effettuare una modifica alla modalità di sincronizzazione dei repositirory. Per default, infatti, il sistema sincronizza TUTTI i files. Questo, purtroppo, non è molto funzionale ed ottimale per i progetti di XCode.
Alcuni files e cartelle, infatti, non dovrebbero essere inclusi all’interno del sync, in quanto onerosi in termini di peso in bytes e complicati da gestire, in quanto composti da troppe sotto cartelle. Mi riferisco ai files ed alla cartella di build del nostro progetto.
Fortunatamente, SVN è abbastanza intelligente da permetterci di escludere a priori alcuni patterns che vengono incontrati durante la sincronizzazione. Per fare questo è necessario modificare il comportamento di default del nostro utente nei rapporti con il servizio SVN.
Apriamo un terminale del nostro sistema e digitiamo:
svn status
questo comando genererà una cartella nascosto, all’interno della home del nostro utente.
cd .subversion
ed editiamo il file di config presente all’interno
vim config
Abbiate cura di ricercare e modificare, come segue, la riga che inizia per global-ignores. Se la riga è commentata, scommentatela.
global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~
#*# .#* .*.swp .DS_Store build *~.nib *.so *.pbxuser *.mode* *.perspective*
Cercate la stringa:
enable-auto-props = yes
e verificate che sia scommentata. Alla fine, nella sezione [auto-props], aggiungete queste righe:
[auto-props]
*.mode* = svn:mime-type=text/X-xcode
*.pbxuser = svn:mime-type=text/X-xcode
*.perspective* = svn:mime-type=text/X-xcode
*.pbxproj = svn:mime-type=text/X-xcode
A questo punto il nostro sistema è PRONTO per ricevere il nostro primo progetto. Apriamo XCode e scegliamo l’opzione SCM->Configure Repositories:

Scegliete il tasto + in basso, nella colonna a sinistra e riempite i parametri a Destra, seguendo lo schema riportato sotto:

Utilizziamo la dicitura localhost per riferirci alla nostra stessa macchina. La finestra URL, verrà riempita automaticamente, in base ai parametri specificati sotto. Quindi, preoccupiamoci solo delle restanti opzioni.
Alla voce Scheme, digitiamo: SVN+SSH, questo ci permetterà di usare in congiunzione al protocollo SVN, le facilities e la sicurezza provenienti dal protocollo SSH.
Come Host, specifichiamo la voce: localhost, per riferirci alla nostra stessa macchina. Path, conterrà il percorso così come specificato nel comando di creazione del repository. Lasciamo vuoto il parametro Port e riempiamo User e Password, con le credenziali usate per accedere nel nostro Mac, attraverso il
servizio remote login (ssh).
Spostiamoci nella tabella Options e modifichiamola secondo lo schema riportato sotto:

A questo punto, creiamo un nuovo progetto da Xcode ed una volta aperto, scegliamo il file di progetto e visualizziamone le informazioni:

Premiamo sul tasto Configure Roots & SCM e scegliamo come repository, quello appena configurato:

Chiudiamo la configurazione e se tutto è andato correttamente, vedrete comparire un piccolo simbolo di database nella colonna più a sinistra del vostro progetto:

Manca ancora un ultimo passo: la sincronizzazione iniziale del progetto sul repository. Chiudiamo il progetto con COMMAND+W e dal meno di XCode, scegliamo l’opzione SCM->Repositories:

La finestra che ci appare, ci permetterà di interagire con il server SVN appena configurato ed, in particolare, ci permetterà di effettuare le opzioni di Import iniziale e Checkout. Vediamo come:

Scegliamo la voce IMPORT ed indichiamo come percorso, la cartella del progetto appena creato:

Dopo un paio di secondi, il sistema ci fornirà un riscontro, indicandoci che l’import è andato a buon fine:

Scorrendo, tra le cartelle disponibili, troveremo adesso anche quella del nostro nuovo progetto:

Complimenti. Adesso il nostro progetto è perfettamente sincronizzato, attraverso SVN. Potremo scegliere di “committare” le modifiche ogni qualvolta creeremo una versione “importante” del nostro lavoro, oppure potremo creare dei branch di sviluppo per il nostro team. Insomma, le possibilità sono davvero tante e vi rimando a questo link per saperne di più sull’uso di SVN:
Buona programmazione a tutti!
Costantino












6 Responses to “XCode e SVN: Prendiamo controllo dei nostri progetti”
30 Novembre 2010
Tweets that mention XCode e SVN: Prendiamo controllo dei nostri progetti | devAPP -- Topsy.com[…] This post was mentioned on Twitter by Bubi Devs, devAPP. devAPP said: XCode e SVN: Prendiamo controllo dei nostri progetti http://www.devapp.it/wordpress/xcode-e-svn-prendiamo-controllo-dei-nostri-progetti.html […]
30 Novembre 2010
BigBalliottimo…
30 Novembre 2010
XfightGrazie ! Proprio la guida che cercavo 😀
30 Novembre 2010
ignaziocciao, ottima guida.
Sai per caso se per un progetto è possibile fare riferimento a più server svn? mi trovo a dover fare dei commit “ufficiali” sul server aziendale, ma per le modifiche minori vorrei usare un server locale.
8 Dicembre 2010
danieleCiao, una correzione il comando “launchctl load org.subversion.plist” in realtà è “launchctl load org.tigris.subversion.plist”
3 Maggio 2011
ignaziocCiao, con xcode4 ho un pò di casini con SVN…in particolare non trovo “configure root e cms” quindi non so come fare a dire che un progetto in locale debba usare uno specifico server svn.