Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing the iPhone's Call log with the iPhone SDK

I am building application that required some data from iPhone's Call log(read only). The call log is a sqlite db located at "/User/Library/CallHistory/call_history.db". I used a jailbroken device to extract the log. However trying to open this location using the sqlite_open3() command I get a SQLITE_ERROR error, which according to the library documentation means "SQL error or missing database". In an attempt to debug the error I've used NSFileManager to enumerate the folder('/User/Library/'). It would appear as if it's returning a "filtered" set of results, that exclude the 'CallHistory' folder along with several of the other folders.

The File system uses a series of alias to give the illusion of tradition OS X file structure, and I don't know if these are having an effect on my results.

The call log is only present on a device, and not the simulator. I've been unable to get it to work on a 1st gen iPhone running fireware 2.1.

This is some code I used to test the output

NSDirectoryEnumerator *dirnum = [[NSFileManager defaultManager] enumeratorAtPath: @"/private/var/mobile/Library/"];

while( bar = [dirnum nextObject])
{
    //Uncomment if you don't want to log sub folders
    //[dirnum skipDescendents];

    NSLog(bar);
}

I have a suspicion that Apple is blocking access to the directory as part of its sandboxing strategy, however I have no proof at this stage. However, I can access the address book without any issues, so I'm a little confused.

Thanks

like image 734
Jonathan Avatar asked Dec 04 '08 18:12

Jonathan


3 Answers

There is no access to the call log from Cocoa Touch or other iPhone APIs.

like image 192
Chris Hanson Avatar answered Oct 10 '22 02:10

Chris Hanson


Keep in mind I have not tried any of this.

Your logic appears to be that if you can access the Address Book db, why not the call log db? Well, the Address Book is exposed via published APIs - the call log is not. Consequently, I don't think it's so strange that you can't access its db file either.

like image 43
Mike McMaster Avatar answered Oct 10 '22 02:10

Mike McMaster


You cannot access the call log using the SDK and approved APIs. This is by design.

like image 41
August Avatar answered Oct 10 '22 02:10

August