private MlaunchArguments GetDeviceArguments( AppBundleInformation appInformation, string deviceName, bool isWatchTarget, int verbosity, XmlResultJargon xmlResultJargon, string[]?skippedMethods, string[]?skippedTestClasses, ListenerTransport deviceListenerTransport, int deviceListenerPort, string deviceListenerTmpFile) { var args = GetCommonArguments( verbosity, xmlResultJargon, skippedMethods, skippedTestClasses, deviceListenerTransport, deviceListenerPort, deviceListenerTmpFile); var ips = string.Join(",", _helpers.GetLocalIpAddresses().Select(ip => ip.ToString())); args.Add(new SetAppArgumentArgument($"-hostname:{ips}", true)); args.Add(new SetEnvVariableArgument(EnviromentVariables.HostName, ips)); args.Add(new DisableMemoryLimitsArgument()); args.Add(new DeviceNameArgument(deviceName)); if (_listenerFactory.UseTunnel) { args.Add(new SetEnvVariableArgument(EnviromentVariables.UseTcpTunnel, true)); } if (appInformation.Extension.HasValue) { switch (appInformation.Extension) { case Extension.TodayExtension: args.Add(new LaunchDeviceExtensionArgument(appInformation.LaunchAppPath, appInformation.BundleIdentifier)); break; case Extension.WatchKit2: default: throw new NotImplementedException(); } } else { args.Add(new LaunchDeviceArgument(appInformation.LaunchAppPath)); } if (isWatchTarget) { args.Add(new AttachNativeDebuggerArgument()); // this prevents the watch from backgrounding the app. } else { args.Add(new WaitForExitArgument()); } return(args); }