Profiling IOS With Unreal Insights

Unreal Insights是UE自4.23之后提供的一个Profiling工具,可以非常方便地看到游戏运行的各个线程的火焰图,但是官方文档只提供了PC和Android的连接方法,并不直接支持IOS,不太方便。研究了一下发现IOS主要是网络策略的问题,本篇文章提供一个UE与IOS设备的真机Profliing以及端口互通方案,可以支持实时的Profiling以及Cook on the fly等IOS真机与PC数据互通的需求。

UE的Unreal Insight本质上是在PC上创建了一个端口为1980的TCP监听服务,在我们的游戏程序启动时,会主动连接到这个端口,实现实时Profiling时数据传递的目的。

在同一LAN的环境下,IOS设备可以直接与LAN内机器互通,只需要在程序启动时指定tracehost(Unreal Insight)或者filehostip(cook on the fly)来指定主机IP。

所以想要实现我们的需求有两步:

  1. 让IOS设备能够访问PC的端口或者与PC在同一LAN
  2. 在设备上启动游戏时指定PC的IP地址能够正确创建连接

在Android上,可以通过数据线连接设备,通过adb reverse将PC的端口转发到设备端口,在游戏启动时指定127.0.0.1即可。因为通过adb实现了端口的反向转发,所以在Android设备上连接设备本地的1980端口,就相当于连接了PC的1980端口。在IOS上,想要实现这一点不那么容易。

最开始考虑的是USB连接设备,找到一种类似adb reverse的方案,把PC端口映射到IOS的设备端口,但是发现没有很好的实现,usbmuxd倒是提供了一种forward的方案,能把IOS设备端口映射到PC,但是这和我们需求不符合,硬要实现的话还需要自己做一层转发服务,太过麻烦。

所以只能从另一个方面入手:让IOS设备与PC保持在同一LAN内!

但是这种需求在部分内网的网络策略上也有限制:

  1. 办公网与WIFI不在同一网段,子网隔离
  2. 不允许自己部署路由

所以最终想到的方法是:通过IOS通过USB分享热点给PC,使PC与IOS在同一网段。下面介绍一下配置方法。

首先,在IOS设备的设置中启用个人热点(IOS要求必须要有SIM卡才能开启个人热点):

然后通过USB连接PC,在PC上打开设备管理器查看网络适配器中是否存在Apple Mobile Devices Ethernet项:

然后打开控制面板中的网络连接的适配器设置,可以看到自动创建了两个虚拟适配器:

这种情况下,PC就已经连接上了IOS设备共享的网络。可以通过ipconfig查看IP地址:

172.20.10.2就是PC连接IOS共享网络后被分配的IP地址,可以通过arp -a查看IOS设备在这个LAN里的IP地址:

目前的网络情况:

  1. PC 172.20.10.2
  2. IOS 172.20.10.15

在同一个LAN的同一网段,可以开始真机Profiling了!

首先,还是需要在PC上启动Unreal Insight,然后编辑一个ue4commandline.txt,将以下内容填入其中(根据情况修改项目名、PC的IP地址):

1
../../../FGame/FGame.uproject -Messaging -tracehost=172.20.10.2 -Trace=CPU 

通过爱思助手或iMazing之类的工具,放入游戏的数据目录即可:

然后启动IOS APP,即可在PC上Unreal Insight端看到数据:

最后,使用这种方式,就能够通过USB实现UE与调试设备的数据互通。只要能让IOS设备与PC在同一LAN,Profiling或Cook on the fly等都可以实现,能够避免因为网络策略导致的开发障碍。

全文完,若有不足之处请评论指正。

微信扫描二维码,关注我的公众号。

本文标题:Profiling IOS With Unreal Insights
文章作者:查利鹏
发布时间:2021年08月19日 14时14分
本文字数:本文一共有1.5k字
原始链接:https://imzlp.com/posts/14154/
许可协议: CC BY-NC-SA 4.0
文章禁止全文转载,摘要转发请保留原文链接及作者信息,谢谢!
您的捐赠将鼓励我继续创作!