Die iOS App-Sandbox: Ab jetzt muss der App-Enwickler genauer hinschauen

Bis zur Veröffentlichung von iOS 5 hat ein iOS-Entwickler keine all zu große Überlegungen treffen müssen wo in seiner App-Sandbox (auf dem Dateisystem) der „richtige“ Speicherort seiner App-Daten (Bilder, XMLs, Audio/Video, SQL-DBs, etc.) ist. Meist war der <APPHOME>/Documents Ordner die erste Wahl.

Seit dem Release von iOS 5 hat sich jedoch einiges geändert. Apple hat seinen Daten-Synchronisationsdienst iCloud tief in das Betriebssystem integriert, so dass von heute auf morgen plötzlich jede App direkt oder indirekt von diesem Dienst bzw. dessen Auswirkungen betroffen ist. Gemeint ist hier nicht iCloud Documents (ein optionales Entwicklerfeature wobei die App ihre Dokumente und Einstellungen mit Apples Servern abgleichen kann, um sie beispielsweise später auf einem anderen Gerät zur Verfügung stehen zu haben), sondern iCloud Backup (ein User-Feature von iOS Geräten, das dem Benutzer die Möglichkeit gibt, seine regelmäßigen Geräte-Backups anstatt über iTunes lieber über iCloud vornehmen zu lassen). Mit dieser gewählten Option werden somit jegliche auf dem Gerät gespeicherten Daten (inkl. der gespeicherten App-Daten) regelmäßig auf Apples Server hochgeladen – ein enormes Datenaufkommen, das die Apple-Server da zu bewältigen haben, wenn man bedenkt wieviele iOS-Geräte in heutiger Zeit verkauft/eingesetzt werden.

Um die 500 Millionen $ teure Investition (die iCloud Serverfarm) etwas zu „schonen“, fordert Apple mittlerweile von den iOS-Entwicklern mehr Disziplin im Hinblick auf die Nutzung des Dateisystems in ihren Apps. Die Nutzung des beliebten <APPHOME>/Documents Ordners muss nun wohlüberlegt und abgewogen werden, da dessen Inhalt immer Bestandteil von Geräte-Backups ist (und auch immer war). Bisher hat man als Benutzer bei einem Geräte-Backup lediglich den eigenen PC/Mac über den iTunes-Weg mit den vielen zu sichernden Daten seines 8/16/32/64-Gigabyte kräftigen iDevices „belastet“, heute jedoch geht es mitunter um teure Bandbreite und Speicher von Apple (den es zu schonen gilt!). Apple meint es mit dieser Sache ziemlich ernst, so dass aktuell Apps (und App-Updates!) durch den AppStore-Review-Prozess abgewiesen werden, die nach Meinung des Reviewers zu viele, zu große oder auch jederzeit wiederherstellbare Serverdaten im „heiligen“ <APPHOME>/Documents speichern. Konkrete alternative (nicht vom Backup betroffene) Ordner werden in den abweisenden App-Reviewer-eMails auch genannt, z.B: <APPHOME>/Library/Caches.

Auch die alternativ genannten Ordner sollten dem geneigten iOS-Entwickler bekannt sein, doch haben die verschiedenen Ordner in der App-Sandbox neben Backup-Implikationen auch andere Eigenschaften (die evtl. nicht gewollt oder gar völlig unbekannt sind). Apple erwähnt diese Ordnereigenschaften leider nicht an einer gut einsehbaren zentralen Stelle im Developer-Program, sondern wie so oft in vielen verstreuten Guides, FAQs und Klassen-Dokumentationen. Dabei wäre eine genaue Kenntnis dieser Ordnereigenschaften für jeden iOS-Entwickler essenziell.

In der folgenden Tabelle wurde versucht die verschiedenen Sandbox-Ordner mit deren System-Eigenschaften zu veranschaulichen. Zu den Eigenschaften gehören, neben der erwähnten Tatsache dass ein Ordnerinhalt bei einem Backup involviert ist:

  • iTunes Documents: Die Möglichkeit Dateien zwischen der App und iTunes (PC/Mac) sichtbar und austauschbar zu machen, wenn es der Entwickler explizit einstellt. (sharing)
  • AppUpdate/FileMoving: Ordnerinhalte die bei einer Installation eines App-Updates in die „neue“ App-Version garantiert mit übernommen werden. (verschieben)
  • System-Purging: Die Tatsache dass der Ordnerinhalt vom Betriebssystem gelöscht werden kann, wenn der Speicherplatz auf dem Gerät knapp wird.

 

sandbox filesystem: iTunes/iCloud backup iTunes Documents/File sharing app-update file-moving system-purging on low-storage-situations
critical data: <applicationhome>/Documents X X X
temporary data: <applicationhome>/tmp X
cached data: <applicationhome>/Library/Caches X X
custom offline data: <applicationhome>/Library/xyz (e.g. „Private Documents“) X X

Für die iOS-Version 5.0.1 hat Apple ein spezielles Attribut eingeführt, das die Entwickler den Dateien und Ordnern zuweisen können (programmatisch in der App) um diejenigen zu kennzeichnen, die explizit vom Backup ausgeschlossen werden sollen (unabhängig davon ob die Dateien/Ordner bereits in einem Ordner sind der normalerweise vom Backup betroffen ist oder nicht).

 
Ab iOS 5.1 sollte das Attribut jedoch mit dieser neuen „high-level“ API gesetzt werden:

1 Antwort

Trackbacks & Pingbacks

  1. […] an. Das deutsche Entwickler-Blog “sic-software” beschreibt in seinem Artikel “Die iOS App-Sandbox: Ab jetzt muss der App-Enwickler genauer hinschauen” die eingeführten Änderungen jetzt noch mal detailliert. Vor allem diese Tabelle lohnt den […]

Dein Kommentar

Want to join the discussion?
Feel free to contribute!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

  Newsletter abonnieren (Jederzeit wieder abbestellbar)