iOS
Integracja SqlCipher
Szukaj…
Wprowadzenie
SQLite jest już popularnym interfejsem API do przechowywania danych w aplikacjach na iOS, więc jego zalety są oczywiste. Jako programista pracujesz ze stabilnym, dobrze udokumentowanym API, który akurat ma wiele dobrych opakowań dostępnych w Objective-C, takich jak FMDB i Encrypted Core Data. Wszystkie kwestie bezpieczeństwa są czysto oddzielone od kodu aplikacji i są zarządzane przez podstawową strukturę.
Uwagi
- Otwórz terminal, przejdź do katalogu głównego swojego projektu i sprawdź kod projektu SQLCipher za pomocą Git:
$ git clone https://github.com/sqlcipher/sqlcipher.git
- Kliknij projekt prawym przyciskiem myszy i wybierz „Dodaj pliki do” Mojej aplikacji ”(etykieta będzie się różnić w zależności od nazwy aplikacji). Ponieważ sklonowaliśmy SQLCipher bezpośrednio w tym samym folderze co twoja aplikacja na iOS, powinieneś zobaczyć folder sqlcipher w głównym folderze projektu. Otwórz ten folder i wybierz sqlcipher.xcodeproj
Wybierz panel Ustawienia kompilacji. W polu wyszukiwania wpisz „Ścieżki wyszukiwania nagłówka”. Kliknij dwukrotnie pole pod kolumną docelową i dodaj następującą ścieżkę: $ (PROJECT_DIR) / sqlcipher / src
Zacznij wpisywać „Inne flagi linkera” w polu wyszukiwania, aż pojawi się ustawienie, kliknij dwukrotnie, aby je edytować, i dodaj następującą wartość: $ (BUILT_PRODUCTS_DIR) /libsqlcipher.a
Zacznij wpisywać „Inne flagi C” w polu wyszukiwania, aż pojawi się ustawienie, kliknij dwukrotnie, aby je edytować, aw wyskakującym okienku dodaj następującą wartość: -DSQLITE_HAS_CODEC
Rozwiń Zależności docelowe i kliknij przycisk + na końcu listy. W przeglądarce, która zostanie otwarta, wybierz cel biblioteki statycznej sqlcipher :
- Rozwiń łącze Pliki binarne z bibliotekami, kliknij przycisk + na końcu listy i wybierz bibliotekę libsqlcipher.a .
- Na koniec, również w obszarze Link z bibliotekami dodaj Security.framework .
Integracja kodu:
Integracja w celu otwarcia bazy danych za pomocą hasła.
-(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;
}