Knowledgebase
26 Jun
Ich habe mich der Sache mit meinem Fehlerhaften SMS-Speicher nochmals angenommen. Offensichtlich bin ich nicht der Einzige, der damit Probleme hat, siehe Apple Forum.
Eine Chance zur Reparatur hat man sowieso nur, wenn man ein offenes iPhone (Jailbreak) hat und ein sshd installiert ist. Damit habe ich mir mal die SQLite-Datenbank sms.db aus
/var/mobile/Library/SMS/sms.db
wegkopiert und analysiert. Die SMS-Nachrichten selbst landen in der Tabelle “message”. Zusätzlich gibt es noch eine Tabelle “msg_group”, in der eine Zusammenfassung über die verwalteten SMS abgelegt ist. Hier ist nach den Message-Centern sortiert die Anzahl der offenen SMS eingetragen. Aus dem Trigger “delete_message” der Tabelle “message” läßt sich erkennen, dass die Anzahl der gelesenen SMS in “msg_group” immer um -1 reduziert wird. Das kann natürlich ab und an zu den Fehlern führen, wie ich sie habe.
Wichtig: Vor Änderungen bitte
Ein update auf “msg_group” hilft hier schon einmal:
sqlite3 /var/mobile/Library/SMS/sms.dbsqlite> update msg_group set unread_count=0;
Das Problem ist nur, dass es in der Datenbank immer noch Einträge gibt, die als nicht gelesen markiert sind:
sqlite> select * from message where read<>1;sqlite> deletefrom message where read<>1;
SQL error: no such function: read
Aha. Beim Feld “read” handelt es sich anscheinend um ein Bitmap, dessen zweites Bit das Flag “read” darstellt. Nach langem suchen habe ich ein Script gefunden, das alle SMS pauschal löscht. Zwei kleine Anpassungen (fett) und schon klappts sowohl mit iPhone OS 3.0 als auch mit den “defekten” Nachrichten:
#! /usr/bin/pythonfrom sqlite3 import dbapi2 as sqlitedef message_read(flags): """reimplementation of an sqlite user defined function called by a trigger on the messages table.the trigger checks the message flags to see if a message has been read to see if the counter of unread messages in another needs to be updated when a message is deleted. """# second bit is the "was read" flag return (int(flags) & 0x02) >> 1db = sqlite.connect('/var/mobile/Library/SMS/sms.db')# register the user-defined function used by delete trigger db.create_function('read', 1, message_read)c = db.cursor()c.execute('delete from message where read<>1;') c.execute('update msg_group set unread_count=0;') db.commit()# vim:set ts=4 sw=4 ai et tw=80:
Es gibt inzwischen auch eine eine App “SMSFix” aus dem Cydia-Repository, die hat bei mir allerdings nicht funktioniert.
Weitere Quellen: toofisches.net, sukkology.net
15 Jan
Ist schon kurios:

Kann mir mal jemand 4 SMS schicken, damit der SMS-Speicher wieder leer ist?
13 Jan
Tja, es ist eben nicht alles Gold…
Das iPhone hat seit der Softwareversion 2.1 eine SMS-Reminder-Funktion. Will heißen, wenn eine SMS kommt, zeigt das iPhone im Homescreen eine kurze Meldung mit den ersten paar Zeilen der SMS an. Ist die SMS kurz genug, paßt sie ganz da rein. Wenn keine Reaktion nötig ist, muss ich auch nicht Entriegeln und diese lesen. Allerdings denkt das iPhone, ich hätte es nicht gelesen und bringt nach 5 Minuten nochmal einen Erinnerungston, ab dann im 10min-Abstand, bis einmal Entriegelt wird und dem iPhone somit die Kenntnisnahme bekannt gemacht wurde…
ABER DAS NERVT!
Und: Man kann es nicht abschalten, auch nicht mit einem Commandline-Befehl…
Josh Highland hat das gleiche Problem, und sogar auf den Apple-Seiten beschweren sich die Kunden…