У меня есть взломанное устройство iOS 8.0, находящееся в тюрьме, и в приложении «Телефон» я вижу, что есть история вызовов, и я только что сделал несколько звонков с/на устройство, чтобы гарантировать, что должны быть записи истории звонков. Однако, когда я пытаюсь получить доступ к /private/var/wireless/Library/CallHistory/call_history.db
, в базе данных нет строк.Почему call_history.db пуст на iOS 8.0?
Итак, где устройство получает историю звонков, если это не отсюда? AFAIK - это изменение из CallHistory/call_history.db, являющееся местом для CallHistoryDB/CallHistory.storedata, произошедшим в iOS 8.3, но я выполняю 8.0.
Введите код, который вы видите SQLITE_DONE вместо SQLITE_ROW.
NSString *callHisoryDatabasePath = @"/private/var/wireless/Library/CallHistory/call_history.db";
BOOL callHistoryFileExist = FALSE;
callHistoryFileExist = [fileManager fileExistsAtPath:callHisoryDatabasePath];
NSMutableArray *callHistory = [[NSMutableArray alloc] init];
if(callHistoryFileExist) {
if ([fileManager isReadableFileAtPath:callHisoryDatabasePath]) {
sqlite3 *database;
if(sqlite3_open([callHisoryDatabasePath UTF8String], &database) == SQLITE_OK) {
sqlite3_stmt *compiledStatement;
NSString *sqlStatement = [NSString stringWithString:@"SELECT * FROM call;"];
int errorCode = sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1,
&compiledStatement, NULL);
if(errorCode == SQLITE_OK) {
int count = 1;
int result = sqlite3_step(compiledStatement);
while(result == SQLITE_ROW) {**** here result is SQLITE_DONE*****
...
Почему вы предполагаете, что схема базы данных такая же? Они изменили его. Загрузите iFile из Cydia, и вы можете просматривать файловую систему и открывать базы данных SQLite. Гораздо проще исследовать этот путь. Или скопируйте его на свой компьютер. – creker