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.
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.
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 gitHere'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!
PATHandLD_LIBRARY_PATHis important because it is the runtime oflibimobiledeviceandifuseto fix mounting iOS 10 devices. MANPATHis only used when looking up man pages so it's optional (I recommend it).PKG_CONFIG_PATHandCPATHis used at compile time to resolve dependencies.
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;doneNow build in order (the order matters):
- libplist (not required on Ubuntu 16.04)
- libusbmuxd
- libimobiledevice
- usbmuxd
- ifuse
If you have a system package installed which is in the above list then I recommend uninstalling it.
cd ~/usr/src/libusbmuxd
./autogen.sh --prefix="$HOME/usr"
make && make installcd ~/usr/src/libimobiledevice
./autogen.sh --prefix="$HOME/usr"
make && make installUnfortunately, 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 installcd ~/usr/src/ifuse
./autogen.sh --prefix="$HOME/usr"
make && make installCreate 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/idevicepairNow 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