Heute habe ich das Vergnügen, meine neue App – Max reHIT Exercise – auf Product Hunt anzukündigen. Max reHIT Exercise ist eine Trainings-App, die Sie durch Intervall-Workout routines führt.

Ich werde die App hier nicht vorstellen. Ich sage nur, ich bin stolz darauf, wie es geworden ist, und wenn Sie einen optimalen Algorithmus zum Trainieren wollen, könnte er Ihnen gefallen.

Ich weiß, ich habe in letzter Zeit nicht viel geschrieben. Das liegt daran, dass sich die Softwaresystemarchitektur nur sehr wenig weiterentwickelt hat. Es ist ziemlich dasselbe, ein anderer Tag. In vielerlei Hinsicht ist das intestine, aber es ist nicht interessant, darüber zu schreiben.

Obwohl dieser Artikel definitiv eigennützig ist, zielt er auf die Wahl ab, eine local iOS-Umgebung gegenüber einer Cloud-Umgebung für eine App zu verwenden. Es ist eine Entscheidung, die jeder Entwickler treffen muss. Wie treffen Sie diese Wahl? Was once sind die Auswirkungen? Welche Wahl würde ich beim nächsten Mal treffen?

Raus mit dem Alten

Meine früheren Projekte waren größtenteils AWS-basiert:

  • Bestseller-Rang. Es verfolgt, wie Ihre Bücher bei Amazon abschneiden. Es entstand aus meinem Bedürfnis zu wissen, wie meine eigenen Bücher ankamen.
  • Basisrechner. Es generiert aus einem komplexen Formular einen Basisbericht. Wenn Sie kein Buchhalter sind, macht es keinen Sinn, aber glauben Sie mir, es ist kompliziert.
  • Probot. Conflict ein Fb- und Slack-Chatbot, der es Fachexperten ermöglichte, für die Beantwortung von Fragen bezahlt zu werden. Das struggle teuer in der Ausführung und völlig gescheitert, additionally habe ich es beendet.
  • Mehrere Versuche bei verschiedenen Projekten, die nie ausgeliefert wurden.

Diese nutzten die typischen AWS-Products and services: Lambda, DynamoDB, S3, Direction 53, SES, SQS, Cloudfront, Cloud Watch, Cognito, API Gateway, HTTP API, Amazon Aurora, SNS, WebSockets und so weiter. Darüber hinaus verwende ich bei Bedarf Produkte wie PayPal, Nginx, AdMob, Node und Let’s Encrypt.

Die Purchasers waren Bootstrap-basierte Internet-Entrance-Ends oder Chatbot-Entrance-Ends mit unterschiedlichem Ausbaugrad im Again-Finish.

Es gibt nur mich, additionally versuche ich, es so einfach wie möglich zu halten. Selten gelingt es mir. Ich bin sicher, dass ich damit allein bin.

Rein mit dem Neuen

Für Max reHIT Exercise, mein neuestes Projekt, wollte ich etwas ganz anderes ausprobieren.

Während ich festgestellt habe, dass verschiedene Teile von AWS einfach zu verwenden sind, sind andere Teile nicht so sehr. Mehr Zeit meines Lebens habe ich damit verbracht, Cognito zur Unterwerfung zu kämpfen, als ich zugeben möchte. Der Dokumentation und dem Beispielcode mangelt es, gelinde gesagt, an Qualität.

Verwenden Sie AppSync, sagen Sie? AppSync ist mir zu eigensinnig. Es schreibt die Verwendung von Toolchains, Prozessen und Diensten vor, die ich nicht gerne verwende.

Amazon sollte wiederverwendbare, intestine dokumentierte, zusammensetzbare Komponenten herstellen, anstatt alles als Framework zu verpacken. Aber sie gingen stattdessen zu Ruby on Rails. Das ist für viele Leute großartig, aber ich möchte diese Entscheidungen für mich selbst treffen.

Außerdem hatte ich die Internet-Framework-Kriege satt. CSS, Javascript, HTML – ein ständiges Schlachtfeld mit mehr Verlierern als Gewinnern.

Ich brauchte eine Veränderung. Ich brauchte ein Sabbatical vom Web.

Natives iOS mit SwiftUI

Additionally beschloss ich, etwas ganz anderes zu versuchen: natives iOS mit SwiftUI.

Meine Vermutung struggle, dass ein natives Entwicklererlebnis im Vergleich zu einem Internet + AWS-Erlebnis angenehmer wäre. Ich hatte meistens recht.

Ich bin kein absoluter iOS-Neuling. Vor vielen Monden habe ich eine einfache App mit Purpose C erstellt. Als langjähriger C++-Programmierer fand ich Purpose C sehr schwer zu verstehen, additionally eilte ich zurück ins Internet.

Später habe ich eine weitere einfache App mit Swift und UIKit erstellt. Das struggle besser. Swift struggle eine schöne, wenn auch nicht täuschend komplexe Sprache. Und ich fand UIKit mit Swift ausführlich, aber praktikabel.

Ich dachte, SwiftUI wäre das Beste aus beiden Welten. Und ich dachte, es wäre etwas, in dem ich angesichts meiner nicht gerade großartigen UI-Fähigkeiten produktiv sein könnte. Additionally nahm ich an einigen SwiftUI-Kursen teil, recherchierte und legte los.

SwiftUI ist anders

SwiftUI struggle für mich ein enormer Paradigmenwechsel. In der Webwelt bin ich nie reaktiv geworden, weil ich der Meinung struggle, dass sich die zusätzliche Komplexität nicht lohnt. Aber ich würde speedy alles tun, um die Verwendung von Xcodes Interface Builder zu vermeiden. SwiftUI ist einfach Code. Yay-Code.

SwiftUI wird dem Hype gerecht, zumindest für mich. Da ich von Anfang an kein erfahrener UIKit-Entwickler struggle, habe ich die meisten Dinge nicht übersehen, über die sich andere Entwickler beschweren.

Nicht, dass SwiftUI keine eigenen Probleme hätte. Es hat viele störende Compiler-Macken und bezaubernde weltfremde Fehler, die nur mit rituellen Opfern behoben werden können. Aber sobald Sie den Dreh raus haben, können Sie tatsächlich eine anständige Benutzeroberfläche erstellen. Und das struggle mein Ziel.

Es ist ein Zauber, ein UI-Replace basierend auf Datenänderungen zu haben. Wenn es funktioniert, ist es magisch. Aber abgesehen von den einfachen Beispielen, die die Leute gerne zeigen, erfordert es ein viel tieferes Verständnis von SwiftUI, damit es funktioniert, wenn eine App komplexer wird.

Der größte Teil der SwiftUI-Installationen ist hinter nahezu identisch klingenden Belongings-Wrappern verborgen, die selbst eine tiefere Ebene magischer Swiftismen darstellen. Wenn die Benutzeroberfläche nicht wie erwartet aktualisiert wird, kann es sehr frustrierend sein, herauszufinden, was once falsch ist, und es zu korrigieren. Die Würze muss fließen, aber die Daten nicht immer.

Erstellen einer vollständigen App

Die Komplexität von SwiftUI bestand für mich darin, zu lernen, wie guy alles in einer vollständigen Anwendung zusammenfügt.

Wie handhaben Sie den eingeloggten Modus im Vergleich zum ausgeloggten Modus? Wie gehen Sie damit um, offline zu sein? Wie gehen Sie mit Anzeigen um? Wie integrieren Sie In-App-Käufe? Wo speichern Sie Daten? Wie können Sie Daten abfragen, aktualisieren und löschen? Wie handhabt ihr Login/Logout? Wie gehen Sie mit der Synchronisierung zwischen Geräten um? Wie testen Sie in Xcode? Wie handhaben Sie das Onboarding? Wie lernen Sie all die magischen Teile der Swift + SwiftUI-Syntax? Wie validieren Sie Formulare? Wie stellen Sie Fehler dar? Wie integrieren Sie asynchrone Dienste? Wie gehen Sie mit dem Wechsel in den und aus dem Hintergrund um? Wie gehen Sie mit Push-Benachrichtigungen um? Wie navigieren Sie zwischen Ansichten? Wie passen Sie sich an unterschiedliche Bildschirmgrößen an? Wie reagieren Sie auf all diese Modi, wenn sie sich innerhalb eines reaktiven Paradigmas ändern?

In der Webwelt weiß ich, wie guy das alles macht. In SwiftUI hat es lange gedauert, bis ich alles ohne die Krücke von prozeduralem Code oder vertrauten Prozessen zum Laufen bringen konnte.

Meine Entscheidungen haben auch dazu beigetragen, die App komplizierter zu machen. Nachdem ich über ein Dutzend verschiedener Health-Apps verwendet hatte, verabscheute ich allmählich die Apps, bei denen Sie sich sofort anmelden und für Ihre „kostenlose“ Testversion im Voraus bezahlen mussten. Max reHIT Exercise funktioniert additionally perfekt ohne Anmeldung oder In-App-Kauf. Das bedeutet, all diese Modi zu handhaben. Kein Spaß.

Geht heimisch

Die Konformität mit dem nativen iOS-Ökosystem bedeutet die Verwendung von Frameworks wie In-App-Käufe, CloudKit, CoreData und Apple Signal-in. Die meisten davon hatte ich vorher noch nicht benutzt. Das struggle additionally eine ziemliche Lernkurve.

Es gibt immer eine Lernkurve. Es gibt immer Fehler. Es gibt immer Werkzeugprobleme. Es gibt immer wieder Probleme mit schlechter Dokumentation und einem speedy vollständigen Mangel an gutem Beispielcode. Ich glaube nicht, dass es als Softwareentwickler einen Weg gibt, diese Probleme zu umgehen. Aber du kannst dir dein Present aussuchen.

Ich habe Revenuecat verwendet, um bei der Zahlungsabwicklung zu helfen. Ist es einfach? Ganz und gar nicht. Ist die Integration in eine SwiftUI-App offensichtlich? Ganz und gar nicht. Dasselbe gilt für AdMob. Deshalb dauert alles so verdammt lange, bis es funktioniert.

Ein großer Fehler, den ich gemacht habe, struggle, CloudKit und CoreData nicht von Anfang an zu verwenden. Das lag daran, dass mein ursprünglicher Plan darin bestand, die App nur auf einem Gerät zum Laufen zu bringen. Ich habe das einfachste gemacht, was once funktionieren könnte, und wie üblich habe ich später dafür bezahlt.

Ich hatte CoreData verwendet, um Benutzerdaten sowie UserDefaults zu speichern. Für einen großen Datensatz, den ich gespeichert habe, habe ich eine JSON-Datei verwendet. Das hat funktioniert, struggle aber kompliziert. Alles ist kompliziert.

Später entschied ich, dass ich wollte, dass Max reHIT Exercise auf allen Geräten funktioniert. Ich habe die JSON-Datei mit CloudKit in der Cloud gespeichert. Das hat funktioniert, aber es wurde nicht synchronisiert.

Zum Synchronisieren müsste ich CoreData und CloudKit verwenden. Ich habe langsam angefangen und alles verschoben, um CoreData zu verwenden. Dann habe ich CoreData verschoben, um den PersistentCloudKitContainer zu verwenden. Wenn Sie SwiftUIs @FetchRequest in einer Ansicht verwenden, funktioniert es einfach. Du hättest mich mit einer Feder umwerfen können. Als zusätzliches Plus behält es einen lokalen Cache, sodass es offline funktioniert und neu synchronisiert, wenn die Verbindung wiederhergestellt ist. Alles synchronisiert, skaliert, ist sicher und völlig kostenlos.

Das Downside besteht darin, dass nicht der gesamte Datenzugriff innerhalb einer Ansicht erfolgt. Und das ist, wo SwiftUI herunterfällt. Es ist ansichtszentriert. Alle ordentlichen Werkzeuge funktionieren nicht außerhalb von Ansichten. Additionally musst du das herausfinden.

Natürlich gibt es Komplikationen und Tips, damit alles funktioniert. Ich konnte es normalerweise herausfinden, indem ich googelte oder Fragen auf Reddit stellte.

Würde ich es wieder tun?

Conflict die Verwendung eines nativen iOS-Ökosystems schneller und einfacher als Internet + AWS? Zunächst nicht. Die Lernkurve struggle riesig. Meine nächste App wird eine viel reibungslosere Erfahrung sein.

Ich habe jetzt wiederverwendbaren Code. Ein Pluspunkt von Swift ist, dass wiederverwendbare Komponenten durch die Sprache gefördert werden. Sie müssen nicht gegen die Umwelt kämpfen. Und da SwiftUI auf Komponenten aufgebaut ist, können Sie auch wiederverwendbare UI-Komponenten erstellen – sobald Sie die dunklen Künste der Bindung und des beobachtbaren Zustands herausgefunden haben. Ich persönlich würde mich von Protokollen in SwiftUI fernhalten. Sie verursachten mehr Compiler-Probleme als alles andere.

Der offensichtliche Nachteil ist, dass meine App nur auf iOS funktioniert. Benötigen Sie eine Website online oder eine Android-App? Kein Glück.

Für diese App dachte ich, dass es sich lohnt, einen Kompromiss einzugehen. Dies ist die Artwork von kostenpflichtiger App, die iOS-Benutzer möglicherweise wertvoll finden. Würden sie es finden und im Web verwenden? Würden sie es auf Android kaufen? Das müssen Sie von Objekt zu Objekt entscheiden.

Und wenn Apple natürlich entscheidet, dass ihnen meine App nicht gefällt, habe ich keine Möglichkeit. Ich erwarte nicht, dass das passiert. Meine Erfahrung mit der App-Überprüfung struggle im Allgemeinen positiv, aber guy weiß nie.

Was once ist mit den 30 % App Retailer-Gebühr? Wer magazine das? Bei mir werden es 15%, weil ich endlich in das App Retailer Small Trade Program aufgenommen wurde. Wenn ich jemals mehr als eine Million Greenback Umsatz professional Jahr bekomme, mache ich mir darüber Sorgen.

Ich komme mit 15 % intestine zurecht. Das local In-App-Kauf- und Anmeldeerlebnis ist so viel besser als bei PayPal und Cognito. Das Testen und Debuggen in Xcode ist nahezu unmöglich. Aber die PayPal-Integration ist auch kein Tag im Park.

Wenn Sie die Cloud-Speicher- und Synchronisierungsfunktionalität hinzufügen, denke ich, dass es Apples Kürzung wert ist. Aber wenn Sie plattformübergreifend sind und keine iOS-Dienste nutzen, kann ich sehen, wie die Kosten ärgern würden.

Würde ich wieder ein natives iOS-Ökosystem verwenden? Ja, für bestimmte Arten von Immobilien. Jetzt, wo ich weiß, was once ich tue, bin ich ziemlich produktiv.

Aber wenn ich plattformübergreifend sein müsste und ich mir kein natives Workforce für jede Plattform leisten könnte, würde ich einen anderen Weg wählen. Ein Weg wäre, verschiedene Backend-Code-Generatoren für SwiftUI zu erstellen. Ich kann sehen, dass SwiftUI verwendet wird, um Web sites und möglicherweise sogar Android-Apps zu erstellen.

Max reHIT Workout - Führt Sie durch Intervalltrainingseinheiten.  |  Produktsuche

https://aspiringsysadmin.com/