博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity编译iOS工程的自动化配置(XUPorter)
阅读量:4108 次
发布时间:2019-05-25

本文共 1938 字,大约阅读时间需要 6 分钟。

背景

通过Unity3d生成Xcode工程后:
打开 Unity-iPhone.xcodeproj,每次都需要手动添加一些配置选项,比如
1. 需要添加项目中使用的系统库
所以就需要每次都手动添加系统库:

2. bitcode配置 

低版本的unity(5.3.2以下)是不支持bitcode的,但是高版本的Xcode(7.0以上)默认是支持bitcode,这样他们就有冲突
所以就需要每次都关闭bitcode

3. HTTP的支持

iOS9后,默认只支持HTTPS的网络请求,那么HTTP怎么办?

所以就需要每次都手动修改ATS

4. 其他项目配置

这样问题就来了:

1) 如果配置太多,修改的地方太多,产品使用起来就相当不方便

2) 每次build后,都需要重新配置,太浪费时间了

所以希望能有一个自动配置的方式,那就再好不过了。

解决方案:

这里有一个开源的项目:,a dependency porter from Unity to Xcode。

XUPorter是一个开源的Unity3D编译Xcode工程的依赖管理工具。它能够在Unity3D生成Xcode工程文件后,根据配置文件自动添加依赖库和引用文件的工具。它使用PostProcessBuild标签,在编写后寻找配置文件并修改Xcode工程文件,完全运行于Unity3D编辑器中,而不需要涉及PostprocessBuildPlayer的脚本编写和调试,十分方便。

XUPorter的适用版本Unity3.5及以上,以及Xcode4.x以上。(Unity4.x及Xcode5中亦能工作正常)

原理

在Unity3.5中,加入了一个很棒的标签——,被该标签标注的函数将自动在build player后被调用,这为大家提供了一个不需要用脚本和命令行就能添加或修改编译得到的工程的绝好的入口。

从上面可以看到,XUPorter是从Unity3.5开始支持的,支持到Xcode4.x和Xcode5,并且作者几年前已经开始不维护了,所以对于新的版本,我们需要做一些修改

1. XUPorter标准的配置

添加动态链接库(仅仅限于dylib文件, Xcode7的tbd不支持),添加frameworks,以及"linker_flags"这些常用的配置都有了,但Xcode7后的新特性并不支持.

XUPorter常量定义

2.  bitcode

Xcode7出现的bitcode特性,Unity5.3.2版本才开始支持,所以在之前的版本需要主动设置为NO。

效果如下:

3. HTTP

Unity 5.2.1开始支持HTTP的设置,在之前的版本,需要修改Plist文件,主动添加上HTTP的支持

手动添加方式

(1) 在Info.plist中添加NSAppTransportSecurity类型Dictionary

(2) 在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES

XUPorter的源代码,XCPlist文件在windows下运行会crash,所以最好都在MAC下操作。再mod文件中添加对HTTP的设置

4. 其他配置选项

效果如下:

注意事项:

1. XUPorter必须在MAC下运行,因为自动添加的framework、tbd路径等,只有在MAC下才能配置正确

2. Unity5后,旧的XUPorter代码在projmods文件的 "libs"中添加“libz.tbd”不起效果,需要在"linker_flags"中添加"-lz"才行;不过新的XUPorter代码已经添加了对tbd文件的支持,由于其他作者的努力。

3. 对里面Bool类型的设置,也是字符串的形式, 大写的"YES"对应Yes;大写的"NO"对应No

4.Unity中如果选择mono的话,能捕获除零异常,NullReferenceException由于会触发iOS底层的signal异常,所以APP会崩溃;但如果是IL2CPP模式,NullReferenceException能通过C#捕获,程序不会崩溃,除零异常不会触发。

5. unity5.0.1: Default scripting backend is set to IL2CPP on iOS

6. unity在OSX El Capitan(10.11)下,build iOS项目时会crash

官方说是在 4.6.9已经修复,但在5.0.0以及接下来的多个版本还是存在这个问题,unity5后到底哪个版本修复了,版本太多无法验证,最新的5.3.4是OK的。

参考:

1. 

2.  

3.  

4.  

5.  

你可能感兴趣的文章
如何在 Notepad++ 開啟「分割視窗」同時檢視、比對兩份文件?
查看>>
Notepad++ 分割視窗的兩邊同時展示兩個不同文件的內容
查看>>
delphi Random()函数
查看>>
delphi 中 delete的用法
查看>>
MFC中char*,string和CString之间的转换
查看>>
COMMTIMEOUTS详解
查看>>
网络通信时字节序转换原理与网络字节序、大端和小端模式
查看>>
对SendMessage与PostMessage的理解
查看>>
用PostMessage或SendMessage发送结构体指针
查看>>
[VC]SendMessage和PostMessage发送消息(不同进程传递字符串)
查看>>
使用J-Link ARM烧录FLASH
查看>>
驻波比
查看>>
解FPGA中的RAM、ROM和CAM;ROM、RAM、DRAM、SRAM、FLASH
查看>>
FPGA的基础知识
查看>>
银联POS规范总结
查看>>
NFC无线功能
查看>>
APN
查看>>
MDK中One ELF Section per Function选项功能探究
查看>>
基于PBOC的电子钱包消费交易过程
查看>>
基于PBOC的电子钱包的圈存过程
查看>>