Я скомпилировал статическую библиотеку и связал SQLCipher и OpenSSL. Полный проект, make-файл и скомпилированная библиотека могут быть найдены здесь:
https://github.com/anujb/SQLCipherNet
Когда я связываю полученную библиотеку в обычном проекте Xcode Objective-C, вызов sqlite3_key
работает нормально.
Я связал ту же библиотеку с проектом MonoTouch, используя:
-gcc_flags "-L${ProjectDir} -lsqlciphernet -force_load ${ProjectDir}/libsqlciphernet.a"
Затем я изменил SQLite-NET для вызова функции key после каждой SQLite3.Open(...)
функции:
[DllImport("__Internal", EntryPoint = "sqlite3_key")]
public static extern Result Key(IntPtr db, string key, int keyLength);
Но я получаю EntryPointNotFoundException при вызове метода Key. Вот трассировка стека:
System.EntryPointNotFoundException has been thrown at:
at (wrapper managed-to-native) SQLite.SQLite3:Decrypt (intptr,string,int)
at SQLite.SQLiteConnection..ctor (System.String databasePath) [0x00031] in
../SQLite.cs:108
Очевидно, что трассировка стека не особенно полезна, но я не знаю, с чего начать отладку этой проблемы. Halp