[知識] iOS 中一些重要路徑
因為自己 iPhone 從上次備份還原後,iCloud 設定頁面登出按了就是沒反應,加上一堆系統不乾淨造成的神秘 bug,在這次重置 iPhone 時,透過提取 iTunes 備份檔手動還原各種 App (含系統層級的 App) 至 iPhone 上,也順便寫了這篇記錄一下 iOS 中常用到的路徑
那為什麼要這樣做呢?因為這些檔案往往是僅能透過 iTunes 備份而 iCloud 不備份的紀錄,如果今天你的 iTunes 前次備份很髒亂,就會想這樣手動還原了。
而通常可以如此方式瀏覽 iPhone 根目錄及各個系統層檔案夾往往是透過 Apple File Conduit 2、SSH、iFile、Filza 或者 FilzaJailed,當然一切大前提下都是越獄後的成果。
以 iOS 11.3.1 測試:
系統相關
一般系統 App 相關
往往都是在這資料夾下層:
0 1 2 |
/var/mobile/Library |
通話記錄 CallHistory
0 1 2 |
/var/wireless/Library/CallHistory |
iMessage 及簡訊
0 1 2 |
/var/mobile/Library/SMS |
Health Kit 資料 (備份需加密)
0 1 2 |
/var/mobile/Library/Health |
Home Kit 設定
0 1 2 |
/var/mobile/Library/homed |
iCloud Drive
0 1 2 |
/var/mobile/Library/Mobile Documents |
Safari 相關
0 1 2 |
/var/mobile/Library/Safari |
Watch OS 備份
其實只是幾個 plist 設定,非常輕量
0 1 2 |
/var/mobile/Library/NanoBackup |
將整個資料夾覆蓋後改至對應的權限即可
一般權限下可瀏覽的 User Folder
0 1 2 |
/var/mobile/Media/ |
媒體類
相機膠卷
0 1 2 |
/var/mobile/Media/DCIM 及 /var/mobile/Media/PhotoData |
非常肥大的兩個地方XD
語音備忘錄
0 1 2 |
/var/mobile/Media/Recordings |
一般 App 記錄檔
從 iOS 8 之後就更改至這新位置囉,不過我目前還是沒研究出怎麼從 hash 名稱資料夾找出對應 App 的方法
0 1 2 |
/var/mobile/Containers/Data/Application |
想看進一步教學可以察看:[教學] iOS 手動轉移 Walkr 紀錄及 Line 簡訊 (備份還原 App)
AppGroups
0 1 2 |
/var/mobile/Containers/Shared/AppGroup |
Cydia 相關
Tweak 設定
0 1 2 |
/var/mobile/Library/Preferences |
Dylib Path
0 1 2 |
/Library/MobileSubstrate/DynamicLibraries/ |
Deb path (Electra JB)
而 Cydia 安裝 Packages 後其實會將 deb 下載至一個暫存路徑再進行安裝:
0 1 2 |
/var/mobile/Library/Caches/com.saurik.Cydia/archives/ |
Cydia 設定 (包含軟體源)
0 1 2 |
/var/mobile/Library/Preferences/com.saurik.Cydia.plist |
還原步驟
大概把以上這些備份起來,再加上其他 App 的資料就可以構成一個蠻完整的備份了 (你還可以擺脫噁心的系統垃圾和 bug。)
那從 iTunes 備份提取這些資料 (可透過 iMazing 之類的 App 或者直接檢視 ~/Library/Application\ Support/MobileSync/Backup/
來獲取) 之後,該如何還原呢?
1.提取資料
2.透過 ssh 等有寫入權限的方式還原至手機上的對應資料夾
3.將還原後的資料夾更改至正確的權限 ( 755 及 mobile ),例如這個範例是 /var/mobile/Media/DCIM/
0 1 2 3 |
chmod 755 /var/mobile/Media/DCIM/ chown -R mobile:mobile /var/mobile/Media/DCIM/ |
4.如果有遇到擁有 db 資料庫類的資料,記得刪除 .db-shm 跟 .db-wal 的快取檔案 (可參考:皮樂姐姐的文章
5. iMessage 需要 reboot,其他都可以直接關閉 App (後台)重開就可以生效了
另外 Respring 的指令是:
0 1 2 |
killall -9 SpringBoard |
本篇僅供學術研究使用(疑?)