[toc]
Vor Kurzem bin ich in die Bedrängnis gekommen, meine iPhone “Library Persistent ID” wieherherstellen zu müssen, nachdem ich meinen bisher für iTunes genutzten Laptop gewechselt habe, ohne davor ein Backup von iTunes zu machen. Bei der Library Persistent ID handelt es sich um den eindeutigen Schlüssel, der bei der Erstaktivierung jedes iPhones über iTunes erstellt wird und das iPhone an das jeweilige iTunes-Account bindet. Der Schlüssel wird z.B. benötigt um Apps oder Musik synchronisieren zu können. Falls er nicht übereinstimmt, bekommt man die Nachricht, dass iPhone sei schon mit einem anderen Rechner synchronisiert, worauf die Synchronisation abbricht. Sofern man den Rechner, mit dem man das iPhone erstmalig aktiviert hat, noch parat hat, ist die Wiederherstellung der ID kein allzu großes Problem. Schwieriger wird es allerdings, wenn der Rechner wie in meinem Fall nicht mehr verfügbar ist. Mit ein paar kleinen Hilfsmitteln ist allerdings auch das gut machbar. Hier die erforderlichen Schritte[ref]Die Anleitung basiert u.a. auf dem Forenbeitrag http://modmyi.com/forums/iphone-ipod-touch-sdk-development-discussion/252971-iphone-itunes-library-persistent-id-match-2.html sowie auf den Blogposts http://tarrinho.blog.com/2010/06/16/obtain-library-persistent-id-from-iphone/ und http://www.iclarified.com/entry/index.php?enid=2137.[/ref]:
Installation der benötigten Software
Update 25.11.2011: Mit aktuellen Versionen von iTunes (> 10.4) funktioniert der iPhoneBrowser unter Umständen nicht mehr[ref]Problem ist hier primär eine neue Version der iTunesMobileDevice.dll, wie beispielsweise der Diskussion auf http://code.google.com/p/iphonebrowser/issues/detail?id=196 zu entnehmen ist. Allerdings funktionieren die verschiedenen in diesem Thread beschriebenen Lösungsansätze leider ebenfalls nicht mehr für iOS ab Version 5 bzw. iTunes ab Version 10.5.[/ref]. Sinnvollerweise sollte deshalb direkt der Weg über die Software i-FunBox (s.u.) verwendet werden
iPhoneBrowser (für iTunes < 10.4)
Zur Kommunikation mit dem iPhone wird zunächst der iPhoneBrowser[ref]Auf der Projektseite http://code.google.com/p/iphonebrowser/ steht zwar wörtlich, das Tool sei eine “Windows XP/Vista/Windows 7 GUI for manipulating files on the jailbroken iPhone”, die Software funktioniert allerdings auch einwandfrei mit “normalen” iPhones ohne Jailbreak.[/ref] benötigt, der bei Google Code als Open Source Tool zur Verfügung steht: http://code.google.com/p/iphonebrowser/downloads/list. Zum Entstehungszeitpunkt dieses Artikels ist Version 1.93 aktuell, die hier direkt heruntergeladen werden kann. Nach dem Download muss der iPhoneBrowser zunächst installiert werden, anschließend sieht das Ganze dann so aus:
[nggtags gallery=iPhoneBrowser+Benutzeroberfläche]
i-FunBox (für iTunes >= 10.4)
Zur Kommunikation mit iPhones bei Verwendung neuerer Firmware- bzw. iTunes-Versionen kann u.a. die Software i-FunBox verwendet werden. Zum Entstehungszeitpunkt dieses Artikels ist Version 1.6.658 aktuell, die auf der Website der Entwickler heruntergeladen werden kann. Nach dem Download muss die i-FunBox zunächst installiert werden, anschließend sieht das Ganze dann so aus:
[nggtags gallery=i-FunBox+Benutzeroberfläche]
Hex-Editor
Zusätzlich ist noch ein Hex-Editor erforderlich. Falls man wie ich nicht zu der Personengruppe gehört, die so etwas standardmäßig zum Arbeiten verwendet, muss man diesen ebenfalls zunächst herunterladen. Schöne Open Source Tools sind mir hier leider nicht bekannt, aber zumindest gibt es mehrere sehr brauchbare Freeware-Hex-Editoren[ref]Einen ganz guten Überblick hierzu liefert die englischsprachige Wikipedia unter http://en.wikipedia.org/wiki/Comparison_of_hex_editors[/ref], darunter u.a. XVI32 und HxD.
[nggtags gallery=XVID32,HxD]
Nachdem man XVID32 nicht extra installieren muss, sondern direkt nach dem Entpacken starten kann, dient er im Folgenden für Screenshots. Prinzipiell sollten die nächsten Schritte aber auch in jedem anderen Hex-Editor nachvollzogen werden können.
Speichern der iTunesPrefs
Nach dem Starten des iPhoneBrowsers bzw. der i-FunBox muss das iPhone mit dem Rechner verbunden werden. Die gesuchte Datei befindet sich unter [root]\iTunes_Control\iTunes\ und heißt “iTunesPrefs” ohne Dateiendung. Wichtig: Da man als Windows-Benutzer vermutlich dazu neigen würde, aufgrund der dort verfügbaren Auto-Vorschau die Datei “iTunesPrefs.plist” auszuwählen, bitte hier besonders auf die Auswahl ohne Dateiendung gemäß folgenden Screenshots achten:
[singlepic id=269 w=618 h= float=]
[singlepic id=730 w=618 h= float=]
Die Datei speichern wir uns per Rechtsklick und “Save as …” an eine Stelle, an der wir sie wiederfinden und öffnen Sie anschließend in XVID32.
Auslesen der Library Persistent ID in XVID32
Bevor die benötigte Zeichenfolge ausgelesen werden kann, sollte zunächst durch Verändern der Fenstergröße die Anzahl der angezeigten Spalten in XVID32 wie im Screenshot auf 20 eingestellt werden, damit die Library ID einfacher identifiziert werden kann.
[singlepic id=270 w=618 h= float=]
In dieser Darstellung zeigt sich die für den nächsten Schritt benötigte und aus acht Hexgruppen bestehende Zeichenfolge am Ende der ersten Zeile (0) und am Anfang der neunten Zeile (A0). Im Screenshot ist die erste Hex-Gruppe der hier vorhandenen (selbstverständlich an dieser Stelle manipulierten bzw. willkürlich erstellt) ID “F87B958BC328E599” jeweils hervorgehoben. Die Zeichenfolge ist allerdings in “reverse order”, muss also noch gruppenübergreifend umgekehrt werden, d.h. aus “F87B958BC328E599” wird “99E528C38B957BF8” und damit die Library Persistent ID.
Anpassen der lokalen iTunes Library Persistent ID
Damit iTunes die Library Persistent ID des iPhones und nicht die bei seiner Neuinstallation erzeugte ID verwendet, muss als nächstes die lokale Library Konfigurationsdatei editiert werden.
iTunes Music Library.xml
Unter Windows befinden sich die gesuchten Dateien im Ordner “Eigene Musik\iTunes”. Zunächst muss aus der Datei “iTunes Music Library.xml” mit einem einfachen Texteditor der dort im Abschnitt “dict” zum key “Library Persistent ID” vorhandene String kopiert bzw. notiert werden:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Major Version</key><integer>1</integer> <key>Minor Version</key><integer>1</integer> [...] <key>Library Persistent ID</key><string>B4032468C9D484</string>
In gezeigten Quelltext wäre der zu kopierende String, welcher der von iTunes automatisch erstellten ID entspricht, “B4032468C9D484”. Anschließend wird dieser String durch die zuvor ausgelesene und umgekehrte alte ID ersetzt, die Datei gespeichert und geschlossen.
Im vorliegenden Beispiel sähe das Endergebnis damit folgendermaßen aus:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Major Version</key><integer>1</integer> <key>Minor Version</key><integer>1</integer> [...] <key>Library Persistent ID</key><string>99E528C38B957BF8</string>
iTunesLibrary.itl
Seit Version 10.X hat Apple die manuelle Anpassung der .itl-Datei gemäß der nachfolgenden Passage durch das Hinzufügen einer zusätzlichen Prüfsumme unmöglich gemacht, d.h. eine Änderung dort wird inzwischen automatisch erkannt. Bei Verwendung einer neueren iTunes-Version funktioniert allerdings ein einfaches Umbenennen und neu erzeugen der Datei, wie unten beschrieben.
Für iTunes-Versionen < 10.0 wird wieder der Hex-Editor benötigt und zwar für die Datei “iTunes Library.itl” im gleichen Verzeichnis. Nach dem Öffnen ist nur noch ein abschließender Schritt erforderlich und zwar das Ersetzen der alten, bei der Installation erzeugten ID durch die vom iPhone ausgelesene. Hierzu verwendet man in XVID32 am Besten die Ersetzen-Funktion (Strg + R) und fügt im “Find”-Feld den gerade aus der XML-Datei kopierten String B4032468C9D484 sowie im “Replace with”-Feld den zuvor aus dem iPhone ausgelesenen und umgekehrten ID-Wert 99E528C38B957BF8 jeweils als “Hex string” ein, gefolgt von einem “Replace all”.
In einigen Versionen von XVID32 muss der HEX-String jeweils in Zweiergruppen mit Leerzeichen getrennt eingegeben werden also hier B4 03 24 68 C9 D4 84 bzw. 99 E5 28 C3 8B 95 7B F8.
Nach dem Speichern der Datei sollte iTunes wieder wie gewohne alle Apps und Musik synchronisieren können. Eine genauere und schön bebilderte Beschreibung dieses Schrittes findet sich u.a. im Blog von iClarified unter http://www.iclarified.com/entry/index.php?enid=2137.
Bei Verwendung von neueren iTunes Versionen ( >= 10.0) schafft gemäß der Diskussion auf http://www.corsino.com/blog/?p=153 folgender Umweg Abhilfe: Statt dem Ändern der .itl-Datei wird die alte bzw. ausgelesene und umgekehrte ID nur in der iTunes Music Library.xml geändert. Nachdem die Datei gespeichert und geschlossen ist, wird die iTunes Library.itl an einen anderen Ort verschoben bzw. umbenannt und eine leere Datei mit gleichem Namen erzeugt. Das reine Löschen der Datei erkennt iTunes und setzt die ID auf die ursprüngliche erzeugte Version zurück. Wenn die Datei allerdings noch vorhanden und für iTunes augenscheinlich beschädigt (wie in diesem Fall schlicht leer) ist, wird sie auf Basis der Inhalte der XML-Datei neu erstellt, wodurch auch die dort enthaltene Library ID übernommen wird.
Anschließend kann iTunes gestartet werden, was zu folgendem Hinweis und der gleichzeitigen Neuerzeugung der iTunesLibrary.itl mit geänderter Library Persistent ID führt:
[singlepic id=732 w=381 h= float=]
Synchronisation eines iPhones mit mehreren Rechnern
Auch wenn von Apple sicherlich nicht unbedingt erwünscht, eignet sich der letzte beschriebene Schritt natürlich auch, um ein iPhone mit mehreren Rechnern parallel zu synchronisieren. Hierzu kopiert man die Library Persistent ID einfach statt aus dem iPhone direkt aus der “iTunes Music Library.xml” eines bereits mit dem iPhone konnektierten Rechners und führt die letztgenannte Ersetzung aus dem Abschnitt “Anpassen der lokalen iTunes Library Persistent ID” dieses Beitrags auf dem zweiten bzw. noch nicht konnektierten Rechner durch.
Mit einem 4s funktioniert es leider nicht!
Kennt jemand eine Möglichkeit die unter iOS 6.1 und iPhone 4 funktioniert?
Was genau funktioniert denn an der Anleitung oben nicht?