25. November 2013

Der Fall TextExpander Touch zeigt auf, wie kaputt iOS ist

iOS Icon

Was würde ich auf meinem Mac bloß ohne TextExpander machen. Kleine Schnipsel eingeben, die automatisch zu größeren Textbausteinen werden, ohne dass ich jedes Wort tippen muss. Ich glaube ich habe in meinem Review schon deutlich gemacht, wie viel Zeit TextExpander jedem, der täglich etwas mehr am Mac schreibt, ersparen kann.

Seit dem letzten größeren Update der iOS-Version (a.k.a. TextExpander Touch) und der damit einhergehenden Einführung von Fill-In-Snippets lässt sich auch auf dem Smartphone eine Menge Zeit durch TextExpander sparen. Da Apple aber keinen Bedarf für eine offizielle Schnittstelle zur besseren Kommunikation zwischen Apps sieht, mussten die Entwickler von Smile stets auf umständliche Umwege zurückgreifen, um anderen Apps die eigene Funktionalität zur Verfügung zu stellen.

Technischer Hintergrund

Auf dem Mac überwacht TextExpander die ganze Zeit im Hintergrund, was der Benutzer eintippt, und reagiert, falls es einen bekannten Textschnipsel erkennt, der dann zu seinem ausformulierten Pendant erweitert wird (z.B. wird wwwi auf meinem Rechner zu http://www.ienno.de). Auf iOS ist das in der Form nicht möglich. Könnten Apps ständig im Hintergrund aktiv sein, um Eingaben zu überwachen, würde das sehr stark am Akkuverbrauch zerren, weswegen sich Apple entschieden hat, ein solches Vorgehen nicht zu ermöglichen.

Also war Kreativität auf Seiten der Entwickler gefragt. Das Ziel lag darin einen Weg zu finden anderen Apps den Datenbestand sowie die Funktionalität von TextExpander zukommen zu lassen.

Mit einem sogenannten SDK war die Lösung für die Funktionalität schnell gefunden. Es handelt sich dabei um eine von TextExpander zur Verfügung gestellte Bibliothek, die App-Entwickler in ihre Apps einbauen können.

Problematischer ist das ganze aber für den Datenbestand. Der ist von Benutzer zu Benutzer unterschiedlich, kann also nicht – wie die Funktionalität – fest in Form eines SDK in die App programmiert werden. Der Datenbestand ist dynamisch. Apps brauchten also eine Möglichkeit, die TextExpander Daten abzufragen und sogar zu synchronisieren.

Bis iOS in Version 6 bediente sich TextExpander einer vom System zur Verfügung gestellten Zwischenablage, also einem Speicher ähnlich dem, wo von dir kopierter Text abgelegt wird. Dieser Speicher blieb auch bei Beenden von TextExpander Touch für andere Apps verfügbar und war somit der ideale Weg um den Datenbestand aus TextExpander heraus in andere Apps zu transferieren.

Alles neu mit iOS 7

Mit dem Update auf iOS 7 hat sich Apple entschieden, diese Zwischenablage abzuschaffen. Grund: Sicherheitsbedenken. Sicherlich ein Schock epischen Ausmaßes für das TextExpander-Team, was die Entwickler aber nicht davon abhielt neue Möglichkeiten zu suchen und zu finden.

Seit iOS 7 liegt der systemweite Zwischenspeicher für die TextExpander Snippets bei den Erinnerungen (a.k.a. Reminders). Da es sich hierbei um eine Apple-eigene App handelt, ist die Integration für andere Apps ein Kinderspiel und die Zugriffsrechte sind weniger restriktiv als bei anderen Apps, wodurch es sich als globaler Speicher missbrauchen lässt.

Das ist übrigens auch der Grund, warum Apps wie Byword, Drafts oder Editorial beim ersten Start Zugriff auf deine Erinnerungen verlangen. Nur über diesen Weg kommen sie an deine TextExpander-Snippets.

Erneut handelt es sich bei dieser Methode um einen Hack, der die unausreichenden Möglichkeiten zur Inter-App-Kommunikation in iOS umgeht. Vorhandene System für etwas nutzen, woür sie ursprünglich nicht gedacht waren, mag Apple nicht. Deswegen wurde kurzerhand entschieden, TextExpander-Updates nicht mehr zuzulassen, solange dieser Hack genutzt wird.

Eine Restriktion mit Folgen

Was bedeutet das? Greg Scown, Mitarbeiter des TextExpander-Touch-Teams, hat auf der Mailingliste einen Vorgeschmack gegeben:

We considered revising the SDK to incorporate code to access users’ snippet data directly on Dropbox. This is not possible due to Dropbox’s app sandboxing. We considered the Datastore, but its limit of 5MB per account is too small for many users’ TextExpander data, and this is not how it was intended to be used. Dropbox is not a viable choice for the available timeframe.

Our only alternative appears to be providing TextExpander data via x-callback-url. User action will be required to acquire and update snippet data. Each app will have its own copy of the TextExpander data, which will not sync automatically with user updates made in the TextExpander touch app. It’s not ideal, but it is within the App Store Review Guidelines. It also means users won’t lose TextExpander touch support in your app.

Die Integration wird weniger benutzerfreundlich und zwingt Entwickler erneut dazu, die TextExpander-Integration anzupassen. Bis es soweit ist, werde ich die automatischen Updates – ein Feature, das ich im CoCast vehement verteidigte – deaktivieren, um den aktuellen, funktionierenden Mechanismus nicht zu verlieren.

Es ist offensichtlich Zeit, dass sich etwas ändert, Apple

Apples Erfolg basiert auf restriktiven Systemen und hoher Kontrolle über verwendete Hard- und Software. Solange diese Restriktionen in für den Benutzer (mich!) sinnvollen Entscheidungen münden, ist das vollkommen ok. Es bedeutet weniger Freiheit, aber auch weniger Raum für Fehler und schlechte Qualität durch Drittanbieter.

Die Trefferquote der sinnvollen Entscheidungen nimmt dabei jedoch zunehmens ab. In meiner iOS–7-Wunschliste war ein wichtiger Punkt eine verbesserte Architektur zur Kommunikation der Apps untereinander. Er blieb leider unbeachtet. Wie nötig es aber gewesen wäre, zeigt TextExpander Touch.

Ein erhöhter Fokus auf Sicherheit ist zu begrüßen. Dass daraus resultierende Maßnahmen allerdings immer auf Kosten der Power User gehen, missfällt mir dann doch zunehmend. Zumal es nicht das Ding sein kann – und auch kein exotisches Szenario ist – eine Schnittstelle zur Verfügung zu stellen, durch die Daten zwischen Apps ausgetauscht werden können. Vielleicht lässt sich auf Basis der Hintergrundaktualisierungen etwas entwickeln. Auf jeden Fall muss etwas passieren.

iOS ist kaputt. Zeit es zu repearieren, Cupertino. Wenn ihr wollt, dass iOS-Geräte nicht nur für Angry Birds und WhatsApp genutzt werden, dann tut gefälligst auch was dafür. Gebt Entwicklern Werkzeuge an die Hand, mit denen Apps untereinander auch komplexe Daten austauschen können.

Dir gefällt, was du liest?
Sehr schön ;) Erzähl es doch weiter!