iOS
Integrazione con SqlCipher
Ricerca…
introduzione
SQLite è già una popolare API per la memorizzazione persistente dei dati nelle app iOS, quindi il lato positivo per lo sviluppo è ovvio. Come programmatore lavori con API stabili e ben documentate che hanno molti buoni wrapper disponibili in Objective-C, come FMDB e Encrypted Core Data. Tutti i problemi di sicurezza sono nettamente disaccoppiati dal codice dell'applicazione e gestiti dal framework sottostante.
Osservazioni
- Apri il terminale, passa alla directory principale del progetto e controlla il codice del progetto SQLCipher usando Git:
$ git clone https://github.com/sqlcipher/sqlcipher.git
- Fai clic con il tasto destro del mouse sul progetto e seleziona "Aggiungi file a" La mia app "" (l'etichetta varia in base al nome della tua app). Poiché abbiamo clonato SQLCipher direttamente nella stessa cartella della tua app per iOS, dovresti vedere una cartella sqlcipher nella cartella del tuo progetto root. Apri questa cartella e seleziona sqlcipher.xcodeproj
Seleziona il riquadro Impostazioni di costruzione. Nel campo di ricerca, digita "Percorsi di ricerca intestazione". Fare doppio clic sul campo sotto la colonna di destinazione e aggiungere il seguente percorso: $ (PROJECT_DIR) / sqlcipher / src
Inizia a digitare "Altri Linker Flags" nel campo di ricerca fino a quando appare l'impostazione, fai doppio clic per modificarlo e aggiungi il seguente valore: $ (BUILT_PRODUCTS_DIR) /libsqlcipher.a
Inizia a digitare "Altri C Flags" nel campo di ricerca fino a quando appare l'impostazione, fai doppio clic per modificarlo e nel pop-up aggiungi il seguente valore: -DSQLITE_HAS_CODEC
Espandere Dipendenze di destinazione e fare clic sul pulsante + alla fine dell'elenco. Nel browser che si apre, seleziona la destinazione della libreria statica sqlcipher :
- Espandi Collega binario con le librerie, fai clic sul pulsante + alla fine dell'elenco e seleziona la libreria libsqlcipher.a .
- Infine, anche sotto Link With Libraries, aggiungi Security.framework .
Integrazione del codice:
Integrazione per aprire il database usando la password.
-(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;
}