ターミナルを使ったiPhone写真その他データのバックアップ

# 目次
1. 対象デバイス
2. なぜ必要か
3. ifuseのインストール
4. iPhoneをパソコンに有線接続
5. iPhoneのUDIDを見つける
6. ifuseコマンドを使ってiPhoneのファイルシステムをドライブにマウント
7. 使用例
8. 後片付け(アンマウント&マウントポイント消去)
9. 参考にさせてもらったサイト



# 対象デバイス
### 接続する側
MacOS(Mojave検証済)
Linux(Ubuntu検証済)
(WindowsもPowerShellやPutty、Windows subsystem for linuxなどを使えば可能だと思われるが今回は検証しなかった。もちろんデュアルブートを使えば可能である。)

### 接続される側
iPhone
(ifuseを使えばiPadやiPodなども接続できるようだが今回は検証しなかった。)

# なぜ必要か
通常iPhoneをバックアップしたり写真などをMacに取り込むには、まず「写真」アプリかiTunesを使わなければなりません。ここで面倒なのが、写真は一度「写真」という名前のついたフォルダーに保存され、その後に思い思いの保存場所に移動されなければいけないことです。これは二度手間である一方で、コンピューター上の空き容量が少ない場合iCloudを経由しなければならないのでとても遅いです。そこで、今回は```ifuse```コマンドを使って脱獄なしにiPhoneのファイルシステムをドライブにマウントしてみることにしました。リモートサーバーやNASなどを使っている場合、ifuseを使えばコマンド一つでバックアップが可能なのでとても便利な上、ファイルはiPhoneからパソコンを経由し直接サーバーに送られるので、容量の心配もいりません。

# ifuseのインストール
インストール前にbrewやaptのアップデートをしっかりやりましょう。
## Mac
Macはbrewのレポシトリーにある現在のifuse stableバージョンに不具合があるので、brewの--HEADオプションを使ってlibimobiledeviceの最新版(内部にifuseが含まれる)をインストールします。([github ifuseエラー参照](https://github.com/libimobiledevice/libimobiledevice/issues/721))(2019年9月現在)
```
$ brew update
$ brew upgrade
$ brew install --HEAD libimobiledevice
```

上記でエラーが出る場合、libimobiledeviceが既にインストールされている可能性が高いので、以下のコードを試してみてください。
```
$ brew unlink usbmuxd; brew install --HEAD usbmuxd
$ brew unlink libimobiledevice; brew install --HEAD libimobiledevice
```
## Linux
Ubuntuは動作確認済です。他のディストロは場合によって、stableをスキップして最新版をインストールする必要があるかもしれません。
Ubuntu
```
$ sudo apt install ifuse
```
Debian
```
$ sudo apt-get install ifuse
```
Arch Linux
```
$ sudo pacman -S ifuse
```
Fedora
```
$ sudo dnf install ifuse
```

# iPhoneをパソコンに有線接続
lightningケーブルを使ってパソコンとiPhoneを接続します。
接続が成功すれば、iPhoneの画面に「このコンピューターを信頼しますか?」と出てくるので「はい」を押してください。
もしそのようなポップアップが出ない場合、何回か出てくるまでつなぎ直してみてください。

# iPhoneのUDIDを見つける
UDIDとはAppleのデバイスが固有する識別IDです。ifuseでファイルシステムをマウントするときに使います。
以下のコマンドで識別できます。

```
$ lsusb -s `lsusb | grep "Apple" | cut -d ' ' -f 2`:`lsusb | grep "Apple" | cut -d ' ' -f 4 | sed 's/://'` -v | grep iSerial | awk '{print $3}'
```

正常に動作すれば以下のような40文字の16進数が出力されます。これがあなたのiPhoneのUDIDです。
``02215c71e7a32fb4bb8662bf3a157df126c33283``

もしこれで正常に動作しない場合lsusbコマンドを単体で入力し、40文字の16進数を探してください。
```
$ lsusb
```

``lsusb``がインストールされていない場合、``lsusb``は``usbutils``とセットでインストールされるので、上記「ifuseのインストール」項にあるコマンドの``ifuse``を``usbutils``に置き換えてインストールしてください。


# ifuseコマンドを使ってiPhoneのファイルシステムをドライブにマウント
いよいよ本題です。
まずはマウントポイントを作りましょう。ここではホームディレクトリを例として取り上げていますが、他のディレクトリでも構いません。
```
$ cd ~/
$ mkdir iphone
```
マウントポイントを作ったらifuseを使ってiPhoneのファイルシステムを~/iphone/ディレクトリにマウントします。ここで使うUDIDの見つけ方は前の項で説明しています。
```
$ ifuse ~/iphone/ --udid [40文字のUDID]
```

~/iphone/ディレクトリの中は以下のようになっていれば成功です。
```
$ cd ~/iphone/
$ ls
AirFair      DCIM            LoFiCloudAssets  Photos     Recordings
Books        Downloads       MediaAnalysis    Purchases
CloudAssets  iTunes_Control  PhotoData        Radio
```

ちなみにここで写真が保存されているのはDCIMです。

# 特定アプリのデータをバックアップまたは編集したい場合
```
ifuse --documents com.kohei.iphone.recorder iphone-recorder/
```
com.kohei.iphone.recorderがアプリのバンドルID(bundleId)、iphone-recorderがデータのマウントポイントです。特定アプリのbundleIdを見つける手順は以下のサイトで紹介されています。  
https://mrvirk.com/how-to-find-app-bundle-id-ios.html (英語)

# 使用例
### 使用例1 ローカルにコピー
```
$ cd ~/
$ mkdir iphone-backup
$ cp -r ~/iphone/* ~/iphone-backup/
```

### 使用例2 リモートサーバーにコピー
sshログインしてコピー対象ディレクトリを作ります。
```
$ ssh exampleusr@examplehost.com
>Welcome to examplehost.com
$ cd ~/
$ mkdir iphone-backup
$ exit
```
scpを使ってファイルをサーバーにコピーします。
```
$ scp -r ~/iphone/* exampleusr@examplehost.com:/home/exampleusr/iphone-backup/
```

# 後片付け

iPhoneをアンマウントし、不要になったマウントポイントを(必要に応じて)消去します。
```
fusermount -u ~/iphone/
rmdir ~/iphone/
```

## 後片付けを間違えアンマウントできなくなった場合
```
fusermount -uz ~/iphone/
```

# 参考にさせてもらったサイト

[How To Access Photos & Videos On Your iPhone On Linux](https://www.addictivetips.com/ubuntu-linux-tips/access-photos-videos-on-your-iphone-on-linux/)
[How to access iPhone files with a disk mount](https://reincubate.com/support/how-to/mount-iphone-files/#fuse)
[Show UDID of iPhone](https://www.commandlinefu.com/commands/view/9632/show-udid-of-iphone)
[Using iFuse to Access iPhone Documents and Photos on Linux](https://www.youtube.com/watch?v=yWIEA21fYwo)