Unity iOS 构建在调试模式下工作,但在发布模式下崩溃(存档 IPA)



我正在尝试将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 运行该应用程序,希望您会看到相同的崩溃,但有堆栈跟踪。

最新更新