Hilf dir selbst, dann hilft dir der Nil! Ein Lösungsansatz!
Da mir ja keiner helfen wollte, hab ich das nu selber gemacht! ;-)
Lösungsansatz.
Erstmal schauen, was das Telefon einem so alles verrät.
Ist das Vertu via Bluetooth am Mac gekoppelt informiert es über die verfügbaren Bluetooth Dienste.
In diesem Fall fehlt ein wichtiger Dienst, mit dem man verschiedene Nokia Standart Funktionen nutzen kann.
Der Nokia Data Suite Dienst.
Allerdings kommt das Telefon mit einem SyncML Client.
Das ist in sofern praktisch, als das Apples iSync eigentlich nichts weiter ist, als ein SyncML Server mit nettem Interface.
Nun habe ich ja schon mal ein Telefon mit iSync zusammengeführt.
Also habe ich mir mal wieder das Universal Plug In für iSync von iSync-Hilfe.de heruntergeladen.
So einfach wie beim W900i damals war es aber leider nicht.
Leider erkennt iSync das Telefon als nicht kompatibel.
Warum? Gute Frage. Zumindest war es die erste, die ich mir gestellt habe.
Da ich sie nicht beantworten konnte, schaute ich auf , eine Site,Tao of Mac die ich über Apfelwiki gefunden habe.
Dort erklärt der Autor ziemlich beeindruckend detailliert, wie die PlugIns für iSync aufgebaut sind, und wie es funktioniert.
So stellt sich heraus, dass Apple die Erkennung der Telefone auf AT Command Informationen stützt.
Diese Auszulesen stellte sich als leichter heraus, als anfänglich befürchtet. Denn statt umständlich erst die BT Leitung direkt anzuzapfen wirkte ein Blick in die Mac OS X Konsole Wunder.
Durch Zufall fand ich einen Eintrag über die laufende BT Verbindung mit dem Handy.
Inkl. aller für mich relevanten Daten.
Für alle, die nun wissen wollen, wie das aussieht:
manufacturer:
Vertu Ltd
model number:
Vertu Ascent
revision ID:
V 503.02
31-01-2006
RHV-3
GSM E11
(c) Vertu.
IMSI:
+CGATT: 0
GMM:
Vertu Ascent
GMI:
Vertu Ltd
Mit Hilfe dieser Informationen ist es nun Möglich das Telefon von iSync erkennen zu lassen.
Dazu ändert man in der MetaClasses.plist im Universal PlugIn den Namen des Herstellers und des Modells auf die oben angezeigten Werte.
Denn diese Informationen fragt iSync ab, um die richtigen Scripte verwenden zu können.
Und wir wollen ja schließlich iSync überzeugen, dass unser Script das Richtige ist
Leider ist es damit noch nicht getan.
Denn das erste von mir, aus der MetaClasses.plist aus iSync selber (Rechte Maustaste/Packetinformationen anzeigen), ausgewählte Script ist das, des Nokia 8800.
Ein Serie40 Telefon, das technisch eng verwandt sein müsste.
Ist es aber leider nicht.
Auf dem Vertu Display leuchtet die Fehlermeldung: KEINE GENEHMIGUNG auf und der Sync schlug fehl.
Meine erste Annahme, einzelne Parameter, die spezielle Eigenschaften beschreiben, sind falsch, stellte sich, nach wenigen Stunden als Unsinnig heraus.
Zurück ins Netz und an die MetaClasses.plist.
Denn, von Nokias Serie 40 gibt es inzwischen 3 Revisionen. 2 Davon unterstützt iSync bereits.
Welcher dieser drei ist es denn nun?
Wiedermals hilft das gute alte Trial and Error Prinzip.
Da meine beste Freundin ein Nokia 6230 besaß, wollte ich dies versuchen, untersuchte aber noch mal den Tao of Mac Artikel, der mich auf den Javascriptbereich hinwieß.
Dort ist beschrieben, dass das 6230i mehrere Ordnerstrukturen haben kann. Die sind allerdings zu einander zwangsläufig inkompatibel.
Also fiel meine Wahl auf dieses Modell.
Ich hatte vorher die Daten meines Nokia 8800 via Content Copierer übertragen, wobei die Mediafiles falsch importiert worden sind.
So kam ich auf die Idee!
Und nach nur wenigen Änderungen, die mehr ein Feintuning sind:
Erfolg!
Die fertige Key Info sieht dann so aus:
<key>com.vertu.ascent</key>
<dict>
<key>Identification</key>
<dict>
<key>com.apple.cgmi+cgmm</key>
<string>Vertu Ltd+Vertu Ascent</string>
<key>com.apple.gmi+gmm</key>
<string>Vertu Ltd+Vertu Ascent</string>
</dict>
<key>InheritsFrom</key>
<array>
<string>family.com.nokia.series40.bus.bt</string>
</array>
<key>Services</key>
<array>
<dict>
<key>ServiceName</key>
<string>com.apple.model</string>
<key>ServiceProperties</key>
<dict>
<key>ModelIcon</key>
<string>VertuAscent.tiff</string>
<key>ModelName</key>
<string>Ascent</string>
</dict>
</dict>
<dict>
<key>ServiceName</key>
<string>com.apple.synchro</string>
<key>ServiceProperties</key>
<dict>
<key>MaxEMailLength</key>
<integer>126</integer>
<key>MaxEventLocationLength</key>
<integer>50</integer>
<key>MaxEventSummaryLength</key>
<integer>211</integer>
<key>MaxNotesLength</key>
<integer>126</integer>
<key>MaxPhoneNumberLength</key>
<integer>50</integer>
<key>MaxURLLength</key>
<integer>126</integer>
</dict>
</dict>
<dict>
<key>ServiceClass</key>
<string>IPHJSRevisionService</string>
<key>ServiceName</key>
<string>com.apple.revisionchecker</string>
<key>ServiceProperties</key>
<dict>
<key>ModelSwitchScript</key>
<string>
function parseGMR(properties) {
gmr = properties[”com.apple.GMR”];
application.log(”Testing revision from GMR: ” + gmr);
if(gmr != null) {
match = utils.match(gmr, “V\\s*([0-9]+\\.[0-9]+)\\s+[^\\s]+\\s+([A-Z]+)-([0-9]+) “);
if(match == null) {
application.log(”Can’t parse GMR”);
return null;
}
if(match.length != 3) {
application.log(”Bad parsing of GMR”);
return null;
}
parsed_version = {};
parsed_version[’generation’] = match[1];
parsed_version[’generation_version’] = (match[2] - 0);
parsed_version[’version’] = (match[0] - 0.0);
application.log(”Parsed version is:\n” + utils.objcDescription(parsed_version));
return parsed_version;
}
return null;
}
function realModelIDFromProperties(properties) {
version = parseGMR(properties);
if (version == null)
return null;
if ((version.generation == “RM”) &&
(version.generation_version == 72) &&
(version.version >= 3.40))
{
// folding has changed since 03.40 (maybe before, but we only know that it has changed between 03.30 and 03.40)
application.log(”This phone uses new folding style”);
return “com.vertu.ascent.withNewFolding”;
}
return null;
}
</string>
</dict>
</dict>
<dict>
<key>ServiceName</key>
<string>com.apple.pimsync.parser.vCard</string>
<key>ServiceProperties</key>
<dict>
<key>FoldingStyle</key>
<string>FoldingNGQP</string>
</dict>
</dict>
</array>
</dict>
<key>com.vertu.ascent.withNewFolding</key>
<dict>
<key>InheritsFrom</key>
<array>
<string>family.com.nokia.series40.bus.bt</string>
</array>
<key>Services</key>
<array>
<dict>
<key>ServiceName</key>
<string>com.apple.model</string>
<key>ServiceProperties</key>
<dict>
<key>ModelIcon</key>
<string>MyPhone.tiff</string>
<key>ModelName</key>
<string>Ascent</string>
</dict>
</dict>
<dict>
<key>ServiceName</key>
<string>com.apple.pimsync.parser.vCard</string>
<key>ServiceProperties</key>
<dict>
<key>FoldingStyle</key>
<string>FoldingKeepQP</string>
</dict>
</dict>
</array>
</dict>
</dict>
Wie man sieht, werden als Identifikationskennungen die Hersteller und Modellbezeichnungen verwendet.
Als Syncengine kommt die Serie40 Standart (Alternativ wäre 3rd Edition) zum Einsatz.
Der untere Teil ist speziell für das 6230i interessant, das mit alternativen Ordnereinstellungen arbeitet.
Laut meinem Log ist dies beim Vertu eigentlich nicht nötig, da dieses mit dem Herkömmlichen Ordnersetup arbeitet.
In diesem Script ist übrigens das fertige Icon bereits namentlich erwähnt!
Die Daten sind drauf, was nun noch fehlt, ist ein schönes Icon für die iSync.app.
TIFF Bild mit 60×60 Pixel Auflösung und Transparent Support.
Das Original entnahm ich der Bildergalerie der Vertu Website, die ich leider nicht direkt verlinken kann, da die dort Flash benutzen :/
Mal eben den überflüssigen Hintergrund entfernt und das Bild auf die notwendigen Maße reduziert.
Das Ergebnis sieht nun so aus:
Wer nun das fertige PlugIn laden möchte, kann entweder bei meiner Site unter
Haschbar.com oder das PlugIn direkt als Zip File Vertu Ascent Phone Plug In laden.
Es muss dann nur noch in den Ordner /Libary/PhonePlugins oder ~/Libary/PhonePlugins kopiert werden.
Im Zweifel Ordner erstellen