Archiv für Oktober 2011

0

SVN-Revision als Build-Version in XCode 4

Folgendes Problem: Applikationen, die mit XCode gebaut werden, haben neben der normalen Release-Version (CFBundleShortVersionString) auch eine sogenannte Build-Version (CFBundleVersion). Die Release-Version ist dabei soweit kein Problem, kann man sie doch nach Belieben manuell hochsetzen. Bei der Build-Version verhält es sich ein bischen anders. Theoretisch möchte man hier, dass diese bei jedem Build automatisch erhöht bzw. auf einen sinnvollen Wert gesetzt wird. Idealerweise kann man aufgrund der Build-Version dann auch auf den verwendeten Code-Stand schliessen.

Ich habe mich daher entschieden, für meine Projekte die SVN-Revision als Build-Version zu verwenden. Dies ist mit XCode (zumindest in der Version 4.2, die ich momentan verwende) durch Hinzufügen einer weiteren Build-Phase ohne weiteres möglich. Hier also das Ergebnis dessen, was ich mir zusammengegoogelt habe:

In den Projekteinstellungen unter “TARGETS/Build Phases” muss man eine weitere (Run Script) Phase an das Ende hinzufügen. Als Script-Sprache habe ich Python gewählt, daher wird unter Shell “/usr/bin/python” eingestellt. Hier nun das Script, dass in der Phase ausgeführt werden muss:

1
2
3
4
5
6
7
8
9
10
11
12
13
import os
import csv
from subprocess import Popen, PIPE
from Foundation import NSMutableDictionary

cmd = "/usr/bin/svnversion" # get the svn revision
svn_revision = Popen(cmd, shell=True, stdout=PIPE).stdout.read()
info_plist = os.environ['BUILT_PRODUCTS_DIR'] + "/" + os.environ['WRAPPER_NAME'] + "/Info.plist"

## Open the plist and write the svn revision as the bundle version
plist = NSMutableDictionary.dictionaryWithContentsOfFile_(info_plist)
plist['CFBundleVersion'] = svn_revision
plist.writeToFile_atomically_(info_plist, 1)

Zunächst wird also mittels “svnrevision” die aktuelle SVN-Revision ermittelt. Das aktuelle Verzeichnis zur Ausführung des Scripts ist dabei das Projektwurzelverzeichnis, daher bekommt man auch automatisch die korrekte Revision. Im zweiten Schritt wird dann das “Info.plist” file (welches die Meta-Informationen für das Executable enthält) geändert und der “CFBundleVersion” key gesetzt. Im Ergebnis hat man nach jedem Build wie gewünscht die SVN-Revision als Build-Version.

Im Prinzip also alles ganz einfach. Da ich aber trotzdem ne Weile gebraucht habe, um alle nötigen Schnipsel zusammenzusuchen, hab ich das hier mal zusammengefasst. Vielleicht hilfts ja dem einen oder anderen… :)

Tags : , ,

Endlich Hauptstudium

Ich komm grad zurück von einer arbeitsreichen Woche in Pfungstadt. Genaugenommen war es nen ziemlicher Stress, vier Klausuren plus Repetitorien in sechs Tagen. Aber ich denke, es hat sich gelohnt… Wenn ich mich nicht total verrechne, sollte ich alle Klausuren (die des 6. Hauptsemesters) bestehen und wär damit ein ziemliches Stück näher ans Ziel gerückt. – Nun überlege ich immernoch, ob ich das CSUS-Praktikum, welches die Hochschule im Frühjahr wieder anbietet mitmachen soll oder nicht. Dieses Praktikum in den USA geht über drei Wochen und bietet die Möglichkeit, einige Studienleistungen (vor allem natürlich in Business-English) anrechnen zu lassen. Leider haben sich die Anrechnungsmöglichkeiten aber so ziemlich komplett geändert. Früher konnte man die Praktikumsleistungen auf die Projektarbeit anrechnen, dies ist leider nun nicht mehr möglich. Stattdessen gibt es jetzt eigentlich nur noch Wirtschaftskurse… – Allerdings schaden kann das ganze ja wohl auch nicht. Na gut, außer meinem Geldbeutel natürlich… ;)

Falls ich mich jetzt zur Teilnahme an dem Praktikum entschliessen sollte, müsste ich neben der Projektarbeit inkl. mündlicher Präsentation nur noch zwei Klausuren in Pfungstadt schreiben. Der Rest bestünde dann nur noch aus Einsendeaufgaben und natürlich der Diplomarbeit, mit der ich nach Möglichkeit auch schon im nächsten Frühjahr beginnen könnte…

Tja, sieht wohl so aus, als ob sich mein Studium dann doch noch einem positiven Ende nähert… :)

Tags : ,