Appentwicklung iOS und Android

Der TE war seit 4,5 Jahren hier nicht mehr online, ich glaube er wird dir nicht mehr antworten.

Ich kann dir zumindest von meinen Erfahrungen berichten. Ich habe auf Arbeit vor zwei Jahren mit einer App für einen Kunden angefangen. Da ich mich mit C# sehr gut auskenne, habe ich mich für Xamarin entschieden.


Die erste Version der App habe ich mit Xamarin.Forms erstellt. Funktioniert fast wie WPF, und auch da bin ich eigentlich ganz gut dabei. Falls dir das nichts sagt:
Du erstellst alles für die Apps nur einmal. Code, UI, ...
Die UI wird wie WPF mit XML-Schreibweise erstellt, per Datenbindung die Daten reingezogen.

Allerdings habe ich schnell die Grenzen kennen gelernt. Optische Bugs auf iOS oder Android, die ich teilweise nie lösen konnte. Dreckige Workarounds, damit die Apps "nativ" wirken.
Nativ heißt: Apple nutzt in iOS zum Beispiel oft Haarlinien als Separator zwischen Elementen. Da musste ich von nativen Apps einen Screenshot machen, um die Farbe herauszufinden. Dann konnte ich die Linie dreckig selber reinhacken.
Ich möchte an dieser Stelle auf diese Frage von mir auf Stackoverflow verweisen, die ich nie sauber lösen konnte. Das musste ich letztendlich mit einer Art statistikbasierten Ausnahmebehandlung umgehen. Was für ein Dreck. Sowas ist, oder zumindest war, Alltag mit Forms.

Teilweise konnte ich Wünsche nicht umsetzen wie: Da links ist ein Icon, mach das gleiche Icon doch bitte auch rechts rein. Es ging beim besten Willen nicht. Das rechte Icon war immer versetzt.


Vor einem Jahr haben wir dann die Version 2 rausgebracht und sind auf Xamarin.Native umgestiegen.
Jetzt erstelle ich die Benutzeroberflächen doppelt. Für iOS auf dem Mac mit Xcode im Interface Builder, für Android alles mit dem Android-AXML-Designer.

Doppelte Arbeit, aber ich kann alles nativ umsetzen und es schnackelt einfach wesentlich besser.
Dadurch dass ich jetzt freien Zugriff auf die Activities bzw. ViewController, und somit auf die nativen plattformspezifischen Funktionen habe, bin ich in der Umsetzung viel freier. Die App ist kleiner, und vor allem deutlich schneller geworden.

Wermutstropfen: Die Kompilierung für Android dauert teilweise recht lang. Manchmal startet die App nach einer Codeänderung beinahe instantly, manchmal kompiliert sie drei, vier, auch fünf Minuten. Ich empfehle wenigstens einen guten Quad-Core.
Außerdem bricht die Kompilierung gerne mit diversen Fehlern ab, wie "Temp-Datei kann nicht gelöscht werden", "Es kann keine Verbindung zum Debugger hergestellt werden", ... Neukompilieren hilft dann, aber es nervt.

Bei iOS habe ich diese Fehler nicht. Vergiss trotzdem nicht, dass du unbedingt einen Mac brauchst, sonst kannst du keine Apps für iOS erstellen. Bei Xamarin wird der Mac ins Netzwerk eingebunden, und du kannst unter Windows in VS programmieren. Kompiliert wird dann nur auf dem Mac übers Netzwerk.


Unterm Strich kann ich sagen: C# und iOS macht Spaß. Apples Programmierkonzepte machen (meistens) Sinn, und man kann ziemlich gut damit arbeiten. Ich muss mich nicht mit Swift oder gar Objective-C rumschlagen, aber kann trotzdem alle Swift-Tutorials im Internet mit ein bisschen Syntaxwissen umschreiben.

Android nervt, da die Hardware recht schnell limitiert und ruckelt, oder die Programmierkonzepte nerven. So haben ListViews keine native Unterstützung für Sections mit Rows. Activitywechsel kann nur über Intent-Pakete erfolgen, in denen du nur Werttypen wie int oder string verschicken kannst.
Das hat Apple wesentlich eleganter gelöst. Just my two cents.

Android würde ich aufgrund der ständigen Fehlermeldungen vielleicht also lieber richtig nativ umsetzen, Java unterscheidet sich ja nun kaum von C#. Allerdings hast du mit Xamarin ja den riesigen Vorteil:
Teilung des Logikcodes zwischen beiden Apps. Und das sind bei uns ca. 85 %. Da steckt so viel Hyper-Typer drin, dass ich den nie doppelt pflegen wollen würde.


Ist doch mehr geworden, als ich dachte.
Gruß vom Physikbuddha
 
Das mit Android-Studio kann ich so unterschreiben :p Und das nicht nur fürs kompilieren, der Emulator ist einfach grausig. Mit einem echtem Smartphone angeschlossen geht es um einiges besser, aber das Gesamtpaket in Xcode ist doch stimmiger.
Auch wenn das hochladen in den App-Store dafür Ewigkeiten dauert. Und die Reviews im App-Store sind eine Qual. Ich hatte zu Teilen Wartezeiten von 5 Tagen bei Updates, nur um dann gesagt zu bekommen das etwas nicht passt. Und des öfteren waren das Sachen die seit der initialen Version so gewesen sind. Die einen Reviewer sehen die Sachen gelassener, und andere sind recht streng.


Je nachdem was die App machen muss sind PWA's auch eine solide Alternative.
Mit Service Workern bekommst du recht gute Offline-Funktionalitäten, Push-Nachrichten funktionieren, du kannst REST-APIs ganz einfach konsumieren wenn bereits eine vorhanden ist und du kannst dein JS-Framework nach Wahl nutzen. Fütterst damit dann zeitgleich auch noch eine normale Website.
In den App-Stores landet das dann nicht, aber der User kann über den Browser dann ein Icon auf den Homescreen packen.

Sonst gibt es neben Xamarin ja auch noch React Native und Nativescript (Angular/Vue/JS). Ein ganz heißer Schrei ist in letzter Zeit Flutter von Google.
Im Prinzip entwickelst du in Dart und die UI wird von Flutter gerendert. Alles wie Javascript-Frameworks sehr Komponenten basiert vom aufbau. Oben drauf kannst du native Kotlin/Swift-"Module" bauen die dann als Schnittstelle zwischen nativen Funktionen und Flutter dienen. Entwickeln mit Hotreloading ist auch recht nett.

Kommt aber am Ende wirklich drauf an was deine App können muss, grade wenn die App Performance haben muss merkt man doch einen unterschied zwischen Nativ und all diesen Frameworks.
 
Zurück
Oben