Зашифрованные основные данные не шифруют файл .sqlite, а в дополнительных таблицах "ecd" нет записей.

Я использую Xcode 10.3 для проекта iOS 9.0. Я пытаюсь использовать зашифрованные основные данные для шифрования как основных данных, так и файла.sqlite, но проблема в том, что он не шифрует файл.sqlite.

Я проверил это, когда я сделал шестнадцатеричный дамп файла.sqlite, он по-прежнему показывает формат SQL и другой простой текст вместо зашифрованного текста, как это показано в репозитории github библиотеки.

Первоначально файл.sqlite содержит 172 таблицы, но при использовании библиотеки количество таблиц увеличивается до 342. Я проверил это на SQLiteStudio, и в базе данных полно таблиц с добавлением "ecd" к именам таблиц (пример: ecdStocks), я предположил, что ecd - это аббревиатура библиотеки, не говоря уже о том, что она все еще включает старые таблицы с К нему добавлена ​​буква "Z" (пример: ZSTOCKS).
Это нормально для библиотеки?
Другая проблема заключается в том, что таблицы "ecd" не содержат никаких записей, тогда как старые таблицы до преобразования в "ecd" содержат множество записей.

Вот код, который я использую с библиотекой.

- (NSManagedObjectContext *)masterManagedObjectContext {
if (_masterManagedObjectContext != nil) {
    return _masterManagedObjectContext;
}

NSURL *storeURL = [[self getApplicationDocumentsDirectory] URLByAppendingPathComponent:SQLITE_FILENAME];
// This is the result of the URL /Users/user1/Library/Developer/CoreSimulator/Devices/BE0082D4-2D71-42A2-959D-F1AC2BD947D9/data/Containers/Data/Application/CC4BA3B8-9143-47F3-BF2D-5DABB6EDB137/Documents/dbTest.sqlite
NSString *path = [storeURL path]; //get the URL string

NSDictionary *options = @{ EncryptedStorePassphraseKey: @"",
                           EncryptedStoreDatabaseLocation: path,
                           NSMigratePersistentStoresAutomaticallyOption : @YES,
                           NSInferMappingModelAutomaticallyOption : @YES,
                           @"journal_mode" : @"DELETE"
                           };
NSError *error = nil;

NSManagedObjectModel *objectModel = [self managedObjectModel];

NSPersistentStoreCoordinator *coordinator = [EncryptedStore makeStoreWithOptions:options managedObjectModel:objectModel error:&error];
//NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];

NSLog(@"%@", error.localizedDescription); //result is nil

if (coordinator != nil) {
    _masterManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    [_masterManagedObjectContext performBlockAndWait:^{
        [_masterManagedObjectContext setPersistentStoreCoordinator:coordinator];
    }];
}

return _masterManagedObjectContext;

}

Я попытался проверить путь, используя это условие

if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
    NSLog(@"%@", @"Exist");
}

Он выводит на консоль "Exist", что означает, что библиотека имеет доступ к файлу.sqlite. Я также проверяю это, используя неправильный код доступа, при котором библиотека выдает ошибку, поскольку в моем файле.sqlite нет пароля.

Удаление и восстановление приложения по-прежнему не работает.
Библиотека не содержит сообщений об ошибках, что означает, что у нее нет проблем с доступом к ней.

0 ответов

Другие вопросы по тегам