Hi,
I’m using Gauntlet to run automation tests using an iOS game build.
I’d like to be able to run iOS tests from Horde in a completely automated manner, similar to how Android works.
I’ve been able to get the following command to successfully run automation tests on an iPhone, however it’s not able to run properly without user input:
./RunUAT.sh RunUnreal -project=<project> -Platform=iOS -Build=./Projects/<project>/Binaries -Configuration=Test -Test="UE.TargetAutomation" -RunTest="StartsWith:System.Core.Math" -HostIP=$(ipconfig getifaddr en0)This works locally but needs interaction with the iPhone:
- There’s a permission popup that requires me to press on the [Allow] button: “<project>” would like to find and connect to devices on your local network
- The iOS Client is unable to initially connect to the Editor running on the Mac.
- I can get the iOS Client to connect by pressing the home button on the iPhone, waiting 10 seconds, then pressing the <project> icon to bring it back to the foreground, where it retries and successfully creates a connection. The Editor will start communicating with the Client, gathering the list of available tests and running them one by one.
I’m wondering if you’ve hit either of these issues, and if you have, do you have any workarounds or fixes for them?
Does Epic Games have a fully automated process of iOS testing, for example using Horde?
I added a Verbose LogSockets message to help gather the connection error code (used by the following section)
bool FSocketBSD::Connect(const FInternetAddr& Addr)
{
if (Addr.GetProtocolType() != GetProtocol())
{
UE_LOG(LogSockets, Warning, TEXT("Tried to connect with an address with protocol %s using a socket with protocol %s"),
*Addr.GetProtocolType().ToString(), *GetProtocol().ToString());
return false;
}
const FInternetAddrBSD& BSDAddr = static_cast<const FInternetAddrBSD&>(Addr);
int32 Return = connect(Socket, (const sockaddr*)&(BSDAddr.Addr), BSDAddr.GetStorageSize());
check(SocketSubsystem);
ESocketErrors Error = SocketSubsystem->TranslateErrorCode(Return);
UE_LOG(LogSockets, Verbose, TEXT("Connect attempt - Return Code: %i Error Code: %i"),
Return, static_cast<int>(Error));
// EWOULDBLOCK is not an error, and EINPROGRESS is fine on initial connection as it may still be creating for nonblocking sockets
return ((Error == SE_NO_ERROR) || (Error == SE_EWOULDBLOCK) || (Error == SE_EINPROGRESS));
}