Bis Anfang Oktober war Algebra eine Website. Man konnte sie auf dem Handy öffnen, aber es blieb eine Website: oben die Leiste des Browsers, kein Symbol auf dem Startbildschirm und keine Chance, dort zu funktionieren, wo es keinen Empfang gibt. Am 5. Oktober habe ich geändert, wie ich damit Geld verdienen will. Statt vor allem Unterrichtsstunden zu verkaufen, setze ich auf Premium, ein Abo, in dem die Plattform den Schüler selbst durch den Stoff führt (mehr dazu im nächsten Beitrag). Dafür brauche ich eine App in Google Play und im App Store, nicht nur eine Website, und so wurde aus der App-Idee für irgendwann ein Projekt für jetzt.
Eine Website, zwei Verpackungen
Ich wollte nicht alles zweimal bauen. Die Bildschirme, die ein Schüler auf der Website sieht, sind dieselben geblieben, und die Verpackung heißt Capacitor, ein Werkzeug, das eine fertige Website in eine App für Android und iOS packt. Die Dateien der Website reisen in der App mit, während Konto, Fortschritt und Ergebnisse vom selben Server kommen wie auf der Website. Unterschiede gibt es dort, wo das Handy sie verlangt: Statt eines Seitenmenüs gibt es unten eine Leiste mit Tabs (Heute, Lernen, Bögen, Spiele und Konto), die Spiele laufen offline, und Prüfungsbögen lassen sich aufs Handy laden und im Bus lösen, in dem der Empfang ständig abreißt. Der komplette Satz Bögen belegt etwa hundert Megabyte.
Eine App gab es schon einmal, nur enthielt sie allein die Spielhalle und hat nie jemanden erreicht. Diesmal habe ich von vorn und mit der ganzen Plattform angefangen. Die Android-Version habe ich auf meinem eigenen Rechner gebaut und auf einem Emulator getestet, also einem vom Computer simulierten Handy, auf dem sich sechs aufgezeichnete Szenarien selbst durch die App klicken und prüfen, ob alles an seinem Platz ist.
Apple will einen Mac
Beim iPhone ist es schwieriger, denn eine iOS-App lässt sich nur in Xcode bauen, dem Programm von Apple, und Xcode läuft nur auf dem Mac. Einen Mac habe ich nicht, und für eine einzige App wollte ich auch keinen kaufen. Die Lösung hieß Codemagic, ein Dienst, der für die Dauer des Builds in der Cloud eine virtuelle Maschine mit Apples Betriebssystem startet. Die gesamte Konfiguration liegt in einer einzigen Datei in meinem Repository, sodass mir nur ein paar Klicks bleiben: Version wählen, starten, und nach etwa sechs Minuten habe ich die fertige App-Datei. Der kostenlose Tarif bietet 500 Minuten einer solchen Maschine im Monat, was bei meinem Tempo mehr als genug ist.
Einen Haken gab es allerdings. Die Datei aus Codemagic ist nicht signiert, und ein iPhone startet keine App, die niemand signiert hat. Für die Signatur braucht man normalerweise ein kostenpflichtiges Apple-Entwicklerkonto für 99 Dollar im Jahr, das ich noch nicht habe, also suchte ich einen Weg, der mit einem gewöhnlichen, kostenlosen Apple-Konto auskommt.
Von Linux aus, per Kabel
Der erste Plan sah vor, den letzten Schritt unter Windows zu erledigen, denn das bekannteste Programm zum Installieren solcher Apps, Sideloadly, braucht iTunes, und iTunes gibt es unter Linux nicht. Zu Windows wollte ich nicht zurück, also griff ich zu iloader, einem weniger bekannten Programm, das unter Linux dasselbe erledigt: Es meldet sich mit meinem Apple-Konto an, signiert die App selbst, trägt das Handy im Konto ein und spielt die App per Kabel auf.
Hängen geblieben bin ich schon bei der Anmeldung. Linux kann sich bei Apples Servern nicht so ausweisen wie ein Mac, deshalb nutzt iloader einen öffentlichen Vermittler, der an seiner Stelle antwortet, als wäre er ein Mac. Der erste dieser Server brach die Verbindung immer wieder ab, was eine Weile nach einem Problem mit meinem Konto aussah. Erst nach dem Wechsel des Servers in den Einstellungen klappte die Anmeldung, und am Abend des 5. Oktober lief Algebra auf meinem iPhone 16e, kurz darauf auch auf dem iPad Pro.
Auf dem Gerät selbst blieben noch zwei Schritte. Beim ersten Start warnt iOS vor einem nicht vertrauenswürdigen Entwickler, also muss man in die Einstellungen, dann zu Allgemein und VPN und Geräteverwaltung, und dem eigenen Konto von Hand vertrauen. Dazu kommt der Entwicklermodus, der in den Datenschutzeinstellungen eingeschaltet wird und einen Neustart des Handys verlangt.
Sieben Tage
Ein kostenloses Apple-Konto hat seinen Preis, nur bezahlt man ihn mit Zeit: Die Signatur läuft nach sieben Tagen ab, und die App lässt sich nicht mehr öffnen. In der Praxis hieße das, das Handy jede Woche an den Rechner zu hängen. Um das zu vermeiden, habe ich am 7. Oktober auf beiden Geräten SideStore installiert, eine Art kostenlosen Store für Apps außerhalb des App Store, der die Signatur direkt vom Handy aus erneuert. Dabei hilft ihm LocalDevVPN, eine kleine App aus dem App Store, über die SideStore mit dem Handy spricht, als hinge es per Kabel am Computer.
Auch die Hardware hatte ein Wörtchen mitzureden. Irgendwann sah iloader das Handy nicht mehr, und die Datenübertragung brach mittendrin ab. Geholfen hat, das Kabel in einen anderen Anschluss am Rechner zu stecken.
Korrekturen ohne neuen Build
Am meisten Zeit spart mir etwas, das man von außen gar nicht sieht. Seit der zweiten Version aktualisiert sich die App selbst: Beim Öffnen prüft sie, ob auf dem Server neuere Bildschirme warten, lädt sie im Hintergrund und wechselt zu ihnen, sobald sie vom Bildschirm verschwindet. Das Paket wiegt etwa 18 MB und entsteht bei jeder Veröffentlichung der Website, sodass ein korrigierter Text oder Knopf noch am selben Tag auf dem Handy ist, ohne Codemagic und ohne Kabel. Eine neue Version in der Cloud baue ich nur, wenn sich etwas an der App selbst ändert, etwa das Symbol oder die Berechtigung für die Kamera.
Eine App ist keine Website im Rahmen
Als die App lief, war es Zeit zu prüfen, ob man sie bequem benutzen kann. Die Bildschirme habe ich am Rechner in WebKit durchgesehen, der Engine, auf der Safari läuft, mit Testkonten für Schüler, Nachhilfelehrer und Administrator. Dabei kam eine Menge Kleinkram zutage: Knöpfe, die für den Finger zu klein waren (jetzt haben sie mindestens 44 Punkte, wie Apple es empfiehlt), ein Bogen, der sich nicht scrollen ließ, und ein Chatfenster, das über den Bildschirmrand hinausragte. Die Spiele im Tab Lernen steckten in einem etwa 350 Pixel hohen Kästchen, in dem man scrollen musste, deshalb bekamen sie am 7. Oktober die volle Höhe zwischen den Tabs und der unteren Leiste.
Eine Änderung ergab sich direkt daraus, wie ich die App selbst benutzt habe. Anfangs öffneten sich manche Seiten, etwa Angebot, Kontakt oder Buchung, im Browser außerhalb der App, und das hat mir überhaupt nicht gefallen. Seit dem 6. Oktober passt die ganze Website in die App, einschließlich des Unterrichtsraums mit Kamera und Mikrofon und des Bereichs für Nachhilfelehrer, und nur die Zahlung und WhatsApp führen noch hinaus. Heute Morgen sind außerdem acht Screenshots für die Einträge in Google Play und im App Store entstanden, denn im Store muss sich eine App irgendwie vorstellen.



Was es gekostet hat
Bisher nichts. Codemagic im kostenlosen Tarif, iloader, SideStore und LocalDevVPN kosten nichts, und für die Signatur reicht ein gewöhnliches Apple-Konto. Bezahlt wird mit Einschränkungen: Auf ein Gerät passen höchstens drei so installierte Apps, und der Kauf von Premium in der App funktioniert nicht, weil Zahlungen in iPhone-Apps ausschließlich über den App Store laufen. Ein Konto mit Premium, das auf der Website gekauft wurde, funktioniert in der App ganz normal.
Dieser Weg reicht für meine eigenen Tests, aber nicht dafür, dass ein fremder Schüler die App installiert. Dazu braucht es ein bezahltes Entwicklerkonto, dann TestFlight, Apples offizielle Test-App, und am Ende die Prüfung für den App Store. Das ist aber Thema des nächsten Beitrags, darüber, womit ich gerade ringe.

