Search code examples
ioslibimobiledevice

Why are Windows binaries of libimobiledevice dependent on iTunes?


libimobiledevice claims to be a cross-platform library for communication with iOS devices. On Linux it might require some other packages to work but it does not require any software from Apple (which hardly exists for Linux). However, any form of it on Windows doesn't work without iTunes (or, more specifically, an Apple Device Driver and Apple Application Support that you get with iTunes). If this library is truly cross-platform, what does Windows lack compared to Linux that makes it impossible to run without iTunes?

As a side question, I am only looking to mount both main and document parts of an iDevice file system, so if there is a simple way please let me know.


Solution

  • libimobiledevice isn't dependent on iTunes, but on the Apple Device Driver and the Apple Application Support service as you indicate.

    libimobiledevice has the equivalent of the Apple Device Driver and the Apple Application Support components in the form of the open source usbmuxd library.

    However, usbmuxd uses libusb to interact with USB devices. libusb has very good support for Linux and macOS, but some functionality is missing on Windows. In particular, you cannot set the device configuration using libusb for Windows devices, and it's required to work with iOS devices.

    There are companies that do provide support for connecting to iOS devices on Windows without any Apple software on a commercial basis. The company I work for, Quamotion, is one of those; so you can get in touch with us if you want to know more. However, in most cases, there's little benefit to doing so: the Apple software is stable and well tested, so there's little incentive in using a 3rd party library for that.

    If what you're looking for is accessing parts of the iOS file system on Windows, you don't need to worry about removing iTunes. You can connect to the AFC service running on the iOS device to interact with the Apple file system. libimobiledevice provides an API (not a command line program that you can use on Windows, though); and there are bindings in various programming languages for libimobiledevice.