Unity ios构建工作与调试模式,但崩溃与发布模式(存档ipa)

时间:2014-12-01 04:38:06

标签: sqlite unity3d sqlcipher

我试图将sqlite与sqlcipher一起用于团结ios游戏。 我得到一个sqlite统一示例https://github.com/takezoux2/unity-orm 我添加了一个统一的方法来调用函数集键: [DllImport(" __ Internal&#34 ;, EntryPoint =" sqlite3_key")] private static extern int sqlite3_key(IntPtr stmHandle,string key,int len);

我将sqlcipher编译为静态库(libsqlcipher.a)。使用标题sqlite3.h,sqlite3ext.h

将其添加到Assets / Plugins / iOS

在Unity编辑器中,它无需加密即可运行。没关系。我只想在ios设备上进行加密工作。 我继续前进导出Xcode项目,在源树中配置OPENSSL_SRC,添加C标志-DSQLITE_HAS_CODEC,添加搜索头" sqlcipher",添加安全框架然后在设备上运行。

有效!没有问题。我在Document文件夹中加密了数据库(我用hexdump -C,SQLiteManager测试了它)

仅在将应用程序归档到ipa文件(使用企业配置文件)后才会出现此问题。我使用iFunbox将app安装到设备上。应用程序在发布时立即崩溃。

这是我从崩溃日志中得到的: 例外类型:EXC_BAD_ACCESS(SIGABRT) 异常子类型:KERN_INVALID_ADDRESS位于0x00000000

我尝试用PRAGMA键替换sqlite3_key =' 123456' 没有更多的崩溃,一切正常,但输出数据库没有加密。

我不知道存档和构建模式之间有什么不同。如果我直接构建到设备(sqlite3_key和PRAGMA key =' 123456&#39 ;;),我的示例有效,但归档模式没有。

我也尝试将sqlcipher xcode项目导入到Unity xcode项目中(从Plugins / iOS中删除libsqlcipher.a),将所有架构设置为armv7(也可以尝试使用/不使用-mno-thumb),添加C标志-DSQLITE_HAS_CODEC,添加搜索标题" sqlcipher",添加安全框架,然后直接在设备上运行。它工作!!!

然后我尝试存档应用,使用iFunbox安装应用。再一次,我在发布时崩溃了。

我不确定我的项目是否设置错误(https://github.com/tamhv/unity-orm-with-encrypt)。请有人看看这个并给我建议。非常感谢你!

1 个答案:

答案 0 :(得分:0)

我无法告诉您崩溃的原因,但您可以将应用切换到发布模式,然后进行调试以找出答案。

在XCode中,在播放/停止按钮旁边的顶部工具栏上按下项目名称以显示上下文菜单,然后选择编辑模式。

在Run / Debug下,将Build配置更改为Release。

现在从XCode运行应用程序,希望您能看到相同的崩溃,但有一个堆栈跟踪。