Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AntumDeluge/e6cd8c09e25350d0c4da7a52bddee45f to your computer and use it in GitHub Desktop.
Save AntumDeluge/e6cd8c09e25350d0c4da7a52bddee45f to your computer and use it in GitHub Desktop.
On Ubuntu 16.04, since iOS 10 update, libimobiledevice can't connect to my iPhone. This is my attempt to document a fix.

Why this document?

I upgraded my iPhone 5s to iOS 10 and could no longer retrieve photos from it. This was unacceptable for me so I worked at achieving retrieving my photos. This document is my story (on Ubuntu 16.04).

The solution is to compile libimobiledevice and ifuse from source.

While I did my best to think of beginners when creating this guide; This guide is not for the faint of heart. If you've not compiled software before then I recommend you practicing inside of VirtualBox before attempting this on your real system. Follow this guide at your own risk because I can't make any guarantees based on unknown individual skill level.

Support

This solution works for (posted via comments):

  • Archlinux
  • Debian GNU/Linux 8 - 64 bits
  • Linux Mint 18
  • Linux Mint 18.1 Serena
  • Ubuntu 16.04

This solution does not work for the following:

  • Ubuntu 14.04

On Ubuntu 16.04, I have personally used this method to connect to:

  • iOS 10
  • iOS 10.1
  • iOS 10.2
  • iOS 10.3.1

If you get this working on a flavor that I don't list, then please post a comment and I will update this support section.

Setup environment

Don't forget to set up your environment before building. I typically build and install packages to my local user at $HOME/usr.

sudo apt-get install -y build-essential git

Here's a peek at my .bashrc settings:

[ ! -d "$HOME/usr/src" ] && mkdir -p "$HOME/usr/src"
export PKG_CONFIG_PATH="${HOME}/usr/lib/pkgconfig:${PKG_CONFIG_PATH}"
export CPATH="${HOME}/usr/include:${CPATH}"

export MANPATH="${HOME}/usr/share/man:${MANPATH}"

export PATH="${HOME}/usr/bin:${PATH}"
export LD_LIBRARY_PATH="${HOME}/usr/lib:${LD_LIBRARY_PATH}"

Notes:

  • Important! PATH and LD_LIBRARY_PATH is important because it is the runtime of libimobiledevice and ifuse to fix mounting iOS 10 devices.
  • MANPATH is only used when looking up man pages so it's optional (I recommend it).
  • PKG_CONFIG_PATH and CPATH is used at compile time to resolve dependencies.

Build libimobiledevice and ifuse from HEAD

Install development packages discovered through trial and error.

sudo apt-get install automake libtool pkg-config libplist-dev libplist++-dev python-dev libssl-dev libusb-1.0-0-dev libfuse-dev

Clone the sources.

cd ~/usr/src
for x in libusbmuxd usbmuxd libimobiledevice ifuse; do git clone https://github.com/libimobiledevice/${x}.git;done

Now build in order (the order matters):

  1. libplist (not required on Ubuntu 16.04)
  2. libusbmuxd
  3. libimobiledevice
  4. usbmuxd
  5. ifuse

If you have a system package installed which is in the above list then I recommend uninstalling it.

Build libusbmuxd
cd ~/usr/src/libusbmuxd
./autogen.sh --prefix="$HOME/usr"
make && make install
Build libimobiledevice
cd ~/usr/src/libimobiledevice
./autogen.sh --prefix="$HOME/usr"
make && make install
Build usbmuxd

Unfortunately, sudo make install is required because it needs to write to /lib/udev/rules.d and /lib/systemd/system.

cd ~/usr/src/usbmuxd
./autogen.sh --prefix="$HOME/usr"
make && sudo make install
Build ifuse
cd ~/usr/src/ifuse
./autogen.sh --prefix="$HOME/usr"
make && make install

Connect iPhone

Create a mount point and verify the paths of the tools before executing.

$ mkdir -p ~/usr/mnt

$ type -p ifuse
/home/sam/usr/bin/ifuse

$ type -p idevicepair
/home/sam/usr/bin/idevicepair

Now attempt to mount using ifuse.

$ idevicepair pair
SUCCESS: Paired with device 37b633350ab83dc815a6a97dcd6d327b12c41968

$ ifuse ~/usr/mnt/

$ ls ~/usr/mnt/
AirFair  Books  CloudAssets  DCIM  Downloads  FactoryLogs  iTunes_Control  MediaAnalysis  PhotoData  Photos  PhotoStreamsData  PublicStaging  Purchases  Radio  Recordings  Safari  Vibrations

When you're finished. Unmount ~/usr/mnt using fusermount. For example,

fusermount -u ~/usr/mnt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment