中文站

Unity自动构建总结

手游项目组的Unity自动构建脚本勉强能用,遇到一些问题就小修小补,一直都没有去重构。但因为下面的原因,不得不重构:

1.xcode版本不一致,对应的ios打包方法有所不一样。目前有两个项目同时在开发,几个build机器的xcode版本又不一样,造成维护起来很吃力,统一起来迫在眉睫。

2.需要构造带有不同宏设置的真机版本。

既然决定重构了,在解决上述问题的同时,就顺便给新的构建脚本设定了一些更高的要求:

1.Unity针对ios构建,开放了一些操作xcode的接口,这些接口能够使构建脚本更加清晰,新的构建脚本应该尽量使用。

2.为以后的开发、甚至是上线预留一些必要的接口,比如各种渠道版本的构建、重签名的需求等。

下面就介绍下重构后构建脚本的基本框架:


上面的代码是构建脚本的入口函数,首先会调用do_analysisArgvs对输入的参数进行解析,然后根据目标版本(ios或者android),执行do_iosBuild或do_androidBuild,这两者就如字面含义,代表ios和android的具体构建流程。

以构造android版本为例子,只需要在命令行下输入以下内容:

python3 build.py --ios --buildnumber=0 --schema=debug

就可以按照既定的流程,构建出对应的android版本。(buildnumber代表svn版本号)

这里要特别说明的是,先前我们的构造脚本的参数都是通过读取配置文件来实现的,这里有2个问题:

1.构建不同的版本,需要修改配置文件,不方便;

2.配置文件不在svn版本控制内,出现过被误删。

当然,不是说命令行参数的方式一定比配置文件好,只是一个选择而已,用的顺手就好,如果用命令行的话,可以直接用python的getopt库。还有一个要说明的是,大家看上面的代码,会发现有一个ctx的变量,它其实是一个class的实例,我们将所有解析后的参数和预定义的全局变量,都存在这个实例的table中,这样做的好处是,不用到处去申明global了,做到了一次赋值,全局可用,这个还是非常好的。


上面的代码是构造ios版本的的函数,它会依次执行task_list中的方法。

这里要特别说明的是,先前我们的ios构建脚本是调用xcodebuild 命令来编译我们的项目生成 app,然后再用 xcrun 将 app 转 ipa的。现在的话改用xcodebuild archive 命令来直接生成我们需要的 ipa,这是因为官方说 PackageApplication is deprecated,而且archive是目前官方推荐的构建方法,所以这次就改成用archive的方式构建了。

当然构建ios,基本都会遇到证书的问题,个人经验是:

1.p12证书导入到mac的system目录,并且设置权限为所有人可访问,这里要注意这个属性的设置只有重启电脑才有效。

2.如果不设置所有人可访问,那么在ios打包的时候,就要调用下面的命令

   security unlock-keychain -p "kobe" ~/Library/Keychains/login.keychain

   security list-keychains

还有一个需要注意的是,在改成archive模式后,系统对项目的自动检查会更加严格一些,我就遇到一个下面的问题:在我们项目中,一些plugin在unity中设置如下图,会导致ios下打包失败,修改的方法是,勾选指定的平台,比如ios的plugin,就勾选iOS,不要勾选any platform。


新的打包脚本中,我们使用了unity开放给我们的修改xcode项目的接口,我截取了一部分代码说下:


通过调用unity开放给我们的接口,我们可以修改plist文件和xcode项目的属性。先前我们的构造脚本并没有使用这些接口,而是直接采取了物理移动文件和直接修改文件的形式。下面给大家展示下,我们先前打包脚本中的一段给xcode增加framework的代码:


对比下现在的构造脚本,只要调用接口AddFrameworkToProject即可,不仅清晰可读了很多,也保证了扩展性和适配性。


上面的代码是构造android版本的的函数,它会依次执行task_list中的方法。其中Prepare4Channel和Build4Channel是为以后的渠道版本留的接口,AndroidProtect是apk加固留的接口。

具体的每个方法这里就不一一展开了,网上也有很多相关的资料,一查便知。还有就是我们项目的打包脚本是通过jenkins去调度的,其中客户端和服务器版本的一致性保证也是在jenkins中实现的。

打包作为项目版本质量的基础,其稳定性是非常重要的。祝大家都找到适合自己项目组的打包脚本,从源头上提高版本质量的基础。

本文来自网易实践者社区    作者:朱洁

【声明】文章来源于网上采集整理,如有侵权,请邮件反馈yidunmarket@126.com,我们将尽快核实修改。 

相关推荐:

如何防止Unity手游代码被反编译?

Unity热更新介绍和测试方法

干货分享 | Unity手游安全加固解析及实践

如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染技术!