수색…


소개

SQLite는 이미 iOS 앱의 영구 데이터 저장을위한 인기있는 API이므로 개발의 장점은 분명합니다. 프로그래머는 FMDB 및 암호화 된 코어 데이터와 같이 Objective-C에서 사용할 수있는 많은 좋은 래퍼를 사용하는 안정되고 잘 문서화 된 API로 작업합니다. 모든 보안 문제는 응용 프로그램 코드와 완전히 분리되고 기본 프레임 워크에 의해 관리됩니다.

비고

  1. 터미널을 열고 프로젝트의 루트 디렉토리로 전환 한 다음 Git을 사용하여 SQLCipher 프로젝트 코드를 체크 아웃하십시오.
 $ git clone https://github.com/sqlcipher/sqlcipher.git
  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "내 응용 프로그램"에 파일 추가를 선택하십시오 (레이블은 응용 프로그램 이름에 따라 다릅니다). SQLCipher를 iOS 응용 프로그램과 동일한 폴더에 직접 복제 했으므로 루트 프로젝트 폴더에 sqlcipher 폴더가 있어야합니다. 이 폴더를 열고 sqlcipher.xcodeproj를 선택하십시오 .

여기에 이미지 설명을 입력하십시오.

  1. 빌드 설정 창을 선택하십시오. 검색 필드에 "헤더 검색 경로"를 입력하십시오. 대상 열 아래의 필드를 두 번 클릭하고 다음 경로를 추가합니다. $ (PROJECT_DIR) / sqlcipher / src

  2. 검색 필드에 설정이 나타날 때까지 "기타 링커 플래그"를 입력하고 편집하려면 두 번 클릭하고 다음 값을 추가하십시오. $ (BUILT_PRODUCTS_DIR) /libsqlcipher.a

  3. 검색 필드에 설정이 나타날 때까지 "기타 C 플래그"를 입력하고 편집하려면 두 번 클릭하고 팝업에서 다음 값을 추가하십시오 : -DSQLITE_HAS_CODEC

  4. 대상 종속성을 확장하고 목록의 끝에서 + 버튼을 클릭하십시오. 열리는 브라우저에서 sqlcipher 정적 라이브러리 대상을 선택하십시오.

여기에 이미지 설명을 입력하십시오.

  1. 링크 바이너리를 라이브러리와 함께 펼치고 목록의 끝에있는 + 버튼을 클릭하고 libsqlcipher.a 라이브러리를 선택하십시오.

여기에 이미지 설명을 입력하십시오.

  1. 마지막으로 라이브러리와 링크 아래에서 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;
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow