28 Punkte von GN⁺ 2024-01-06 | 7 Kommentare | Auf WhatsApp teilen

Neun Jahre eines Solo-Entwicklers am Texteditor „Paper“

  • 2015 war er als gewöhnlicher Full-Stack-Webentwickler weit von der Apple-Entwicklungswelt entfernt.
  • Während er einen Mac nutzte, faszinierte ihn die Apps unabhängiger Entwickler, und inspiriert von iA Writer, einem einfachen und eleganten Markdown-Editor, beschloss er, eine ähnliche App zu bauen.
  • Um einen nativen Texteditor für den Mac zu entwickeln, begann er, einen neuen Tech-Stack wie Xcode, AppKit und Objective-C zu lernen.
  • Er gab der App den Namen Paper und gestaltete den Editor als simples Rechteck, ganz im Sinne eines extremen Minimalismus.
  • 2017 erschien die Mac-App im Mac App Store, 2019 folgte die iOS-App.

Warum eine native App gewählt wurde

  • Statt einer Electron-App fiel die Wahl auf eine native App, weil das Ziel war, die bestmögliche User Experience zu bieten.
  • Native Apps sind leichtgewichtig und schnell und bieten mehr Möglichkeiten, einzigartige textbezogene Funktionen umzusetzen.

Warum Objective-C gewählt wurde

  • Als Swift 2015 noch in einem frühen Stadium war, kompilierte er jeweils ein leeres Xcode-Projekt in Objective-C und Swift und verglich die .app-Pakete.
  • Die Swift-App war durch die enthaltene Swift-Runtime etwa 5 MB groß, während die Objective-C-App mit rund 100 KB sehr leichtgewichtig war.
  • Weil er eine schlankere, besser verteilbare App wollte, entschied er sich für Objective-C.

Third-Party-Abhängigkeiten

  • Paper hat keine Third-Party-Abhängigkeiten.
  • Er hat alles selbst gebaut und sich damit einen kleinen Vorteil gegenüber Wettbewerbern verschafft.
  • So ist zum Beispiel die Markdown-Parsing-Engine von Paper maßgeschneidert und unterstützt weniger Markdown-Syntax als traditionelle Markdown-Editoren.

Vision

  • Die ursprüngliche Vision von Paper war, die Kernfunktionen von iA Writer in ein noch eleganteres und minimalistischeres Paket zu bringen.
  • Der Fokus lag darauf, Ablenkungen für Nutzer auf ein Minimum zu reduzieren und so die Konzentration zu erhöhen.
  • Mit der Zeit fand Paper seine Position im Markt, indem es den Minimalismus beibehielt und zugleich schrittweise Funktionen ergänzte.

Architektur

  • Der Code von Paper besteht aus zwei Scopes: Application Scope und Document Scope.
  • Für jeden Scope wurden Storyboards definiert, die Views und Widgets beschreiben und Module innerhalb des Scopes verbinden.
  • Module sind Objective-C-Klassen, die einen Teil der Funktionalität innerhalb der App übernehmen und Funktionen an einem Ort bündeln, der sich auf ein bestimmtes Feature bezieht.

Cross-Plattform-Code

  • AppKit und UIKit sind einander ähnlich, unterscheiden sich aber in vielen Punkten.
  • Um diese Unterschiede aufzulösen, wurden Makros und Kategorien von Objective-C genutzt.

Debugging

  • Bei Apple-Frameworks muss man eher die Dokumentation lesen als den Code, und mit Breakpoints kompilierte Stack-Traces analysieren.

Bezahlfunktionen

  • In den Jahren 2015–17 waren Abonnements noch nicht weit verbreitet, und in den App Stores waren Einmalkäufe üblich.
  • Um Bezahlfunktionen nutzerfreundlich anzubieten, wurden nur kosmetische statt funktionaler Upgrades kostenpflichtig gemacht.

Preisgestaltung

  • Anfangs startete er mit zwei Sets von Pro-Funktionen zu je 5 Dollar als Einmalkauf.
  • Heute ist das Modell als ein einziges Paket für 10 Dollar pro Monat oder 100 Dollar lebenslang bepreist.
  • Durch Preisexperimente stellte er fest, dass Nutzer bereit sind, für die App eines unbekannten Entwicklers bis zu 100 Dollar zu zahlen.

Schwierige Punkte

  • Texteditoren sind komplex, und mit jedem OS-Update kommen neue Methoden zum Einfügen, Aktualisieren und Interagieren mit Text hinzu.

Gimmicks

  • Es wurden unterhaltsame Funktionen hinzugefügt, etwa ein von der App Things inspirierter Window-Resize-Bounce.

Meinung von GN⁺:

  1. Innovativer Ansatz: Beeindruckend ist, dass der Entwickler Paper trotz fehlender Erfahrung in der nativen App-Entwicklung mit klarer Priorität auf die User Experience gebaut hat. Das zeigt, wie wichtig nutzerzentriertes Design in der Softwareentwicklung ist.
  2. Lernen und Wachstum: Der Prozess, einen neuen Tech-Stack zu erlernen und daraus ein Produkt zu schaffen, kann auch für angehende Software Engineers inspirierend sein. Er unterstreicht, dass kontinuierliches Lernen und neue Herausforderungen essenziell für die Entwicklung als Entwickler sind.
  3. Die Bedeutung der User Experience: Einer der Erfolgsfaktoren von Paper ist die sorgfältige Aufmerksamkeit für die User Experience und der Fokus auf Minimalismus. Das zeigt, wie wichtig es ist zu verstehen, was Nutzer wirklich wollen, und dies im Produkt umzusetzen.

7 Kommentare

 
woung717 2024-01-06

Die meisten Apple-Entwicklungsdokumente sind nicht besonders benutzerfreundlich, sodass man die Dokumentation gründlich durchforsten muss ... und wenn dann immer noch Informationen fehlen, muss man oft die SDK-Interfaces durchgehen ... In einem anderen Sinne ist das wirklich bewundernswert.

 
ndrgrd 2024-01-06

Ich habe mich gefragt, was mit „kosmetischem Upgrade“ gemeint ist, aber im Original steht offenbar „visual changes“.
Verwendet man das Wort „schminkartig“ überhaupt? Ich habe es zum ersten Mal gesehen.

 
geeker 2024-01-08

Da neo ein AI-Bot ist, ist es wohl eine ziemlich mechanische Übersetzung geworden, haha.

 
apkas 2024-01-07

Im Original ist es eher ein cosmetic upgrade.

 
cosine20 2024-01-08

Dann wirkt ein ästhetisches Upgrade wohl etwas besser ...

 
ragingwind 2024-01-06

Das ist wirklich ein Entwickler, der als Vorbild taugt.

 
GN⁺ 2024-01-06
Hacker-News-Kommentare
  • "Die sorgfältige Aufmerksamkeit für die Randbereiche ist geradezu magisch"

    • Nutzer bemerken die feinen Details einer App anfangs vielleicht nicht, entdecken sie aber mit der Zeit.
    • Solche sorgfältig hinzugefügten Funktionen sorgen dafür, dass Nutzer eine App nicht nur mögen, sondern lieben.
    • Sie vermitteln das Gefühl, dass der Entwickler die Nutzer versteht und das Produkt gut gepflegt wird.
    • Als Beispiel wird die App Procreate genannt, die für ihre schlanke Benutzeroberfläche (UI) gelobt wird und zugleich viele entdeckbare versteckte Funktionen bietet.
  • "Ein großartiger Text, basierend auf 15 Jahren Erfahrung als iOS-App-Entwickler"

    • Es wird erwähnt, dass die Entscheidungen, bei nativer Entwicklung zu bleiben, Abhängigkeiten von Drittanbietern auszuschließen und Objective-C zu verwenden, gut waren.
    • Zwar erfolgte später der Wechsel zu Swift, doch manchmal werden die Vorzüge von Objective-C vermisst.
    • Die App wurde heruntergeladen und ausprobiert, und die kleinen Hinweise in der Menüleiste gefielen.
  • "Die Möglichkeit einer Entwicklung mit wenigen oder ganz ohne Abhängigkeiten auf Apple-Plattformen"

    • Dank des Umfangs und der Tiefe von AppKit/UIKit lassen sich auch ohne Drittanbieter-Komponenten praktisch ausgereifte Apps erstellen.
    • Es wird angemerkt, dass Apples Frameworks auch im Vergleich zu anderen Frameworks wie Qt konkurrenzfähig sind.
  • "Die Weiterentwicklung von Swift und Spekulationen über Plattform-Integration oder Binäroptimierung"

    • Seit Swift 5 ist die ABI (Application Binary Interface) stabil.
    • Es wird gesagt, dass die Entscheidung, seit 2014 ausschließlich Swift zu verwenden, gut funktioniert.
    • Bei SwiftUI besteht die Ansicht, dass es sich noch deutlich weiterentwickeln muss, um UIKit/AppKit zu ersetzen.
  • "Misstrauen bei der Wahl von Abhängigkeiten und die Bedeutung des Lernens"

    • Es wird eine Abneigung dagegen ausgedrückt, noch vor dem Schreiben von Code externe Pakete und Bibliotheken hinzuzufügen.
    • Der Ansatz des Autors, die Nachteile des Apple-Ökosystems in eine positive Lernerfahrung umzuwandeln, wird hoch geschätzt.
  • "Lernmaterialien und Empfehlungen zu AppKit und Mac-Entwicklung gesucht"

    • Es wird erwähnt, dass es schwierig ist, Informationen zur Mac-Entwicklung zu finden.
    • Es wird beschrieben, dass Apples aktuelle Dokumentation unzureichend ist und ältere Dokumentation nicht für Swift aktualisiert wurde, sodass man sich auf die Autovervollständigung von Xcode verlassen muss.
  • "Respekt für die Liebe zum Detail und die handwerkliche Qualität"

    • Die sorgfältige Aufmerksamkeit und das handwerkliche Können des Autors werden hoch gelobt; der Text wird als schön und inspirierend bezeichnet.
  • "Ein interessanter Hinweis auf die Drehgeste zum Rückgängigmachen"

    • Es wird erwähnt, dass die Geste an die Szenen erinnert, in denen die Hauptfigur im Film "Doctor Strange" die Zeit zurück- und wieder vorwärtsdreht.
  • "Lob für den Minimalismus von Blog und App"

    • Es wird die Freude daran ausgedrückt, eine selbst entwickelte App zu benutzen, und gesagt, dass vim-motions oder die Nutzung von Neovim ein ähnliches Gefühl auslösen.
  • "Überraschung über den mangelnden Zugang zum SDK-Code im Apple-Entwicklungsökosystem"

    • Es wird Verwunderung darüber geäußert, dass man sich den Assembler-Code direkt ansehen müsse, und um Bestätigung dazu gebeten.