我正在尝试将sqlite与sqlcipher用于unity ios游戏。我得到一个 sqlite unity 示例 https://github.com/takezoux2/unity-orm我添加了一个 Unity 调用函数集键的方法:[DllImport("__Internal", EntryPoint = "sqlite3_key"(]private static extern int sqlite3_key(IntPtr stmHandle, string key, int len(;
我将sqlcipher编译为静态库(libsqlcipher.a(。将其添加到带有标题 sqlite3.h、sqlite3ext.h 的资产/插件/iOS
在 Unity 编辑器中,它无需加密即可工作。还行。我只想在ios设备上进行加密工作。我继续导出 Xcode 项目,在源代码树中配置OPENSSL_SRC,添加 C 标志 -DSQLITE_HAS_CODEC,添加搜索标题"sqlcipher",添加安全框架然后在设备上运行。
它有效!没有问题。我在文档文件夹中加密了数据库(我用十六进制转储-C,SQLiteManager对其进行了测试(
仅在我将应用程序存档到 ipa 文件(使用企业预配配置文件(后,才出现问题。我使用iFunbox将应用程序安装到设备。应用程序在启动时立即崩溃。
这是我从崩溃日志中得到的:异常类型:EXC_BAD_ACCESS(SIGABRT(异常子类型:KERN_INVALID_ADDRESS 0x00000000
我尝试用 PRAGMA 键='123456'替换sqlite3_key;不再崩溃,一切正常,但输出数据库未加密。
我不知道存档和构建模式有什么区别。如果我直接构建到设备(同时使用 sqlite3_key 和 PRAGMA key='123456';),我的示例有效,但存档模式不起作用。
我还尝试将sqlcipher xcode项目导入unity xcode项目(从插件/iOS中删除libsqlcipher.a(,将所有架构设置为armv7(也尝试使用/不使用-mno-thumb(,添加C标志-DSQLITE_HAS_CODEC,添加搜索标题"sqlcipher",添加安全框架,然后直接在设备上运行。它有效!!
然后我尝试存档应用程序,使用iFunbox安装应用程序。同样,我在启动时崩溃。
我不确定我的项目(https://github.com/tamhv/unity-orm-with-encrypt(是否设置了错误。请有人看看这个并给我建议。非常感谢!
我不能告诉你为什么崩溃,但你可以将你的应用程序切换到发布模式,然后调试它来找出答案。
在 XCode 中,在播放/停止按钮旁边的顶部工具栏上,按项目名称以调出上下文菜单并选择编辑架构。
在"运行/调试"下,将"生成"配置更改为"发布"。
现在从 XCode 运行该应用程序,希望您会看到相同的崩溃,但有堆栈跟踪。