Hallo Leute. Ich bins wieder: Richard der Ranter. Seit einigen Jahren
entwickle ich Software für OS X und iOS. Das ist total cool aber
dennoch gibt es oft Dinge, die mich total depressiv machen. Heute
möchte ich euch über einen sehr aktuellen Aspekt berichten, der nicht
nur bei mir zu einem erhöhten Medikamentenkonsum führt. Jetzt habe ich
den Spannungsbogen aufgebaut und dieser, eigentlich sinnlose Satz,
überspannt den Spannungsbogen jetzt hoffentlich nicht. Ach und um es
noch spannender zu machen: Dieser Artikel enthält eine Anleitung, wie
man an die Passwörter seiner Freunde/Kollegen kommt – mit nur 5
Minuten Arbeit. Ok ok. Ich komme zur Sache. Heute spreche ich über die
von Apple mit Lion eingeführte “App Sandbox”. Um zu verstehen, was
dieser “Sandkasten” ist, schaut man sich am besten an, in welcher
Umgebung OS X Apps aktuell laufen. Eine OS X App läuft mit den Rechten
des Benutzers, der sie startet. Dies bedeutet, dass eine App alles
kann und darf, was der Benutzer auch kann und darf. Welche
Implikationen hat dies? Das macht man sich am besten an ein paar
Beispielen klar:

- Ein Benutzer hat Lese- und Schreibrechte in seinem Userverzeichnis.
Eine App hat dann folglich auch Lese- und Schreibrechte in dem
Userverzeichnis. Dies bedeutet, dass eine App zum Beispiel das
komplette Userverzeichnis löschen kann. Hier ist wichtig: Die App muss
nicht unbedingt ein Virus sein. Ein schlechter Programmierer kann in
die App einen Fehler einbauen, der dazu führt, dass die Apps alle
möglichen Dateien löscht. Davor muss der Benutzer geschützt werden.

- Ein Benutzer kann mit Spotlight seine gesamten Daten durchsuchen.
Folglich kann dies eine App auch. Jetzt ist folgendes Szenario
denkbar: Eine App nutzt Spotlight, um im “Hintergrund” nach allen
Dateien zu suchen, die das Wort “Passwort” enthalten. Die gefundenen
Dateien werden dann von der App komprimiert und an den Entwickler
geschickt. So einfach kann es sein eure Logindaten inkl. Passwort zu
bekommen. Man muss außerdem kein Entwickler sein, um einen Schädling
dieser Güte zu “entwickeln”. Mit dem Tool “Automator” von Apple kann
man sich das eben beschriebene Szenario innerhalb von fünf Minuten
zusammenklicken. Davor muss der Benutzer geschützt werden.

Das Problem sollte klar sein: Eine App soll in den seltensten Fällen
die gleichen Rechte haben wie der Anwender. Apple löst dies mit der
Sandbox. Ab November muss jede App, die weiterhin im App Store
gelistet sein möchte, Sandboxkompatibel sein. Dies bedeutet, dass jede
App ihre komplett eigene Umgebung bekommt, die von der Umgebung des
Benutzters weitestgehend abgeschottet ist. Jetzt könnte man denken:
“Wow. Hört sich super an.”. Aber in meinen Augen geht Apple hierbei
etwas zu schnell an die Sache. Beispiele:

- Eine App, die in einer Sandbox läuft kann zwar die Spotlight API
nutzen – allerdings durchsucht Spotlight dann nur die Sandbox der App
und nicht die gesamte Festplatte. Es gibt eine ganze Reihe an Apps,
die damit Probleme haben werden: HoudahSpot und Tembo sind derartige
Apps. Die beiden Apps sind im Prinzip “Front-Ends” für Spotlight -
nutzen Spotlight und haben allerdings eine UI, die eher dem Pro-User
entgegenkommt. Diese Apps sind konzeptionell nicht Sandbox-kompatibel.

- Eine App, die in der Sandbox läuft darf keine Apple Events mehr
versenden. “WHO CARES!? AND WTF ARE APPLE EVENTS – DUDE?”. Einfach
gesagt: Apple Script basiert auf Apple Events und viele Anwendungen
nutzen Apple Script um mit Anwendungen zu kommunizieren, für die es
keine API gibt. Will eine App zum Beispiel an iPhoto ein Bild zum
Importieren schicken, so wird dies in der Regel mit einem Apple Script
gemacht. In einer Sandbox: Nicht möglich. iTunes hat ebenfalls keine
API. Es gibt zahllose Apps, die allerhand nützlicher Dinge mit iTunes
machen: Cover-Suche, Metadaten-Suche etc… alles nichtmehr möglich.

Aber halt: Als Entwickler kann man bei Apple eine Ausnahme beantragen.
Also alles garnicht so schlimm? Übertreibt der Richard wieder, weil er
in einer depressiven Phase ist und nicht klar denken kann? Nein. Bei
der Beantragung der Ausnahme muss man technisch begründen und klar
machen, wieso man diese Ausnahme benötigt. Außerdem wird diese
Ausnahme von Apple offiziell “temporary exception” – also “temporäre
Ausnahme” genannt. Man nimmt jetzt an, dass es diese Ausnahme bald
nichtmehr geben wird. Was aber “temporary” genau bedeutet ist unklar.
Es gibt sicherlich viele Entwickler, die mit weiteren Entwicklungen
jetzt erstmal zurückhalten, bis das alles geklärt ist.

Übrigens: Auf dem iPhone laufen Apps schon seit je her in einer
Sandbox. Macht dies die Sache weniger “bedrohlich”? Nein. Auf OS X
gibt es erst seit letztem Oktober einen App Store. Davor hat man
zahlreiche Jahre ohne Einschränkungen entwickelt. Von daher trifft
diese Umstellung die Entwickler besonders hart. Die Sandbox-Idee ist
grundsätzlich gut. Will ich auch haben! Aber Apple — bitte mit ein
wenig mehr Rücksicht.

1. Apple: Mach klar, was “temporary” bedeutet.
2. Apple: Gib den Entwicklern ein wenig mehr Zeit.
3. Apple: Biete für deine eigenen Apps vernünftige APIs an – dann
benötigt man auch keine Apple Events/Apple Script.

So. Fertig für heute. Deckel zu. Sorry für den länglichen Post. War mal nötig.

Entwickler “Richard” hat uns gebeten, ihm unseren Blog für einige Gastbeiträge zur Verfügung zu stellen, da er selber nur schlecht darüber schreiben kann. Hier seine Therapie-Bühne:

Mein Name ist Richard (langjähriger OS X und iOS Entwickler) und ich “rante” gerne. Auf MacVersus darf ich meine Rants in Form von mehr oder weniger regelmäßigen Beiträgen veröffentlichen. Ich hoffe, dass dies eine gewisse positive therapeutische Wirkung hat. Ranten werde ich insbesondere über Apple – und zwar aus Sicht eines Entwicklers. Das kann für euch total langweilig werden – aber das ist mir egal. Schließlich ist das meine Therapie – ihr seid mein Therapeut und daher dürft ihr eure Langeweile nicht zeigen.

Ich habe sehr viel zu ranten. Beginnen möchte ich nicht mit dem schlimmsten Rant sondern mit dem aktuellsten. Man muss ja zunächst zu seinem Therapeuten eine gewisse Beziehung aufbauen, bis man mit den ganz schlimmen Dingen rausrückt. Also los:

Wie ihr vielleicht wisst sind alle Apps, die man aus den App Stores laden kann signiert. Im Prinzip ist das ja auch ganz toll – und zwar für alle: Für euch, für Apple und für mich. Allerdings macht es Apple einem nicht wirklich leicht seine Anwendung zu signieren. Um eine Anwendung zu signieren muss man (einmalig) ca. 200 mal klicken, drei mal seine E-Mailaddresse eingeben, vier verschiedene Programme nutzten (Xcode, System Preferences, Keychain, Safari) mehrere Male den Namen der Anwendung eingeben, sich irgendwelche Zahlen ausdenken, … Das natürlich alles in der richtigen Reihenfolge. Dabei kann natürlich sehr viel schief gehen. Und es geht viel schief dabei. Dies zeigt auch folgendes: Sucht man im offiziellen Entwicklerforum von Apple nach “code singnig”, so erhält man 146 Ergebnisse. Sucht man hingegen nach “NSTextView” (eine Komponente, die es schon seit OS X 10.0 gibt und millionenfach genutzt wird), so stößt man lediglich auf 57 Threads.

Das gesamte Signieren ist außerdem nicht sehr “stabil”. Oft schlägt es fehl und man wird mit kryptischen Fehlermeldungen konfrontiert. Außerdem kann es passieren, dass Xcode sagt: “Alles super – signieren hat geklappt”, man daraufhin seine App submitted und Apple sich fünf Tage später meldet und sagt, es gäbe ein Problem mit der Signatur: APP REJECTED.

Es könnte doch alles so einfach sein. Schaut euch doch mal das Konzept von iCloud an. Ihr meldet euch da geschwind an und schwups sind eure Dokumente in der Cloud und alles synchronisiert sich wie von selbst. Apple hat hier etwas viel komplexeres als das Signieren von Apps gelöst und es geschafft die Komplexität zu verstecken. Apple – bitte – wirf einfach mal n paar Millionen auf den ganzen Signierungsworkflow und Milliarden Entwickler werden es dir danken.

Wieso ist das jetzt aber so aktuell? Mit Lion muss man Xcode neu installieren und es gibt aktuell Probleme mit dem Signieren von Code. Man erhält wieder vermehrt wirre  Fehlermeldungen, die einen in den Wahnsinn treiben, wenn man nicht schon wie ich wahnsinnig ist.

Tschüss. Bis zum nächsten Gesprächstermin.

Bild von wayodd.com