在Connect c#上获取iPhone的UDID



我正在尝试在c#应用程序上连接iPhone的UDID。我发现我可以使用IMobileDevice-net nuget包来做到这一点,但是我找不到有关如何使用其类的进一步文档。

有谁知道我在哪里可以找到文档或有示例代码?

指向IMobileDevice-net文档的链接似乎断开了。但是你可以在IMobileDevice-net的文档中找到它

。根据为IMobileDevice-net提供的示例代码,如果设备Name已知,则可以找到设备的UDID。相同的代码片段是:

ReadOnlyCollection<string> udids;
int count = 0;
var idevice = LibiMobileDevice.Instance.iDevice;
var lockdown = LibiMobileDevice.Instance.Lockdown;
// Get all devices connected
var ret = idevice.idevice_get_device_list(out udids, ref count);
if (ret == iDeviceError.NoDevice)
{
// Not actually an error in our case
return;
}
ret.ThrowOnError();
// Variable to store UDID of 
string foundUDID = "";
var nameOfDevice = "NameOfYourDevice";
// Get the device name
foreach (var udid in udids)
{
iDeviceHandle deviceHandle;
idevice.idevice_new(out deviceHandle, udid).ThrowOnError();
LockdownClientHandle lockdownHandle;
lockdown.lockdownd_client_new_with_handshake(deviceHandle, out lockdownHandle,
"Quamotion").ThrowOnError();
string deviceName;
lockdown.lockdownd_get_device_name(lockdownHandle, out deviceName).ThrowOnError();

deviceHandle.Dispose();
lockdownHandle.Dispose();
if(deviceName.equals(nameOfDevice))  //Check if name matches
{
foundUDID = udid;
break;
}
}

我现在正在尝试在连接上实现上述代码,并且我正在使用 LibUsbDotnet 设备通知库进行连接时事件,但现在的问题是 imobiledevice 仅在我连接了两个设备时才返回信息,如果只有一个设备连接,它会返回空白。 在连接的两台设备上,它显示设备 #1 信息。

这是我的代码

using iMobileDevice;
using iMobileDevice.iDevice;
using iMobileDevice.Lockdown;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using LibUsbDotNet.DeviceNotify;
using System.Windows.Forms;
namespace MobileDeviceDemo
{
class Program
{
public static IDeviceNotifier UsbDeviceNotifier = DeviceNotifier.OpenDeviceNotifier();
static void Main(string[] args)
{
//// Hook the device notifier event
UsbDeviceNotifier.OnDeviceNotify += OnDeviceNotifyEvent;
////NativeLibraries.Load();

// Exit on and key pressed.
Console.Clear();
Console.WriteLine();
Console.WriteLine("Waiting for USB Devices connection");
Console.Write("[Press any key to exit]");
while (!Console.KeyAvailable)
Application.DoEvents();
UsbDeviceNotifier.Enabled = false;  // Disable the device notifier
// Unhook the device notifier event
UsbDeviceNotifier.OnDeviceNotify -= OnDeviceNotifyEvent;
//GenerateUDIDs();
//Console.ReadLine();

}
private static void OnDeviceNotifyEvent(object sender, DeviceNotifyEventArgs e)
{
if (e.EventType.ToString() == "DeviceArrival")
{
Console.WriteLine("n Device Connected");
GenerateUDIDs();
}
}
private static void GenerateUDIDs()
{
NativeLibraries.Load();
ReadOnlyCollection<string> udids;
int count = 0;
var idevice = LibiMobileDevice.Instance.iDevice;
var lockdown = LibiMobileDevice.Instance.Lockdown;
var ret = idevice.idevice_get_device_list(out udids, ref count);
if (ret == iDeviceError.NoDevice)
{
// Not actually an error in our case
Console.WriteLine("No devices found");
return;
}
ret.ThrowOnError();
int NumberOfDeviceConnected = udids.Count;
Console.WriteLine($"n Number of Devices Connected: {NumberOfDeviceConnected}");
int ctr = 0;
// Get the device name
foreach (var udid in udids)
{
ctr++;
iDeviceHandle deviceHandle;
idevice.idevice_new(out deviceHandle, udid).ThrowOnError();
LockdownClientHandle lockdownHandle;
lockdown.lockdownd_client_new_with_handshake(deviceHandle, out lockdownHandle, "Quamotion").ThrowOnError();
string deviceName;
lockdown.lockdownd_get_device_name(lockdownHandle, out deviceName).ThrowOnError();
string sn;
iMobileDevice.Plist.PlistHandle tested1;
lockdown.lockdownd_get_value(lockdownHandle, null, "SerialNumber", out tested1).ThrowOnError();
//Get string values from plist
tested1.Api.Plist.plist_get_string_val(tested1, out sn);

Console.WriteLine($"n device: {ctr} Name: {deviceName}  UDID: {udid}  Serial Number: {sn}");
deviceHandle.Dispose();
lockdownHandle.Dispose();
}
}
}
}

输出为:

Waiting for USB Devices connection
[Press any key to exit]
Device Connected
Number of Devices Connected: 0  
<!--- 1 Device Connected Not Displaying Output --->
Device Connected
Number of Devices Connected: 1
<!--- 2 Device Connected Displaying Only the 1st device connected --->
device: 1 Name: iPhone  UDID: 00008030-001538121A8A802E  Serial Number: F2LZR12AN70F
Device Connected
Number of Devices Connected: 2
<!--- 3 Device Connected Displaying Only the 1st and 2nd device connected --->
device: 1 Name: iPhone  UDID: 8fe1ee498514e1d98a8539c0f414ca5f611a8ea7  Serial Number: F4GY2NZRJC67
device: 2 Name: iPhone  UDID: 00008030-001538121A8A802E  Serial Number: F2LZR12AN70F

显然iMobile设备代码在第一次连接时没有触发响应,任何帮助将不胜感激

最新更新