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 sandboxi开发者_运维百科ng 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
There is no access to the call log from Cocoa Touch or other iPhone APIs.
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.
You cannot access the call log using the SDK and approved APIs. This is by design.
Yes, it is possible. This tutorial works: http://iosstuff.wordpress.com/2011/08/19/accessing-iphone-call-history/
Applications are not meant to access anything out of their sandbox. The Address Book database is accessible because it's accessed by the public frameworks. Before firmware 2.1, applications did have read-only access out of their sandbox.
I would bet that PhoneView extracts the data from the iphone backup folder on the Mac.. the sqlite databases are stored there with predictable names.
with the config utility and skd you can monitor when calls are placed, but cannot see to whom, ive been trying to get past the same issue, making progress but apple definetly made it so its private info, atleast who your calling,
Honestly, how can you imagine they would let you access the whole Call log? How about you transmit it over the Internet once you have fetched it and make good use of this information?
精彩评论