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.
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
andLD_LIBRARY_PATH
is important because it is the runtime oflibimobiledevice
andifuse
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
andCPATH
is used at compile time to resolve dependencies.
Install development packages discovered through trial and error.
sudo apt-get install libbz2-dev python-dev autoconf automake libtool pkg-config libplist-dev libplist++-dev libusb-1.0-0-dev libgcrypt20-dev libgnutls28-dev libgpg-error-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):
- libusbmuxd
- usbmuxd
- libimobiledevice
- ifuse
cd ~/usr/src/libusbmuxd
./autogen.sh --prefix="$HOME/usr"
make && make install
cd ~/usr/src/libimobiledevice
./autogen.sh --prefix="$HOME/usr"
make && make install
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
cd ~/usr/src/ifuse
./autogen.sh --prefix="$HOME/usr"
make && make install
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
If this happens:
Try doing
ldconfig
from the command line