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

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

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

 

首先,你必須要越獄,或者有方法可以替換「已加密」的 iTunes 備份檔案才有辦法修改。這是因為「健康」的資料庫必須要透過加密的 iTunes 備份才可以備份成功。例如沒越獄的使用者可以用「iMazing」修改備份檔案。

修改之前,先去把 iCloud 裡面的「健康」整個關閉跟刪除,這不會刪除你本地的健康資料,只是把雲端的刪掉,避免修改的資料跟雲端同步造成世界大亂。等到改完沒問題之後,可以再度打開雲端功能。

透過進入越獄後的系統,可以找到 /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 版本號碼,如果不是的話就不要。

秘訣:

如果你略懂 SQL 語法,可以用

這樣的語法快速找到 ROWID,注意要改對應的 origin_product_type 裝置類型跟 source_version 版本號

 

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

 

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

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

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

Execute SQL 那邊輸入

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

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

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

5 則留言

  1. 「sean」的個人頭像
    sean

    看到這篇後,想請問皮樂大有沒有遇到過,iphone的健康完全沒讀取到watch的任何心率和活動資訊,但是心率功能在watch上是有資料的,但是健康來源是顯示找不到資料,重新配對還是有這樣現象現在,借朋友的手機配對後在對方手機是可以正常運作讀取watch上的資料,而iphone一般的通知資訊還是會正常出現在watch上,這樣除了更新os版本外還有沒有別的辦法,因為想要留著資料不想刪除,也不想要升級os,因為想要買美版來開啟ecg來用,想請教皮樂大我還可以往哪一個方向來解決,感謝皮樂大的閱讀

  2. 「Tequila」的個人頭像
    Tequila

    請問皮樂大為什麼iPhone 設定裡面的健康中的資料權限與裝置,跟您一樣出現了兩個一樣名稱的watch,點進去後發現一個是顯示有資料,一個顯示沒有資料?而有資料的那個還出現此watch已不再與iphone配對了。
    但我的健康app還是可以讀到心率資料等。可是進行體能訓練的時候,卻沒有辦法分析我的心率,但卻能分析我訓練後三分鐘心率下降的頻率。

    1. 「皮樂」的個人頭像
      皮樂

      我也有遇到這個問題,顯示沒有配對但是實際上是有配對的,不要理他

  3. 「Liao」的個人頭像
    Liao

    皮樂大你好,我在 /User/Library/ 路徑下沒有找到 Health 這個資料夾,
    也搜尋不到 healthdb_secure.sqlite 的相關檔案(全機搜尋不到),
    不過我的健康app的來源有多個裝置及資料,
    請問還有其他方式可以找到嗎?謝謝!
    另外,我是從iOS9.3.3的備份資料轉移到iOS13.3的新機上(用iTunes還原),
    會因為這個作法而有差異嗎?

    1. 「Hiraku」的個人頭像
      Hiraku

      這個問題很詭異,我兩台裝置一台看得到一台看不到,原因目前不明,我也找不到解法
      目前可行的其中一個方案是用 iMazing 備份後直接修改資料庫再還原。只是非常費力(因為如果改錯重來要還原整個系統)

      建議會有備用機可以亂測試會比較好,確定合併成功再移回去主要機器

發佈留言