我正试图在越狱的iPhone中访问数据库call_history.db。我可以使用iOS 4.1访问iPhone 4的call_history.db。但问题是我无法使用iOS 3.1.3访问iPhone 3gs中的数据库。
当我尝试打开3gs数据库时,我收到以下数据库错误:
无法打开数据库文件
我为iOS 4.1和iOS 3.1.3使用不同的路径
iPhone 4中的iOS 4.1 - /private/var/wireless/Library/CallHistory/call_history.db
和iOS 3.1.3 - /private/var/mobile/Library/CallHistory/call_history.db
我按以下方式获取call_history.db
//NSString *path=@"/private/var/wireless/Library/CallHistory/call_history.db";//for ios 4.0 and above call_history.db
NSString *path=@"/var/mobile/Library/CallHistory/call_history.db";//for ios 3.0 and above call_history.db
if(sqlite3_open([path UTF8String], &database) == SQLITE_OK)
{
//code for fetching the calls goes here.////
NSLog(@"call_history present");
}
else {
NSLog(@"Failed to open database with message '%s'.", sqlite3_errmsg(database));
sqlite3_close(database);
}
这里的输出是错误:
无法打开数据库文件
我注意到我无法通过上面的代码访问两个iPhone中的Library文件夹。我可以通过ssh手动检索所有文件。
答案 0 :(得分:5)
您的应用位于沙箱中,无法访问其他任何内容。假设你的目标是越狱设备,这是另一个故事。
Xcode会将您的应用安装到沙盒环境中。您需要使用 ldid -S /YourApp.app/YourApp
手动对应用进行签名,然后将其复制到设备/Applications
目录中。
答案 1 :(得分:0)
这是我见过的最好,最简单的教程 http://dblog.com.au/iphone-development-tutorials/iphone-sdk-tutorial-reading-data-from-a-sqlite-database/
不要对路径进行硬编码,请尝试以下方法。
databaseName = @"AnimalDatabase.sql";
// Get the path to the documents directory and append the databaseName
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];