Xcode では、FMDB で SQLCipher を使用してデータベースを暗号化しようとしています。私のプロジェクトでは、SQLCipher のコンパイル バージョンを既に持っています。これは、sqlite3 呼び出しを介して動作していることを証明しています。データベースと1つのテーブルを作成してから行を挿入する単体テストがあります。データベースがまだ暗号化されていないことを除いて、すべてが FMDB を使用して機能します。
-(id)initWithDatabaseFilename:(NSString*)filename{
NSString *databasePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
stringByAppendingPathComponent: filename];
self.databasePath = databasePath;
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:databasePath]) {
database = [FMDatabase databaseWithPath:databasePath];
[database setLogsErrors:YES];
[database setTraceExecution:NO];
BOOL keyCheck = [database setKey:@"B!GSecret"];
NSLog(@"Database is encrypted: %d",keyCheck);
NSLog(@"database created");
} else {
NSLog(@"Didnt need to create database");
}
[self createTable];
return self;
}
-(void)createTable{
BOOL tableExists = [self.database tableExists:kTASKTableName];
if(!tableExists){
[database open];
[database executeUpdate:@"CREATE TABLE TEST(TEST_PK integer primary key autoincrement, TITLE text, OTHERTITLE text, TESTVAL text, COMPLETED integer, CREATION_DATE double)"];
[database close];
}
}
-(BOOL) addTasks:(NSArray*) tasks{
BOOL insertSuccess = NO;
if([self.databasePath isEqualToString:@""]){
NSLog(@"Database has not yet been initialized");
}
[database open];
for(TESTOBJ *to in tasks){
[database executeUpdate:@"insert into TEST(TITLE, OTHERTITLE, TESTVAL) VALUES (?,?,?)",
to.title,to.otherTitle,to.testVal,nil];
}
[database close];
return insertSuccess;
}