iOS合并unity遇到的问题总结

忙着了将近一个月的iOS集成unity 项目终于完工上线了。现将一些经验和坑记录下来,以备下次开发使用。(由于这是写在整个项目合并成功之后,并正常上线后,所以错误报告的截图无法提供,只能以问题和汉子的形式记录下来)

合并

首先是合并。其实demo合并很简单,无非是在打包出来的Xcode工程中添加Appdelegate和VC。一些基本的配置无须要修改,打包的工程已经将所有的配置都配置完成。那么难处就是将原来很庞大的工程集成unity工程。

基本配置

http://www.jianshu.com/p/dc68baad8bdb 这篇博主的博文给了我们详细的配置信息,我就不在累赘。主要提两个关键点:

1:路径配置

hearderpath和libaries path路径最好是复试。引用路径上会出现Appdelegate无法读取的问题。

2:设置unity的版本

这个版本要写对,否则会出现unity的材质问题。同时根据我们和联想ar的大牛探讨。发现现阶段unity2017.2.0f1导出的xcode工程,集成到原来app中会造成原来app崩溃的问题。所以我们将unity降至2017.1.1f1版本。

出现的问题及解决思路

问题1: 原app的项目加入了swift的混编,在集成unity工程时总是出现头文件错误,报错点在unityAppcontroller.h上#import Appdelegate 失效。(这里就不上图了)。
解决思路:由于插入了swift的混编文件,所以在编译时会将swift的桥接文件也编译,执行的顺序竟然比pch文件要高,所以在我们在桥接文件中加入pch文件引用,才解决了这个问题。(强烈不建议混编模式)

问题2:第三方库使用的静态库与unity使用的静态库造成冲突问题。
在前面问题结局后,发现编译能过通过,但是运行的时候就报错。这种可能性是有第三方库造成的。由于问题报错出现在堆栈上,很难看出是哪个造成的。这里就需要一个库一个库去排查。
解决思路:先删除cocoapod中库,一个一个排查,如果没有问题,再加入静态库。每加入一个编译一次,虽然很耗时,但也没有办法。

其他的问题:unity中导出工程有许多宏的判断,但这个宏有时候对整个项目有影响,而且有些渲染的问题都会出现在这个宏判断中。造成编译无法通过。
解决思路:buiding setting中可以解决一些问题。比如Bit code设置为no 这些可以谷歌到。有些问题谷歌不到的,比如宏定义下判断渲染,这里解决思路是,注释掉宏定义,保留其中一个判断的条件。

总体调试思路

如果有没有编译通过,看出现buiding setting配置上是否正确。编译通过,运行奔溃。查看崩溃信息点,逐步排查至某个函数,定位之后看看是第三方库造成的还是自己代码所致。

unity和iOS的交互问题

这个设计到c#的写法。不多阐述,主要一点是,unity要给出暴露接口。也就是一个静态函数,这个函数是唯一的,不能多写一个。我们在demo阶段写了两个静态函数,第一个通过第二个点击崩溃。写完后可以写一个类,里面实现类方法来实现交互。iOS利用unitysendMessage()这个方法来实现交互。要注意的一点是,有时候由于unity的问题。导出的工程中不包含extension c + 自定义静态函数接口文件。这时候我们要手动添加一个.mm文件来实现这个接口。这样才能进行调用。
同时iOS与unity的沙盒读取是可以执行的,文件路径要看unity工程师的函数读取时要不要加file:// 这个开头。demo中我们加了,但是在实际项目中,unity工程师换了一种写发,从而就不要加这个函数。

你可能感兴趣的:(iOS合并unity遇到的问题总结)