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.
Who is this guide intended for?
Compiling software is what I would consider an advanced Linux skill. If you're not interested in tinkering with your operating system then this guide may not be for you. There's a lot of concepts I don't explain or gloss over with brevity to keep these instructions brief (compared to explaining everything).
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
- iOS 10.3.3
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