Получить UDID iphone при подключении c# - PullRequest
1 голос
/ 25 февраля 2020

Я пытаюсь получить UDID Iphone при подключении к приложению c#. Я обнаружил, что могу сделать это с помощью пакета IMgetDevice- net nuget, но я не смог найти дополнительную документацию по использованию его классов.

Кто-нибудь знает, где я могу найти документацию или получить образец кода

Ответы [ 2 ]

3 голосов
/ 26 февраля 2020

Ссылка на документацию IMobileDevice-net кажется битой. Но вы можете найти его в Документация IMobileDevice- net

На основе примера кода, предоставленного для IMobileDevice-net, можно найти UDID устройства, если Name устройства известный. Фрагмент кода для того же:

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;
    }

}
0 голосов
/ 27 февраля 2020

Я сейчас пытаюсь реализовать приведенный выше код в Connect и использую LibUsbDo tnet Библиотека DeviceNotify для событий при подключении, но проблема в том, что 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

Видимо, iMobileDevice Code не является инициирующий ответ при первом подключении, любая помощь по этому вопросу будет принята с благодарностью

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...