Cross-Platform Mobile Development

  • C++/CLI

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von jedijaeger.

    Cross-Platform Mobile Development

    Hallo Forum,

    kennt jemand eine kostenlose Lösung um native Apps für iOS, Android und Windows Phone zu erstellen? Möglichst von einer Codebase... Programmiersprache ist egal.. Unity macht genau das, ich weiß und sogar in C#, aber das ist auch ziemlich speicherfressend :thumbdown:

    Habe PhoneGap gefunden. Verstehe da aber die Basis irgendwie nicht :thumbsup:

    Liebe Grüße
    Julian
    Hmkay. :|
    Wenn du VS 2015 CE verwendest, dann brauchst du nur über den Installer die Option ​C#/.NET Xamarin anhaken und installieren

    mit VS 2015 CE isses seit ungefähr 2 Monate kostenlos
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @jedijaeger: Von da Xama in Homepage bekommst im Prinzip den gleichen Installer für VS 2015 CE wie den, den du von MS bekommst

    Lg Rafinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Da ich zuletzt in beide Bereiche, Xamarin und Cordova (PhoneGap), testweise eingestiegen bin, hier mal grob meine Erfahrungen:

    Zunächst zu Xamarin, das seit der Übernahme von Microsoft tatsächlich komplett kostenlos ist: Bei der App-Entwicklung mit Xamarin ist zu beachten, dass letztendlich für jedes System eine native Anwendung erstellt wird. Grob gesagt hat Xamarin nichts anderes gemacht, als die SDKs von Android (Java) und iOS (ObjectiveC) in C# zu übersetzen (was für WindowsPhone / UWP nicht notwendig ist), so dass man seinen Code in C# schreibt und dieser dann übersetzt wird. Die Magie steckt in dem Detail, dass die verschiedenen Plattformen sich dann natürlich eine Menge Code teilen können, wodurch Zeit eingespart wird (Webrequests, lokale Datenbank, über Plugins auch Sensorzugriff etc.). Dennoch wird für jede unterstützte Plattform ein eigenes Projekt und somit quasi eine eigene App erstellt, auch die grafische Oberfläche wird einzeln implementiert, ES SEI DENN man nutzt Xamarin Forms.
    Hier geht die Magie nochmal einen Schritt weiter: Xamarin versucht, ein UI-Framework zu erschaffen, mit dem eine UI nur einmal entworfen werden muss und dann dennoch auf jedem System nativ aussieht (und es letztendlich auch ist). Ein Beispiel: Ich würde in meiner App gerne eine Ansicht mit Tabs verwenden. Wenn ich nun ein Tab-Element in die Oberfläche einbaue und dann das Projekt für eine Plattform baue, ist in der App eine Tab-Ansicht der jeweiligen Plattform verbaut, sprich unter iOS sind die Tabs unten, bei Android oben und bei Windows Phone habe ich diese klein geschriebene Tab-Leiste oben. Ähnlich funktioniert ein Karten-Element, dass einmal eingesetzt in der fertigen App dann unter Android Google Maps verwendet, auf iOS Apple Maps und auf Windows Phone Bing Maps. Selbstverständlich muss man an manchen Stellen auch gesondert darauf achten, dennoch spart man viel Zeit und bekommt eine native App. Xamarin Forms verwendet XAML und ermöglicht bereits an vielen Stellen Bindings, jedoch ist das Framework selbstverständlich noch lange nicht so ausgereift wie WPF.

    Nun zu Cordova / PhoneGap: Man findet zu der Unterscheidung zwischen Cordova und PhoneGap ne Menge Erklärungen, letztendlich läuft es wohl auf diese Erklärung hinaus:

    PhoneGap proper was created around 2009 by a startup called Nitobi [...]. In 2011 Adobe purchased Nitobi and with it the rights to the PhoneGap brand, and the open source core was donated to the Apache Software Foundation under the name Cordova.
    [...]
    At first, the differences between Cordova and PhoneGap were minimal. But Adobe always had plans to build out a proprietary set of services around the PhoneGap ecosystem, and has started to execute on that plan with PhoneGap Build.


    Letztendlich ist PhoneGap also das offene Cordova plus Extras. Cordova schlägt die Brücke zwischen der Entwicklung von Web-Apps, die letztendlich nichts anderes sind lokal gespeicherte Webseiten (mit evtl. für mobile optimierter Oberfläche) und dem Zugriff auf Komponenten des jeweiligen Betriebssystems. Um es einfach auszudrücken, es erweitert deine aus der Webentwicklung bekannte Javascript-Umgebung um Zugriff auf Sensoren, Kamera, internen Speicher, Kalendar und vieles, was einem auf einem Smartphone noch alles einfallen kann. Dieser Zugriff ist für jede Plattform einzeln implementiert und in Javascript kann dann einfach darauf zugegriffen werden, was dabei jeweils herauskommt. Was ist nun der Vorteil bei der Entwicklung mit Cordova? Nunja, zum einen muss man eine App wirklich nur einmal implementieren und sie funktioniert auf jeder Plattform. Zum anderen, stehen einem sämtliche Web-Frameworks zur Verfügung und notfalls hat man durch CSS wohl die anpassbarste grafische Oberfläche überhaupt. Derzeit arbeite ich an einem Projekt mit dem ionic Framework (hübsche Oberfläche) und AngularJS (MVC/MVVM für HTML5/JS) und bin absolut begeistert von der Einfachheit (nur so als persönlicher Tipp sich das mal anzuschauen ;) ). Die Nachteile bei der Cross-Plattform-Entwicklung über Webtechnologien sind leider auch nicht von der Hand zu weisen: Die Apps sind, da quasi Websites, selbstverständlich langsamer, man hat nicht auf alle Teile des Gerätes Zugriff und (auch wenn das als Vorteil erscheinen mag), sie sehen überall gleich aus. Android, iOS und WinPhone haben unterschiedliche Oberflächen und daher wird mitunter eine mit Webtechnologien erstellte App da nicht reinpassen oder für den Nutzer ungewöhnlich und schwerer bedienbar sein (nicht jeder Nutzer ist versiert genug jede In-App-Navigation oder UI-Anordnung sofort zu verstehen).

    Mein Fazit bisher ist: Cordova und Xamarin haben grundverschiedene Anwendungsbereiche, da sie grundverschiedene Stärken haben: Bei kleineren Apps, die in erster Linie Informationen bereitstellen sollen, wird Cordova seine Stärken voll ausspielen. Sobald jedoch auf mehr oder weniger tiefgreifende Elemente einer Plattform zugriffen werden soll (Notifications, GPS, Kamera usw.), würde ich zu Xamarin greifen, da dort auch jederzeit die Möglichkeit besteht, für einen bestimmten Bereich der App einen plattformspezifischen Weg zu gehen (bspw. was später die Einbindung von Android Wear / Apple Watch betrifft). Und solange du alleine entwickelst, solltest du dich möglicherweise an Xamarin Forms halten, da das Erstellen eines UI für jede Plattform eine Menge Arbeit und letztendlich auch Expertise erfordert. Als jemand, der keine Ahnung von Objective-C und dem iOS Framework hatte, wäre es für mich ausgesprochen schwierig gewesen, für iOS eine eigene Oberfläche zusammenzubauen.
    @Radinator und @Dksksm erstmal danke für eure Antworten :)

    @lukekogv Vielen Dank für deine ausführliche Antwort :D Laut deiner Beschreibung würde Xamarin Forms wohl am meisten meiner Vorstellung entsprechen ^^ Ich arbeite an einer Art schnelleren und optimierteren Version von Snapchat, bzw. ist dieser Messenger das Vorbild. Und wer es benutzt weiß ganz sicher, dass da jemand ganz schön daneben programmiert hat (persönliche Meinung :D)... Da scheint mir Xamarin.Forms echt am geeignetesten, da ich auf Notifications, Kamera, GPS und so weiter zugreifen muss :D

    Wie mache ich das mit der einzigen UI ?
    Wenn ich ein Xaml Cross-Platform Projekt erstelle habe ich drei Projekte (Den Shared Code, Droid, und iOS). Und er sagt mir, dass das Windows Projekt fehlgeschlagen ist.
    Hmkay. :|

    jedijaeger schrieb:

    Wie mache ich das mit der einzigen UI ?
    Da würd ich dir vorschlagen hier mal vorbei zu sehen: Wintellect.com.

    Da man in der Auswahl ja zum einen Blank App (Native Portable) und Blank App (Native Shared) und Blank App (Xamarin.FormsPortable) und Blank App (Xamarin.Forms Shared) hat, und ich mich immer für die Blank App (<Xamarin.Forms/Native>Portable) Version entschied, werde ich meine Erkenntnisse nur auf Basisdieser Vorlagen liefern. (Ehrlich gesagt könnte ich dir noch ned mal den Unterschied erklären)
    The term “Portable” in this context refers to a Portable Class Library (PCL). All the common applica-tion code becomes a dynamic-link library (DLL) that is referenced by all the individual platform pro-jects.

    The term “Shared” in this context means a Shared Asset Project (SAP) containing loose code files (and perhaps other files) that
    - Creating Mobile Apps with Xamarin.Forms Book First Edition (siehe unten)

    Ich hab auch schon mal kurz in die Xamarin.Forms-Ecke geschaut und mit probeweise ein Projekt angelegt. Ich hab mich dabei an die Anleitung die in der PDF Creating Mobile Apps with Xamarin.Forms Book First Edition war, gehalten (Link). Leider versagte bei mir die Erstellung (das Builden) des Projektes sowohl direkt nach dem starten der Projektmappe, als auch nach dem Updaten der Komponenten. Jedesmal mit Android-Fehlern, dass irgendwelche Jar-Files nicht gefunden wurden. Ich solle sie doch bitte nach <ellenlanger Pfad in %appdata%> kopieren und unzippen.

    Ich hab mich daher entschlossen wieder zu Blank App Native Portable zu verwenden. Zwar muss manb hier für jede Plattform den UI Code neu machen, da aber die Xamarin.Forms Kiste einfach ned will, bleibt mir nix anders über.
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Radinator“ ()

    @KidRick JS ist wieder Webbasiert. Das ist bei nem Messenger eher suboptimal... :D

    @Radinator Die Seiten haben mir sehr geholfen. Danke dafür :) Dennoch sympathisiere ich eher zu der Native Variante. Einfach aus dem Grund, weil es dazu einen Designer gibt und ich ziemlich viel ändern, kompilieren, installieren müsste um kleinste Fehler zu berichtigen :) Die Portable und Shared habe ich so verstanden, dass die Verbindung bei der Portable durch eine dll realisiert wird und beim anderen durch geteilte Assets ^^

    Vielen Dank an alle Leute, die hier rein geschrieben haben. Das wäre dann abgehakt. So wie es aussieht, werde ich Xamarin nutzen. Als Projekttyp werde ich Native Portable nehmen.

    :thumbsup:

    Liebe Grüße
    Julian
    Hmkay. :|