public ListDevices(string dllPath) { if (Usbmuxd.IsDllLoaded) { throw new InvalidOperationException("Usbmuxd already initialised! Cannot initialise multiple times"); } Usbmuxd.Setup(dllPath); // Note that we might get an empty "[usmbuxd] Error:" message. This is harmless, and is due to shutdown handling Usbmuxd.StartUsbmuxdListenThread(); }
public void Initialize() { // TODO: Investigate using StartInfo and the protocol for this information var proxyPath = Environment.GetEnvironmentVariable("_RIDER_UNITY_IOS_USB_PROXY_PATH"); var deviceID = Environment.GetEnvironmentVariable("_RIDER_UNITY_IOS_USB_DEVICE_ID"); var localPortString = Environment.GetEnvironmentVariable("_RIDER_UNITY_IOS_USB_LOCAL_PORT"); if (!proxyPath.IsNullOrEmpty() && !deviceID.IsNullOrEmpty() && !localPortString.IsNullOrEmpty()) { myLogger.Trace($"Proxy path: {proxyPath}"); myLogger.Trace($"Device ID: {deviceID}"); myLogger.Trace($"Local port: {localPortString}"); try { // Load the native library, initialise the function pointers and start listening for devices Usbmuxd.Setup(proxyPath); Usbmuxd.StartUsbmuxdListenThread(); // There is a potential race condition with starting the proxy thread before the listen thread has // discovered the devices. Make sure our device ID is found var retries = 0; bool found; while ((found = CanFindDevice(deviceID)) == false && retries < 3) { myLogger.Info("Cannot find device. Sleeping for 10ms"); Thread.Sleep(10); retries++; } // This shouldn't happen. Log it and let everything else continue to fail if (!found) { myLogger.Error("Unable to find device"); } var localPort = ushort.Parse(localPortString); if (!Usbmuxd.StartIosProxy(localPort, 56000, deviceID)) { myLogger.Error("StartIosProxy returned false"); Usbmuxd.StopUsbmuxdListenThread(); Usbmuxd.Shutdown(); return; } myLifetime.OnTermination(() => { try { Usbmuxd.StopIosProxy(localPort); Usbmuxd.StopUsbmuxdListenThread(); Usbmuxd.Shutdown(); } catch (Exception e) { myLogger.Error(e); throw; } }); } catch (Exception e) { myLogger.Error(e); throw; } } else { myLogger.Trace("No environment variables set for iOS debugging"); } }