Зашифрованные основные данные не шифруют файл .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 нет пароля.
Удаление и восстановление приложения по-прежнему не работает.
Библиотека не содержит сообщений об ошибках, что означает, что у нее нет проблем с доступом к ней.