Quantcast
Channel: 應用教學 – Hiraku Dev
Viewing all articles
Browse latest Browse all 94

合併 iOS 的「健康」來源裝置

$
0
0

有一天我無意間發現 iOS 的「健康」app 會把過去每次配對的 Apple Watch 當作一個新的資料來源,然後強迫症就發作了,因為覺得那些「來源」在那邊一排看起來很醜…所以就研究了方法把他們全部合併。

▼ 健康的「來源」超多,每個項目裡面都會有一部分的資料

 

首先,你必須要越獄,或者有方法可以替換「已加密」的 iTunes 備份檔案才有辦法修改。這是因為「健康」的資料庫必須要透過加密的 iTunes 備份才可以備份成功。由於我是有辦法越獄的,所以就沒有測試 iTunes 備份,修改資料庫之後再還原這個方法。

透過進入越獄後的系統,可以找到 /User/Library/Health 這個路徑,先手動把裡面所有的東西都複製到電腦上,並且再複製一份作為安全備份用(避免改壞)。接著下載「DB Browser for SQLite」,不同系統平台都有,所以不必擔心你用的是 Windows 或 Mac。

下載之後開啟備份資料庫中的 healthdb_secure.sqlite,選擇 Browse Data,然後在 Table 選擇 objects,再拉到最下面,看最常出現的兩個 provenance 號碼。

▼ 從這邊我們可以看到「最下面」最常出現的兩個號碼分別是 277 跟 261

 

接著切換 tabledata_provenance 這個資料表,看 ROWID277261origin_product_type 為何。其中一個應該會是 iPhone,另外一個是 Apple Watch。然後記住對應數字是哪一個裝置。接著在過濾欄位輸入 iPhone 或 Watch,先過濾出所有的 iPhone 或者 Apple Watch ROWID。要注意的是也要檢查 source_version 欄位是否為標準的 iOS 版本或者 Apple Watch 版本號碼,如果不是的話就不要。

▼ 透過過濾關鍵字方式找到所有符合的 ROWID

 

過濾完畢之後,紀錄所有搜尋結果的 ROWID,你可以直接對那一欄全選,然後複製貼上到記事本之類的。記得 iPhone 跟 Apple Watch 都要做。接著請找看看有沒有 UnknownDevice 的欄位。如果有的話,看他的 sync_provenance 裡面的數字,然後看看有沒有其他欄位是有同樣數字,但是是有裝置名稱的,如果有的話,那這個 UnknownDevice 就是等於有顯示的那個裝置名稱。

重頭戲來了,接下來我們要大量修改資料庫,在前面的步驟中,我們準備了一些 ID,分別是:

  • 最新的 iPhone ROWID
  • 最新的 Apple Watch ROWID
  • 過去的 iPhone ROWID
  • 過去的 Apple Watch ROWID

Execute SQL 那邊輸入

[crayon-5b13a273cde95910239208/]

如果你舊的 ID 有超多,就要全部輸入,然後 Apple Watch 的跟 iPhone 的指令要分別下,或者如果你不介意的話全部混在一起變成同一個 ID 也是可以…輸入之後執行 SQL,再存檔,丟回去 iPhone 原本的路徑裡面。為了讓資料庫快取清除,要刪掉 iPhone 的。Health 資料夾裡面所有檔名結尾是 shmwal 的檔案。為了確保資料庫權限,建議把檔案權限設為 777,這樣雖然不是最正確的權限,但至少不會造成權限不足無法寫入資料的問題。

丟回檔案之後,Respring 或者重開機,再開啟「健康」App,看到來源那邊,會發現雖然裝置都還在,但是除了我們保留的一台 iPhone 跟一台 Apple Watch 之外,其他裝置點進去的資料都是空的,這時候我們再按「刪除所有的 xxxx」的資料,把他從列表移除就好了。

如果資料庫出錯的話,直接丟我們備份的檔案回去蓋掉,然後一樣清除快取跟重新開機,設定權限就好了。 Read More

這篇文章 合併 iOS 的「健康」來源裝置 最早出現於 Hiraku Dev


Viewing all articles
Browse latest Browse all 94

Trending Articles