Die letzten Tage habe ich mich, aufgrund des aktuellen Projektes in der Firma, intensiv mit dem Wrapping von Objective-C Bibliotheken in MonoTouch beschäftigt.
Dank der Unmengen an Dokumentation *hust* hat das einiges an Frust und Zeit gekostet, weshalb ich nun ein paar Infos teilen möchte, um es anderen Entwicklern hoffentlich etwas zu erleichtern.
Konkret habe ich an der Implementierung von AdMob und OpenFeint gearbeitet. AdMob war hierbei kein großes Problem, da man direkt von der Google-Seite eine “.a”-Library herunterladen kann.
Bei den Extra-Argumenten für den MonoTouch Linker muss man folgende Argumente hinzufügen:
“-L${ProjectDir} -GoogleAdMobAds -force_load ${ProjectDir}/libGoogleAdMobAds.a”
und schon kann man munter an seinen Wrapper-Klassen programmieren. Alles kein Problem.
Die Probleme fangen an, wenn man sich von OpenFeint das SDK für iOS herunterlädt und sich fragt, wo die “.a”-Library ist ^^.
Was man bekommt, sind lediglich diverse Resource-Bundles und einen Ordner namens “OpenFeint.framework”. In diesem framework-Ordner befindet sich eine Binär-Datei und die Header-Dateien des Frameworks.
Nach einer ergebnislosen Suche im Internet und einer E-Mail zu Xamarin, stellte sich heraus das man die Binär-Datei aus dem “OpenFeint.framework”-Ordner herauskopieren muss und die Endung “.a” selbstständig hinzufügen muss. Dann kann man sie genauso wie bei AdMob einfach zum Linking hinzufügen und schon funktioniert es!
Interessant ist, dass anscheinend noch keiner darüber etwas im Internet geschrieben hat, außer dies ist ein Problem, dass lediglich OpenFeint keine “.a”-Datei direkt mitliefert.
Nachdem man nun weiß, wie man das Framework hineinlinken kann, ist es dank den Headern von OpenFeint recht leicht, die Wrapper-Klassen zu programmieren, sollte man sich etwas mit Objective-C auskennen, versteht sich
.
Direkt vom MonoTouch-Team gibts es übrigens ein wunderbares Repository auf GitHub, welches bereits für einige Libraries die Bindings zur Verfügung stellt.
https://github.com/mono/monotouch-bindings