iOS
Интеграция SqlCipher
Поиск…
Вступление
SQLite уже является популярным API для постоянного хранения данных в приложениях iOS, поэтому потенциал роста для разработчиков очевиден. Как программист вы работаете со стабильным, хорошо документированным API, который, как оказалось, имеет много хороших оберток, доступных в Objective-C, таких как FMDB и Encrypted Core Data. Все проблемы безопасности полностью отделены от кода приложения и управляются базовой структурой.
замечания
- Откройте терминал, перейдите в корневой каталог вашего проекта и проверьте код проекта SQLCipher с помощью Git:
$ git clone https://github.com/sqlcipher/sqlcipher.git
- Щелкните правой кнопкой мыши по проекту и выберите «Добавить файлы в« Мое приложение »» (ярлык будет меняться в зависимости от имени вашего приложения). Поскольку мы клонировали SQLCipher непосредственно в ту же папку, что и ваше приложение iOS, вы должны увидеть папку sqlcipher в корневой папке проекта. Откройте эту папку и выберите sqlcipher.xcodeproj
Выберите панель «Настройки сборки». В поле поиска введите «Пути поиска заголовков». Дважды щелкните поле под целевым столбцом и добавьте следующий путь: $ (PROJECT_DIR) / sqlcipher / src
Начните вводить «Other Linker Flags» в поле поиска, пока не появится параметр, дважды щелкните его, чтобы изменить его, и добавьте следующее значение: $ (BUILT_PRODUCTS_DIR) /libsqlcipher.a
Начните вводить «Other C Flags» в поле поиска до появления параметра, дважды щелкните его, чтобы изменить его, а во всплывающем окне добавьте следующее значение: -DSQLITE_HAS_CODEC
Разверните «Зависимости целей» и нажмите кнопку «+» в конце списка. В открывшемся браузере выберите цель статической библиотеки sqlcipher :
- Разверните ссылку «Бинарные ссылки» с библиотеками, нажмите кнопку «+» в конце списка и выберите библиотеку libsqlcipher.a .
- Наконец, также в разделе «Связывание с библиотеками» добавьте Security.framework .
Интеграция кода:
Интеграция для открытия базы данных с использованием пароля.
-(void)checkAndOpenDB{
sqlite3 *db;
NSString *strPassword = @"password";
if (sqlite3_open_v2([[databaseURL path] UTF8String], &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL) == SQLITE_OK) {
const char* key = [strPassword UTF8String];
sqlite3_key(db, key, (int)strlen(key));
if (sqlite3_exec(db1, (const char*) "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
NSLog(@"Password is correct, or a new database has been initialized");
} else {
NSLog(@"Incorrect password!");
}
sqlite3_close(db);
}
}
- (NSURL *)databaseURL
{
NSArray *URLs = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSURL *directoryURL = [URLs firstObject];
NSURL *databaseURL = [directoryURL URLByAppendingPathComponent:@"database.sqlite"];
return databaseURL;
}