![]() | ![]() |
iPhone Anrufhistorie auf 30 Tage erweitern, so geht's!(Hier klicken um zum Original-Thema zu gelangen)Geschrieben von: harlekyn Servus, das iPhone zeigt ja nur die letzten 100 ein- und ausgehenden Verbindungen in der Anrufhistorie an. Kennt jemand eine Moeglichkeit, diese zu erweitern? Es gab mal fuer eine uralte OS-Version einen Patch, aber ich suche eine Loesung fuer iOS4 / iPhone 4. Danke! Geschrieben von: harlekyn Selbst ist der Mann ;) Die Anrufhistorie wird in der call_history.db gespeichert, unter iOS 4 liegt sie in "/private/var/wireless/Library/CallHistory/". Das ist eine normale SQLite Datenbank. SQLite unterstuetzt Trigger. Und einen solchen hab ich nun auf die call-Tabelle gelegt, sodass ich kontrollieren kann, ob ein Datensatz geloescht wird. Mein Trigger hier sorgt dafuer, dass die Anrufe der letzten 30 Tage erhalten bleiben: Code:
Dieser Ansatz hat den Vorteil, dass einfach nur das delete nicht ausgefuehrt wird. Das Telephony-Framework setzt fuer alle Datensatze, die ueber die standardmaessigen 100 hinausgehen, nach jedem Anruf ein delete ab. Was man sonst so an Loesungen findet, fuegt die geloeschten Datensaetze einfach wieder in die call-Tabelle ein. Dies fuehrt aber zu einer deutlich hoeheren Last, und man hat keine echte Kontrolle darueber, dass immer nur die neuesten Datensaetze erhalten bleiben. Diese Modifikation bleibt auch nach einem Restore erhalten, solange man ein Backup einspielt. Wenn man den Trigger wieder loswerden moechte, genuegt ein Code:
Schritt-fuer-Schritt Anleitung: - Voraussetzung: Jailbreak, SSH-Zugang, APT 0.7 (ueber Cydia). 1. per SSH mit dem iPhone verbinden, dazu muss das iPhone per WLAN im gleichen Netz wie der Rechner sein. 2. sqlite3 installieren, falls nicht schon vorhanden: apt-get update; apt-get install sqlite3 3. Backup der Call History DB anfertigen: cp /private/var/wireless/Library/CallHistory/call_history.db /var/root/call_history.db.backup 4. Call History DB oeffnen: sqlite3 /private/var/wireless/Library/CallHistory/call_history.db 5. Am sqlite> prompt das Statement fuer den Trigger (siehe oben) per copy & paste einfuegen, Zeile fuer Zeile. 6. Mit STRG+D den sqlite3 Client beenden 7. Fertig! Geschrieben von: belinea Guter Tip. Danke. :top: Geschrieben von: knooby Hast du noch mehr so Klasse Tips? Nutze zwar seit 2 Jahren nen iPhone mit jailbreak. Aber deine Tipps sind immer gigantisch und auf solche kleinen angenehmen Sachen kommt man selbst nicht :). Geschrieben von: harlekyn Danke fuer die Blumen :) Aber soviele Threads eroeffne ich doch garnicht... Ich hab das inzwischen alles mal als .deb zusammengepackt, mit ein wenig Glueck erscheint es demnaechst im BigBoss Repository. Geschrieben von: harlekyn Hat hier noch jemand ein Geraet mit Jailbreak und iOS < 4.0? Falls ja wuerde mich der Speicherort der call_history.db interessieren. Per SSH als root geht das mit diesem Einzeiler: Code:
Bitte die Ausgabe incl. Firmware-Version hier posten. Danke! Geschrieben von: knooby Kann's dir vom iPad sagen 3.21 /private/var/mobile/Library/CallHistory/call_history.db Puh copy Paste iPad nervt:D Geschrieben von: harlekyn Danke! Das passt zu den Infos die ich ueber die Firmware 3.x gefunden habe. Wobei ich mich ja frage, was das iPad mit einer Anrufhistorie will... ;) Geschrieben von: harlekyn Um das alles ein wenig zu vereinfachen habe ich die Aenderungen in einem Cydia Package namens "Extended Call History" zusammengefasst. Das Paket tut das gleiche wie hier bereits beschrieben; sollte die call_history.db bereits manuell angepasst worden sein, empfehle ich, den Trigger erst manuell zu entfernen, bevor das Paket installiert wird. Das Paket ist ueber das Repository apt.17z.de zu beziehen. Das Repository muss ggf. erst noch zu Cydia hinzugefuegt werden, das geht ueber "Verwalten" -> "Quellen". Wer's ausprobieren moechte: Nur zu, ich freu' mich ueber ein kurzes Feedback :) Bitte aber vorher ein Backup ueber iTunes machen, sicher ist sicher. Wenn das Paket wieder ueber Cydia entfernt wird, wird auch die Erweiterung der Anruf-Historie rueckgaengig gemacht. Eintraege in der Anrufliste jenseits der Standardgrenze von 100 Stueck werden automatisch entfernt, sobald der naechste Anruf getaetigt wird. Geschrieben von: Macgerhard
Na, die Anrufe protokollieren, die man per Headset damit führt. Gerhard Geschrieben von: harlekyn Man kann mit dem iPad 3G ganz normal ueber GSM/UMTS telefonieren? Geschrieben von: knooby
work fine with rock Geschrieben von: Macgerhard
Da ich keines habe, kann ich das nicht garantieren. Aber so weit ich mich erinnere, wurde das mal in einem frühen Test von teltarif.de erwähnt. Kann aber auch sein, daß das „nur“ Internet-Telefonie war. Gerhard Geschrieben von: harlekyn Danke fuer die Rueckmeldung! Ich hab auch keins, hab aber auch noch nirgends gelesen, dass das funktioniert. Telefonie ist mWn ebensowenig moeglich wie SMS (3rd Party Apps natuerlich ausgenommen). Geschrieben von: Macgerhard
Wäre strategisch auch dumm von Apple, mit dem iPad das iPhone zu kannibalisieren. :D Gerhard Geschrieben von: lukasraederschei Hallo, erstmal danke an harlekyn für die ausführliche Anleitung, ich habe zwar nichts an meiner Anrufliste geändert, die Anleitung hat mich aber erst auf die Idee gebracht, dass unter iOS 4 die call_history.db im wireless-Ordner gespeichert ist... Nun zu meinem Problem: Bereits zum zweiten Mal ist meine Anrufliste "von selbst" kaputt gegangen und speichert keinerlei Anrufe mehr ab. Einen zeitlichen Zusammenhang zu Jailbreak/iOS-Update/SSH-Fummelei o.ä. gibt es nicht. Über Google habe ich nur diesen Thread bei hackint0sh.org gefunden, der mir jedoch auch nur bedingt weiterhilft. Als das Problem zum ersten Mal aufgetreten ist, habe ich es durch den veränderten Speicherort unter iOS 4 und die korrekte Anpassung der Rechte (Besitzer und Gruppe habe ich damals glaube ich mittels chown auf wireless:wireless angepasst) noch in den Griff bekommen. Dieses Mal bin ich jedoch absolut ratlos, da die Rechte identisch zu denen bei hackint0sh sind, Benutzer und Gruppe jedoch fest auf "mobile:mobile" eingestellt sind und sich trotz root-Rechten nicht auf wireless:wireless ändern lassen. Kennt noch jemand dieses Problem oder hat sogar eine Idee zur Lösung? Ich würde ungern mein iPhone wiederherstellen und ohne Backup einrichten, da ich die SMS etc. nicht verlieren möchte (ich weiß, die kann man auch manuell wieder einspielen, aber wer sagt, dass ich dann nicht vor einem ähnlichen Problem stehe :D ). Kann evtl. jemand mit iOS 4 unter Angabe von FW- und iPhone-Version den Speicherort und die Rechte seiner call_history.db posten? Der Speicherort sollte ja /private/var/wireless/Library/CallHistory/call_history.db sein, die Rechte lassen sich wie folgt herausfinden: Code:
Vielen Danke schonmal! :top: Lukas Geschrieben von: lukasraederschei Problem vollständig gelöst: Eigentlich wollte ich die Einträge in der Anrufliste behalten, habe also zuerst eine Sicherungskopie angelegt. Da mir keine Alternative mehr eingefallen ist, habe ich eben die Liste gelöscht (über SSH) und das iPhone neugestartet. Dabei hat das iPhone erwartungsgemäß eine neue (und leere) Liste angelegt, Benutzer und Gruppe waren aber nicht (wie in meiner Erinnerung ;) ) wireless:wireless, sondern _wireless:_wireless... Da ich damit das Problem gefunden hatte, habe ich einfach wieder die Sicherungskopie zurückgespielt, diesmal musste ich Benutzer/Gruppe gar nicht mehr manuell anpassen. Jetzt habe ich wieder eine funktionierende Anrufliste inkl. der Einträge bis zum 11.08.. Warum sich die Anrufliste aber - scheinbar ohne Fremdeinwirkung - selbst zerschossen hat (bzw. auf einmal mobile:mobile statt _wireless:_wireless in den Rechten steht), weiß ich immer noch nicht. Geschrieben von: DrunkenBoxer Hi harlekyn, im iPhone-notes.de Repo ist noch eine ältere Version (0.3) zu finden, kannst ja mal geradeziehen... Grüße, DB Geschrieben von: gio2000 Gibt es auch schon eine Lösung für IOS 4.1 ??? Grüße gio Geschrieben von: harlekyn Eigentlich duerfte das auch unter iOS 4.1 funktionieren. Hab ich aber mangels Jailbreak noch nicht testen koennen. Hast du ein iPhone mit JB und iOS 4.1? Was passiert, wenn du das Paket zu installieren versuchst? Geschrieben von: gio2000 Kann mir jemand die Rechte sagen die die call_dc auf dem Iphone haben muss ? Geschrieben von: lukasraederschei Auf meinem iPhone 4 (gestern auf 4.1 aktualisiert, JB mit GP) kann ich die Datei nicht finden (find / -name call_dc). In welchem Verzeichnis befindet sich die Datei denn bei Dir? Geschrieben von: harlekyn Die Datei heisst "call_history.db". Kannst du mal schauen, wo sie unter iOS4.1 liegt? Geschrieben von: lukasraederschei Speicherort: /private/var/wireless/Library/CallHistory/call_history.db Rechte/Besitzer sind "-rw-r--r-- 1 _wireless _wireless", wobei ich damit (s. ein paar Posts weiter oben) schon Probleme hatte, also kann ich nicht garantieren, dass die Rechte mit denen einer OOTB-4.1 übereinstimmen. Geschrieben von: harlekyn Danke! Sieht bei mir unter der 4.0.1 genauso aus, incl. Owner _wireless:_wireless. Geschrieben von: gio2000 weis man schon mehr, ?? Geschrieben von: denisxp Hallo, zuerst einmal: danke für den Tip! Funktioniert wunderbar unter iOS 4.1! Leider jedoch verträgt sich das Programm nicht mit den zahlreichen Programmen die das Löschen einzelner Anrufe aus der Liste ermöglichen, so z.B. Call/Log Delete oder CallDelete... Ist dies generell nicht möglich oder weißt du vlt wo das Problem liegen könnte? Vielen Dank! mfg, Denis Geschrieben von: harlekyn Das funktioniert generell nicht. Die Modifikation die ich hier durchfuehre verhindert, dass Anrufe aus der Historie geloescht werden. Dabei kann ich nicht unterscheiden, ob dies absichtlich (d.h. manuell durch den Benutzer) oder automatisch (durch die Phone-App) geschieht. Geschrieben von: denisxp Vielen Dank für die schnelle Antwort! Dann muss ich mir jetzt überlegen welche Funtkion für mich wichtiger ist... Trotzdem super Erweiterung! mfg, Denis Geschrieben von: Macgerhard
Git das unter iOS 4.3.3 immer noch? Was muß ich ändern, um 60, 90 oder unendlich viele Tage Call History zu bekommen? Gerhard Geschrieben von: harlekyn Klar. Auch unter iOS 5 so wie mir scheint, allerdings hab ich's da noch nicht selbst neu installiert. Problem dort ist allerdings: Man kann inzwischen Eintraege in der Call History loeschen. Die Anrufliste geht aber nicht gut damit um, wenn der Commit fehlschlaegt, d.h. sie stuetzt ab. Du machst aus der 30 im Beispielcode oben die gewuenschte Anzahl von Tagen. Geschrieben von: Macgerhard
Supi, dann ist der Schwenk zu CoreData mal zu was nütze. Hab mich bislang immer geärgert, aß ich an sachen, die früher in simplen Logfiles steckten, nicht mehr rankam.
Ist also ein Schweineprogramm™. :D
Etwa so? PHP:
;-) Gerhard Nachtrag: Ich probiere es erstmal mit 100 Jahren. Geschrieben von: harlekyn Du willst "unendlich" durch eine angemessen grosse Zahl von Tagen ersetzen, z.B. 1000 ;) Geschrieben von: Macgerhard
Ich probiere es erstmal mit 100 Jahren. Gerhard PS: Meine neues Hobby: http://www.sqlite.org/lang_datefunc.html :D Geschrieben von: harlekyn Du kannst aus der Bedingung auch einfach einen wahren Ausdruck machen. Sowas wie "when (1=1)". ;) Geschrieben von: Macgerhard
Hmm. Auch wieder wahr. Wie bearbeite ich einen bestehenden Trigger? Gerhard Nachtrag: Kann ich die WHEN-Geschichte dann nicht gleich ganz weglassen? Geschrieben von: harlekyn Ich wuerde ihn droppen und neu anlegen. Ob auch ein alter geht verraet die SQLite Doku, hab ich nicht im Kopf. Auch da empfehle ich einen Blick in die Dokumentation, ich denke das ist moeglich. Geschrieben von: Macgerhard
Oder sobald jemand anklingelt. :D Gerhard Geschrieben von: Macgerhard Ich überlege, ob man nicht was ähnliches mit der notes.db machen könnte. Ich regelmäßig 4 Notizen pro Woche an als Kopien der Exemplare der Vorwoche. Die erste Zeile enthält dabei immer Datum und Wochentag: YYYY-MM-DD Wochentag Könnte man das nicht auch über einen Trigger automatisieren? Geschrieben von: harlekyn Was genau, dass alte Versionen geloescht werden? Die Notizen haben ja auch einen Zeitstempel, der duerfte ebenfalls als separates Feld in der DB abgelegt sein. Geschrieben von: Macgerhard
Eigentlich wollte ich eher erreichen, daß automatisch am Sonntag abend die Einträge der Vorwoche dupliziert und mit den Daten der kommenden Woche versehen werden. Gerhard |