1. 程式人生 > >利用 Disk Drill 匯出 iOS App 沙盒中的資料

利用 Disk Drill 匯出 iOS App 沙盒中的資料

在 iOS 8 之前,我們想要匯出 iOS App 沙盒中的資料是一件非常簡單的事。只要利用 iTools之類的應用就可以隨意檢視 iOS App 沙盒中的所有資料,然後根據需要匯出資料。但是在 iOS 8 開始,Apple 加強了對沙盒的限制,iTools 這些應用就沒辦法匯出 iOS App 沙盒中的資料了。但是現在還是有辦法來匯出沙盒中的資料,只是步驟比原來要繁瑣許多。

我們知道在升級 iOS 系統之前,通常要對 iOS 裝置進行備份,不然裝置變磚的話就沒辦法恢復資料了。我們可以依照下圖進行手動備份:

在這裡 iTunes 備份的就是 iOS 裝置中 App 的沙盒資料。我們來看一下 iOS App 沙盒結構。如下圖:

iTunes 不會備份沙盒中所有的資料,只會備份沙盒中 Document 資料夾 和 Library 資料夾(不會備份 Library 資料夾中的 Caches 子資料夾)。所以我們現在只能匯出儲存於這兩個目錄的資料,其他目錄的資料應該是不行的。

動手實踐

既然我們知道 iTunes 的備份會備份沙盒資料,我們就可以操作這個備份資料來獲得我們想要的資料。下面我們開始動手來獲取想要的資料:

  1. 利用 iTunes 對裝置進行手動備份。
  2. 點選下圖「iOS 備份」選項下的恢復按鈕。

點選恢復按鈕之後,等一段時間,我們就能看到所有的備份資料。但是如果裝置上裝的 App 非常多的話,就很難找到我們需要的資料。

我們發現 Files 資料夾下的子資料夾都是以 AppDomain- 開頭,後面跟的其實是 App 的唯一識別符號,既然是唯一識別符號,我們就可以利用這個唯一識別符號來找到對應 App 的沙盒目錄。那我們如何獲取 App 的唯一識別符號呢?這裡我們可以利用這個 Retriever App 來獲取我們需要的唯一識別符號,雖然這個 App 最開始是為了檢視 App 的 URL Scheme。我們下載這個 App 的原始碼,然後利用 Xcode 編譯到我們自己的手機上,搜尋我們需要匯出資料的 App,點選進去之後檢視 CFBundleIdentifier 這一項,這個鍵對應的值就是我們需要的 App 唯一識別符號。

在 Disk Drill 的搜尋框輸入我們獲取的唯一識別符號,我們以唱吧為例,我們知道唱吧錄取的音訊檔案不足 60s 是不能上傳的,所以我們利用 Disk Drill 來取得錄取的音訊檔案。如下圖我在搜尋框中輸入 changba 就過濾掉了其他 App 的沙盒資料夾,然後展開資料夾,根據猜測 record 資料夾中包含的 m4a 檔案應該就是我們需要的音訊檔案了。

總結

這種方法相較於以前來說,繁瑣了不少,而且存在限制。但是因為 Apple 對 App 沙盒的限制提高了限制,我們只有通過這種迂迴的方式來解決問題。

當然現在有這種需求的人應該不多,自己也是屬於瞎折騰。有這種想法還是因為一個朋友需要匯出唱吧的音訊檔案,自己才猜測能不能利用這種方式來獲取沙盒中的檔案。