Netimobiledevice 2.0.1

dotnet add package Netimobiledevice --version 2.0.1                
NuGet\Install-Package Netimobiledevice -Version 2.0.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Netimobiledevice" Version="2.0.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Netimobiledevice --version 2.0.1                
#r "nuget: Netimobiledevice, 2.0.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Netimobiledevice as a Cake Addin
#addin nuget:?package=Netimobiledevice&version=2.0.1

// Install Netimobiledevice as a Cake Tool
#tool nuget:?package=Netimobiledevice&version=2.0.1                

Netimobiledevice

Netimobiledevice is a pure C# implementation for working with iOS devices (iPhone, iPad, iPod).

Features

  • Backup an iOS device in the normal iTunes way or as customised as you like.
  • Device discovery and connection via Usbmux.
  • Interact with iOS services using Lockdownd or Remoted
  • Handle all property lists files (.plist) whether they are in XML or Binary format
  • Use remoted Apples new framework for working with iOS devices. This uses the RemoteXPC protocol and you can read more about it here

Installation

To install Netimobiledevice, you can use the following command in the Package Manager Console:

Install-Package Netimobiledevice

Alternatively, you can use the .NET CLI:

dotnet add package Netimobiledevice

Usage

A few examples of how to use Netimobiledevice are below.

Get a list of all currently connected devices using:

using Netimobiledevice.Usbmuxd;

List<UsbmuxdDevice> devices = Usbmux.GetDeviceList();
Console.WriteLine($"There's {devices.Count} devices connected");
foreach (UsbmuxdDevice device in devices) {
    Console.WriteLine($"Device found: {device.DeviceId} - {device.Serial}");
}

Listen to connection events:

Usbmux.Subscribe(SubscriptionCallback);

private static void SubscriptionCallback(UsbmuxdDevice device, UsbmuxdConnectionEventType connectionEvent)
{
    Console.WriteLine("NewCallbackExecuted");
    Console.WriteLine($"Connection event: {connectionEvent}");
    Console.WriteLine($"Device: {device.DeviceId} - {device.Serial}");
}

Get the app icon displayed on the home screen as a PNG:

using (UsbmuxLockdownClient lockdown = MobileDevice.CreateUsingUsbmux("60653a518d33eb53b3ca2322de3f44e162a42069"))
{
    SpringBoardServicesService springBoard = new SpringBoardServicesService(lockdown);
    PropertyNode png = springBoard.GetIconPNGData("net.whatsapp.WhatsApp");
}

Create an iTunes backup:

using (UsbmuxLockdownClient lockdown = MobileDevice.CreateUsingUsbmux("60653a518d33eb53b3ca2322de3f44e162a42069")) {
    using (Mobilebackup2Service mb2 = new Mobilebackup2Service(lockdown)) {
        mb2.BeforeReceivingFile += BackupJob_BeforeReceivingFile;
        mb2.Completed += BackupJob_Completed;
        mb2.Error += BackupJob_Error;
        mb2.FileReceived += BackupJob_FileReceived;
        mb2.FileReceiving += BackupJob_FileReceiving;
        mb2.FileTransferError += BackupJob_FileTransferError;
        mb2.PasscodeRequiredForBackup += BackupJob_PasscodeRequiredForBackup;
        mb2.Progress += BackupJob_Progress;
        mb2.Status += BackupJob_Status;
        mb2.Started += BackupJob_Started;

        await mb2.Backup(true, "backups", tokenSource.Token);
    }
}

Pair an iOS device asyncronously:

using (UsbmuxLockdownClient lockdown = MobileDevice.CreateUsingUsbmux(testDevice?.Serial ?? string.Empty)) {
    Progress<PairingState> progress = new();
    progress.ProgressChanged += Progress_ProgressChanged;
    await lockdown.PairAsync(progress);
}

private void Progress_ProgressChanged(object? sender, PairingState e)
{
    Console.WriteLine($"Pair Progress Changed: {e}");
}

Get structured logging information using the logger of your choice (provided it can interact with Microsoft.Extentions.Logging ILogger):

using Microsoft.Extensions.Logging;

using ILoggerFactory factory = LoggerFactory.Create(builder => builder.SetMinimumLevel(LogLevel.Debug).AddConsole());
using (LockdownClient lockdown = MobileDevice.CreateUsingUsbmux(testDevice?.Serial ?? string.Empty, logger: factory.CreateLogger("Netimobiledevice"))) {
    using (DeviceBackup backupJob = new DeviceBackup(lockdown, path)) {
        await backupJob.Start(tokenSource.Token);
    }
}

Services

The list of all the services from lockdownd which have been implemented and the functions available for each one. Clicking on the service name will take you to it's implementation, to learn more about it.

License

This project is licensed under the MIT LICENSE.

Contributing

Contributions are welcome. Please submit a pull request or create an issue to discuss your proposed changes.

Acknowledgments

This library was based on the following repositories with either some refactoring or in the case of libraries such as libusbmuxd translating from C to C#.

  • BitConverter: Provides a big-endian and little-endian BitConverter that convert base data types to an array of bytes, and an array of bytes to base data types, regardless of machine architecture.
  • libimobiledevice: A cross-platform protocol library to communicate with iOS devices
  • libusbmuxd: A client library for applications to handle usbmux protocol connections with iOS devices.
  • MobileDeviceSharp: A C# object oriented wrapper around Libimobiledevice
  • PList-Net: .Net Library for working with Apple *.plist Files.
  • pymobiledevice3: A pure python3 implementation to work with iOS devices.
  • UniversalTunTapDriver: A driver for TUN/TAP devices to support basic operations on both linux and windows platform.
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.0.1 135 12/20/2024
2.0.0 404 10/24/2024
1.2.1 481 9/18/2024
1.2.0 130 9/16/2024
1.1.1 402 7/15/2024
1.1.0 191 7/1/2024
1.0.3 241 5/31/2024
1.0.2 230 5/9/2024
1.0.1 211 4/29/2024
1.0.0 794 4/17/2024
0.13.2 346 2/22/2024
0.13.1 305 2/12/2024
0.13.0 310 2/9/2024
0.12.0 293 2/5/2024
0.11.0 315 1/30/2024
0.10.2 440 1/3/2024
0.10.1 567 12/20/2023
0.10.0 421 12/18/2023
0.9.7 562 11/7/2023
0.9.6 510 10/16/2023
0.9.5 535 10/12/2023
0.9.4 482 10/11/2023
0.9.3 484 10/10/2023
0.9.2 495 10/5/2023
0.9.1 539 9/27/2023
0.9.0 516 9/15/2023
0.8.0 590 8/31/2023
0.7.3 541 8/22/2023
0.7.2 604 8/21/2023
0.7.1 611 8/17/2023
0.7.0 574 8/15/2023
0.6.4 618 8/9/2023
0.6.3 692 8/3/2023
0.6.1 685 7/27/2023
0.6.0 685 7/25/2023
0.5.3 691 6/9/2023
0.5.2 662 6/8/2023
0.5.1 673 5/31/2023
0.5.0 687 5/24/2023
0.4.0 699 5/10/2023
0.3.0 689 5/9/2023