iPhone“;无法打开数据库文件";用于xcode应用程序中的call_history.db

iPhone“;无法打开数据库文件";用于xcode应用程序中的call_history.db,iphone,sqlite,jailbreak,Iphone,Sqlite,Jailbreak,我正在尝试访问越狱iPhone中的数据库call_history.db。我可以使用iOS 4.1访问iPhone 4的call_history.db。但问题是我无法访问iOS 3.1.3版iPhone3GS中的数据库 当我尝试打开3gs的数据库时,出现以下数据库错误: 无法打开数据库文件 我对iOS 4.1和iOS 3.1.3使用不同的路径 iPhone 4中的iOS 4.1-/private/var/wireless/Library/CallHistory/call_history.db i

我正在尝试访问越狱iPhone中的数据库call_history.db。我可以使用iOS 4.1访问iPhone 4的call_history.db。但问题是我无法访问iOS 3.1.3版iPhone3GS中的数据库

当我尝试打开3gs的数据库时,出现以下数据库错误:

无法打开数据库文件

我对iOS 4.1和iOS 3.1.3使用不同的路径

  • iPhone 4中的iOS 4.1-/private/var/wireless/Library/CallHistory/call_history.db

  • iPhone 3gs-/private/var/mobile/Library/CallHistory/call_history.db中的iOS 3.1.3

更新 我通过以下方式获取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手动检索所有文件

您的应用程序位于沙箱中,无法访问自身之外的任何内容。假设你的目标是越狱设备,这是另一个故事


Xcode将把你的应用程序安装到沙盒环境中。您需要使用ldid-S/YourApp.app/YourApp对应用程序进行手动签名,然后将其复制到设备
/Applications
目录中。

您的应用程序位于沙箱中,无法访问自身以外的任何内容。假设你的目标是越狱设备,这是另一个故事


Xcode将把你的应用程序安装到沙盒环境中。您需要使用ldid-S/YourApp.app/YourApp对应用程序进行手动签名,然后将其复制到设备
/Applications
目录中。

这是我看过的最好、最简单的教程

尝试下面的方法,而不是硬编码路径

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];

这是我看过的最好、最简单的教程

尝试下面的方法,而不是硬编码路径

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];


我还检查了sms.db文件。在iphone 4中,我可以访问位于/private/var/wireless/Library/CallHistory/callu history.db的call_history.db文件,但无法访问位于/private/var/mobile/Library/sms/sms.db的sms.db文件。所以我认为这可能与文件位置有关。但我不确定她发生了什么。我注意到我无法通过编码访问/private/var/mobile/Library文件夹。我还检查了mobile/Library文件夹的权限,该文件夹与wireless/Library文件夹相同。那么它也是不可接近的。nybody对此有想法吗???分享一些你正在使用的代码。因为如果您的手机被越狱,您应该能够访问目录而不会出错。@Wrightsc:我已经用代码编辑了我的问题。我使用简单的sqlite_open语句来打开数据库文件。它适用于具有无线文件夹的ios 4,但不适用于call_history.db位于库文件夹中的ios 3.1.3。它看起来sms.db的UNIX所有者是“mobile”,而call_history.db的所有者是“wireless”。也许这与此有关?我还检查了sms.db文件。在iphone 4中,我可以访问位于/private/var/wireless/Library/CallHistory/callu history.db的call_history.db文件,但无法访问位于/private/var/mobile/Library/sms/sms.db的sms.db文件。所以我认为这可能与文件位置有关。但我不确定她发生了什么。我注意到我无法通过编码访问/private/var/mobile/Library文件夹。我还检查了mobile/Library文件夹的权限,该文件夹与wireless/Library文件夹相同。那么它也是不可接近的。nybody对此有想法吗???分享一些你正在使用的代码。因为如果您的手机被越狱,您应该能够访问目录而不会出错。@Wrightsc:我已经用代码编辑了我的问题。我使用简单的sqlite_open语句来打开数据库文件。它适用于具有无线文件夹的ios 4,但不适用于call_history.db位于库文件夹中的ios 3.1.3。它看起来sms.db的UNIX所有者是“mobile”,而call_history.db的所有者是“wireless”。也许这与此有关?我正在研制一种越狱装置。但我仍然无法访问存在SMS、便笺、日历等文件的库文件夹。原因可能是什么,您认为我的设备可能无法正确越狱吗???否。如果您通过xcode将应用程序安装到设备上,它将作为沙盒应用程序安装。您需要使用LDID对其进行手动签名,并将其复制到/Applications目录。您能告诉我如何执行此操作吗??我应该如何使用LDID手动签名?我按照你的建议做了。我在.app上进行了ldid,然后将.app文件复制到/Applications文件夹。但我仍然不认为它有效。如何调试应用程序/应用程序中的应用程序???此外,应用程序在启动时崩溃。我不想再往前走了,我正在研制一种越狱装置。但我仍然无法访问存在SMS、便笺、日历等文件的库文件夹。原因可能是什么,您认为我的设备可能无法正确越狱吗???否。如果您通过xcode将应用程序安装到设备上,它将作为沙盒应用程序安装。您需要使用LDID对其进行手动签名,并将其复制到/Applications目录。您能告诉我如何执行此操作吗??我应该如何使用LDID手动签名?我按照你的建议做了。我在.app上进行了ldid,然后将.app文件复制到/Applications文件夹。但我仍然不认为它有效。如何调试应用程序/应用程序中的应用程序???此外,应用程序在启动时崩溃。是的,但在本例中,我需要访问位于应用程序目录之外的call_history.db。