我的需求是:在现有的iOS工程中,添加Unity工程,还是以原来的iOS工程为主,在里面的某个地方,在需要的时候再调用unity工程,并且尽可能少的影响到现有工程。
本来,是按这位仁兄的帖子做:https://www.jianshu.com/p/3d9ae5244d82
结果发现编译通过不了,试了很多方式都不行。
然后,又按照另一位仁兄都方法:http://qingqinghebiancao.github.io/2016/09/07/Unity%E9%9B%86%E6%88%90%E5%88%B0iOS%E6%9C%AC%E5%9C%B0%E5%B7%A5%E7%A8%8B%E4%B8%AD/
还是有问题,这个时候我就停下来想,到底是哪里出了问题,编译都过不了。
当然,我并不是说以上2位的方法不对,因为工程不一样,所以表现的问题就不一样,应该是我的方法没找对。
比较的2位的方法,我发现他们都有一句话:在Build Phases中导入以下库(这里具体请查看导出的ios工程里面的库,千万不要重复导入),我想到,除了导入这些库要参考原来的Unity工程,其他的设置是不是都要考虑原来的Unity工程?于是,我其他的Build Setting相关项,都是照着原来Unity工程的设置来做,然后编译就是剩一个宏的问题,然后在我原来的pch文件(按之前2位的方法合并之后的pch文件)添加上缺少的宏:
#define PLATFORM_IOS 1
#define UNITY_SUPPORT_ROTATION PLATFORM_IOS
#define UNITY_TRAMPOLINE_IN_USE 1
然后编译通过了!
这里还要说一些细节问题:
1.导出的Unity工程一定要和现有的iOS工程尽可能匹配,比如是debug还是release,Bundle Identifier,Target SDK,Targer minimum iOS Version等。
2.在添加libiconv.2.dylib库的时候,开始找不到这个库,通过搜索只能找到libiconv.2.tdb,后来通过网上的方法,在添加的时候通过“add other...”,在里面通过(command+shift+G),在输入框输入/usr/lib,在系统的隐藏文件夹找到这个库。
3.我开发的工程不需要添加-weak_framework CoreMotion -weak-lSystem,加了反而编译不过。
4.我的工程也不需要修改C Language Dialect和C++ Language Dialect。
5.我的工程不需要在Build Phases新建运行脚本语句Run Script:
rm -rf "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Data"
cp -Rf "$PROJECT_DIR/Data" "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Data"
6.我的工程不需要为添加的.mm文件打上MRC标签。