Xamarin habe ich mir ehrlich gesagt nie wirklich angesehen, aber wenn ich richtig informiert bin, dann verwendet es .Net und MonoTouch für iOS und OSX Applikationen.
Ohne Frage ist MonoTouch eine oft benutzte und brauchbare Lösung, um auf der Zielplattform mit den nativen SDKs zu arbeiten. Es hat aber auch große Nachteile. Zum Beispiel erhöht sich der Lernaufwand, weil man zum einen versehen muss, wie die nativen SDKs ticken und zum anderen muss man zusätzlich die Besonderheiten der dazwischenliegenden Abstraktionsschicht zur Programmiersprache C# lernen.
Weiterhin sehe ich auch einen "zeitlichen Nachteil" bei Xamarin, der dadurch entsteht, dass man bei iOS/OSX
SDK bzw. MonoTouch Updates immer auf ein Xamarin Update warten muss, bevor man wirklich loslegen kann. Ebenfalls kann man nicht direkt ObjC Code anschauen und den äquivalenten C# Code dafür eintippen. Weil Standard C# u.a. keine Unterstützung für die ObjC Multipart Methodnames bietet. Man muss also immer umdenken.
In allen diesen Beziehungen ist Oxygene, dass ich seit iOS6 benutze, klar im Vorteil. Oxygene kompiliert direkt gegen die ObjC Runtime und arbeitet direkt mit den ObjC Klassen und iOS/OSX
SDK's. Wenn etwas Neues kommt (im meinem Fall waren es iOS6.x /iOS7) dann braucht man "theoretisch" nur noch die neuen
SDK Header in Oxygene importieren (das dauert 3 Minuten) und kann loslegen. Praktisch gab es bei der ersten iOS 7 Beta 2-3 Tage, die RemObjects gebraucht hat, um ein Fix für das neue Xcode 5 Storyboard Format bereitzustellen. Akzeptabel, wie ich finde.
Zudem kostet Oxygene nur einen Bruchteil von Xamarin, es unterstützt auch Java und das Android
SDK (native Java ohne Framework Layer) und bietet zudem noch Sprachfeatures, bei denen alle anderen Sprachen deutlich hinterherhinken. Die Jungs von RO sind total engagiert dabei, dem Pre-Compiler alles beizubringen was er braucht, um das Beste aus allen Sprachen/Plattformen plattformübergreifend bereitzustellen (z.B. Properties und Delegates für Java, Linq Befehle für Objective C und Java, Multipart Methodnames für alle Plattformen, Simple Type boxing für ObjC, ...). Alles ist natürlich optional nutzbar.
Ich finde es einfach nur großartig.
Was das Lernen betrifft...
Ich bin auch ein altes Delphi Roß. Seit Delphi 3 habe ich mir zuvor keine andere Sprache angesehen.
Der Einstieg in die iOS Entwicklung war mit Oxygene aber wirklich leicht. Das liegt daran, dass fast alle iOS SDKs gleich aufgebaut sind. Es sind einfach fast immer Delegates und Protocols(Interfaces), in Kombination mit Befehlen die Dank der Multipart Methodnames wie ein Satz lesbar ( und damit weitestgehend selbsterklärend) sind.
Zum Start habe ich mir 10-20 "Frank Jüstel XCode Videos" auf Youtube angesehen. Danach hatte ich schon ein ziemlich gutes Gefühl dafür, wie Xcode mit den iOS SDKs zusammenarbeitet. Der Einstieg in Oxygene war Dank des vertrauten Pascals und der exakten Übereinstimmung der Methodennamen und Signaturen zu den iOS SDKs wirklich easy.
Natürlich lerne ich noch jeden Tags dazu und finde auch manchmal echte "iOS Brocken" (wie das Addressbook Framework) die mich erstmal erstmal wieder runterziehen, aber solche "Probleme" hätte ich mit anderen Entwicklungssystemen sicher auch gehabt.
Der Einstieg wird auch leichter durch den "Oxydizer" von Oxygene. Das ist ein Copy&Paste Tool, mit dem man Java-, Delphi, C# oder ObjC Code in die Zwischenablage kopieren und als Oxygene Pascal wieder pasten kann. Für ObjC ist der Teil zur Zeit nur in der Beta verfügbar, funktioniert aber schon recht gut und nimmt einem schon viel Übersetzungsarbeit ab.