2017-06-06 16 views
2

コアデータを暗号化するためにEncryptedStore SQLCipher wrapperに問題があります。
私は、このためのC-フラグを追加しました:XCode9-beta:関数 'sqlite3_key'の暗黙的な宣言

Debug = -DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2 -DSQLITE_THREADSAFE -DSQLCIPHER_CRYPTO_CC 
Release = -DSQLITE_HAS_CODEC -DNDEBUG -DSQLITE_OS_UNIX=1 -DSQLITE_TEMP_STORE=2 -DSQLITE_THREADSAFE -DSQLCIPHER_CRYPTO_CC 

としてそれを使用する:それはXCode8で正常に動作しているが、それはXCode9ベータにエラーを与えている

func encryptedCoordinator() -> NSPersistentStoreCoordinator { 
    var coordinator:NSPersistentStoreCoordinator? 
    let ops:[String : Any] = [NSMigratePersistentStoresAutomaticallyOption:(true),            NSInferMappingModelAutomaticallyOption:(true), EncryptedStorePassphraseKey:sqlCipherKey, EncryptedStoreDatabaseLocation:self.sqliteFileURL()] 

    do { 
     coordinator = try EncryptedStore.make(options: ops, managedObjectModel: self.managedObjectModel, error:()) 
    }catch { 
     fatalError("Error opening encrypted DB: \(error)") 
    } 
    return coordinator! 
    } 


エラー行:

- (BOOL)changeDatabasePassphrase:(NSString *)passphrase error:(NSError *__autoreleasing*)error { 
    BOOL result; 
    int status; 
    if ([passphrase length] > 0) { 
    // Password provided, use it to key the DB 
    const char *string = [passphrase UTF8String]; 
    status = sqlite3_rekey(database, string, (int)strlen(string));//ERROR line 
    string = NULL; 
    passphrase = nil; 
    } else { 
    // No password 
    status = SQLITE_OK; 
    } 
    result = status == SQLITE_OK; 
    if (result) { 
    result = [self checkDatabaseStatusWithError:error]; 
    } 
return result && (*error == nil); 
} 

機能としてEncryptedStroe/sqlite3.hに宣言されています。私は問題があると思い

SQLITE_API int sqlite3_rekey(
sqlite3 *db,     /* Database to be rekeyed */ 
    const void *pKey, int nKey  /* The new key */ 
); 
SQLITE_API int sqlite3_rekey_v2(
    sqlite3 *db,     /* Database to be rekeyed */ 
    const char *zDbName,   /* Name of the database */ 
    const void *pKey, int nKey  /* The new key */ 
); 
+0

を、私はこれはGitHubの – D4ttatraya

答えて

5

インポートEncryptedStore.mファイルはありません: #import <sqlite3.h>

それはとても> <使用していますシステムsqliteライブラリがインポートされますが、これらの関数は含まれていません。 <>を ""変更すると、すべてがコンパイルされます。

+0

素敵なキャッチから 'EncryptedStore'クラスを更新することで解決しました!みましょう私のチェック – D4ttatraya

4

他の解決策が見つかりましたhere

主にヘッダー検索パスを変更します。
は(すなわちパスから/srcを削除)$(PROJECT_DIR)/sqlcipher
$(PROJECT_DIR)/sqlcipher/src
から、それを変更してみてください。」私のためのトリックを行いました。

+0

これは、CocoaPodsを使用してライブラリをインポートする場合に役立ちます。 – D4ttatraya

関連する問題