现在,我将告诉您在一家小型gamedev公司中Unity的开发过程是什么样的,以及我们如何改进和自动化它。 尽管如此,2020年仍在院子里,足以用鼠标驱动...
关于鼠标,这可不是开玩笑的。 直到最近,与我们一起测试和开发游戏的过程看起来像这样:
安卓系统
- 开发人员编写代码
- 即将推出Android版本
- 上传到Google云端硬盘上的共享文件夹
- 测试人员下载最新版本
- 在Redmine中测试并抛出任务
- 转到:步骤1
iOS版本有点棘手:
的iOS
- 开发人员编写代码
- 前往Xcode专案
- Postbuild脚本向其中添加了本地化,SDK等
- 编译项目
- 已封存
- 导出到IPA文件(这不是很快就完成的,哈哈)
- 之后,您可以将IPA上传到Google云端硬盘上的共享文件夹
- 或上传到TestFlight,您可以在其中等待几天
- 测试仪下载最新的IPA
- 连接设备,安装应用程序
- 在Redmine中测试并抛出任务
- 转到:步骤1
这真是一种悲伤。 如果对于Android,该过程仍然可以接受(否),那么对于iOS,一切都非常漫长,不便且错误。 另外,大多数操作都是由开发人员手动完成的(此处是关于鼠标的操作),并且可能花费在开发上的时间要等待编译,导出Xcode项目等等。 还必须考虑到每个人都在同一个办公室,即 在开始整个地狱过程之前,您可以问/说些什么。
但是,总的来说,它可以正常工作并发布游戏:)
最近,在另一位
热爱自行车
制造和一切优化的爱好者
Leopotam的申请下,我决定使这一过程自动化。 结果是一个BASH脚本,它可以:
- 从GIT存储库下载最新更改
- 运行测试
- 在开发和发布中构建适用于Android的APK
- 在开发和发布中为iOS Xcode构建一个项目
- 编译它
- 存档和导出IPA
- 为它生成清单
- 生成要安装的HTML页面
- 使用sshpass将所有内容上传到服务器
- 将所有日志放在单独的文件夹中
- 发送电报通知
只需按一下按钮,所有这些。 无需启动Unity和Xcode。 以某种方式更有趣吧?

现在,当组装完成时,测试人员会在Telegram中收到一条通知,其中包含两个指向Android和iOS版本的链接。 仍然需要仔细研究它们并直接从设备安装应用程序。 它也可以在iOS下运行,并为此生成一个特殊的清单。
实际上,这是我第一次在BASH编程方面的经验,所以无论是否在风水中,我都不知道它是什么,但是它可以正常工作。 无论如何,脚本都会被更新和修改以满足项目的需求。 以下是有关正在执行的一些关键点:
如何开始为特定平台构建Unity项目
该
手册介绍了可用于构建的所有参数。 运行构建APK:
$UNITY -batchmode -quit -projectPath "$PATH" -executeMethod Game.BuildActions.AndroidDevelopment -buildTarget android -logFile "$LOGS_PATH/android_development.log"
在这里,
-buildTarget只是设置平台,而
-executeMethod在Unity项目中调用一个函数,该函数使用给定的参数开始构建,看起来像这样:
static void AndroidDevelopment () { PlayerSettings.SetScriptingBackend (BuildTargetGroup.Android, ScriptingImplementation.IL2CPP); PlayerSettings.SetScriptingDefineSymbolsForGroup (BuildTargetGroup.Android, "DEV"); EditorUserBuildSettings.SwitchActiveBuildTarget (BuildTargetGroup.Android, BuildTarget.Android); EditorUserBuildSettings.development = true; EditorUserBuildSettings.androidETC2Fallback = AndroidETC2Fallback.Quality32Bit; BuildReport report = BuildPipeline.BuildPlayer (GetScenes (), ANDROID_DEVELOPMENT_FILE, BuildTarget.Android, BuildOptions.None); int code = (report.summary.result == BuildResult.Succeeded) ? 0 : 1; EditorApplication.Exit (code); }
在这里,您可以设置自己的构建,条件等参数。 结果返回到BASH脚本。
如何编译和导出Xcode项目
Unity成功发布Xcode项目后,必须对其进行编译,存档并导出到IPA文件中,如下所示:
xcodebuild -project "$IOS_PATH/Unity-iPhone.xcodeproj" -quiet > "$LOGS_PATH/ios_build_release.log" 2>&1
xcodebuild -project "$IOS_PATH/Unity-iPhone.xcodeproj" -scheme "Unity-iPhone" archive -archivePath "$IOS_RELEASE/Unity-iPhone.xcarchive" -quiet > "$LOGS_PATH/ios_archive_release.log" 2>&1
xcodebuild -exportArchive -archivePath "$IOS_RELEASE/Unity-iPhone.xcarchive" -exportOptionsPlist "$IOS_RELEASE/options.plist" -exportPath $IOS_RELEASE -allowProvisioningUpdates -quiet > "$LOGS_PATH/ios_export_release.log" 2>&1
这里
options.plist是一个特殊的清单,指示导出方法,TeamID等。 可以通过以下命令查看所有可用参数:
xcodebuild -help
通过所有这些操作,指定了Unity生成的标准
Unity-iPhone.xcodeproj 。 如果您有
xcworkspace ,那么您需要检查其可用性和使用。
如何从BASH脚本向电报发送消息
您需要找到
BotFather机器人,将其写为/ start或/ newbot,填写字段并接收带有令牌的消息和指向文档的链接。 要使用漫游器发送消息,您需要运行以下命令:
curl $BOT_PROXY https://api.telegram.org/bot$BOT_TOKEN/sendMessage -m 60 -s -X POST -d chat_id=$CHAT_ID -d text="$1" > "$LOGS_PATH/bot.log" 2>&1
这里
CHAT_ID是在其中发送消息的聊天标识符。 例如,您可以将漫游器添加到测试人员所在的组中,并赋予其读取消息的权限。 之后执行:
https://api.telegram.org/bot[BOT_TOKEN]/getUpdates
并获取撰写内容的小组和成员的ID。 之后,指出要发送到的组或特定成员的ID。 我认为如何找到和配置通过代理发送,这不是问题。
其他功能,使用
sed的补丁清单模板和HTML,以及使用
sshpass将必要的文件上传到服务器。
可以快速更改的参数:
演示和来源
当然,所有这些都可以通过相同的Gitlab CI / CD来完成,为此已经有现成的脚本,可以运行,构建和测试。 简而言之,请使用现成的基础架构和机制。 但是您需要移动到它并进行配置。 也许我们会来解决这个问题,尽管它比以前要好得多。 而且,整个脚本编写得足够快。
2020年实现全自动化! 机器人注射,不是人。