iOS 11.5 + watchOS 6.2.5 正式版依然可用。
之前在 ECG 自己開通教學 裡面,大部分人遇到的最大瓶頸就是,自己所在國家 / 地區買的手錶不支援 ECG 功能,導致無法使用這個方法開通。不過由於 Apple 在 iOS 13.4 beta 2 跟 watchOS 6.2 beta 2 出包了,所以現在任何國家的手錶都可以使用!
可惜的是,我之前提供的 iMazing 不求人方法,似乎不能在這個情境下使用。你必須找到一個使用正常方式(非越獄後修改,或者使用 iMazing 法)開通 ECG 的人,登入他的 iCloud 帳號,直到他的「健康」資料跟你的手機同步為止。你可以在淘寶、蝦皮找到很多店家提供此服務,但是我個人不推薦使用來路不明的帳號,因為你的資料,包括通訊錄、記事本,甚至相片有可能會不小心上傳到對方帳號之外,如果遇到惡意的店家,他可以遠端鎖掉你的手機,並勒索要求更多金錢,所以帳號來源在這次反而是最大的隱憂。
此外,請不要來問我 xx 版本能不能用,因為這是 Apple 失誤出包,所以未來的系統一定會修掉,但只要系統不升級就可以一直使用!不過,watchOS 6.2 beta 必須搭配 iOS 13.4 beta 以上使用,所以一旦升級,不管手錶還是手機,都會無法降級(手機降級就無法配對了),繼續之前請三思而行!
以下會說明本次可以開通 ECG 的原因跟原理,如果不想看的可以直接跳過,找人開通了,想了解的可以繼續往下看。
事情是這樣的,在 iOS 13.4 跟 watchOS 6.2 之後,Apple 內部為了測試 ECG 在不同國家是否可以開啟,自己在系統裡面做了一個開關,透過修改系統裡面的一個值,可以控制要不要跳過 ECG 地區檢查。
具體的控制是由 HealthKit 裡面 HKMPNDeviceRegionFeatureSupportedStateProvider
跟 HKNonMPNDeviceRegionFeatureSupportedStateProvider
這兩個 class 來決定是否檢查的。
如果是 HKMPNDeviceRegionFeatureSupportedStateProvider
,則走原本的標準檢查,會看手錶本身是哪一個國家的版本、有沒有對應的手機電信商訊號等等...
但如果是 HKNonMPNDeviceRegionFeatureSupportedStateProvider
,就有趣了,它會無視檢查,直接開通!
問題來了,什麼時候會決定走哪一條路呢?根據我在 iOS 13.4 beta 逆向的結果,看到是如果 ecg_app_install_ignores_mpn
被開啟,就會走 HKNonMPNDeviceRegionFeatureSupportedStateProvider
那邊。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* @class HKHeartRhythmAvailability */ +(id)deviceRegionFeatureSupportedStateProviderForCompanionDevice:(id)device { BOOL checkIgnored = [self isCompanionRegionCheckEnabledForDevice:device]; Class class = [HKMPNDeviceRegionFeatureSupportedStateProvider class]; if (checkIgnored != NO) { class = [HKNonMPNDeviceRegionFeatureSupportedStateProvider class]; } return [class isCompanionRegionCheckEnabledForDevice:device]; } +(bool)isCompanionRegionCheckEnabledForDevice:(id)device { BOOL ignoresMPN = _os_feature_enabled_impl("HeartRhythm", "ecg_app_install_ignores_mpn"); NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"03C7A646-DB1E-404B-B393-033E5496A383"]; BOOL supportUUID = [device supportsCapability:uuid]; //中間不重要 return ignoresMPN && supportUUID } |
現在發現關鍵點在於 ecg_app_install_ignores_mpn
了,那麼就找一下它在哪裡吧,根據快速的尋找結果,發現它在 /System/Library/FeatureFlags/Domain/HeartRhythm.plist
,內容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>ecg_app_install_ignores_mpn</key> <dict> <key>Enabled</key> <true/> <key>DisplayName</key> <string>Move Off of MPN</string> </dict> </dict> </plist> |
重點看到了嗎?第八行那邊,在 iOS 13.4 beta 1 是 false,在 beta 2 卻變成了 true!就是這個值在 beta 2 寫錯了,導致整個 ECG 地區檢查全部失效,Apple,做得好啊!
所以,再講一次,請不要來問我 xx 版本能不能用,因為這是 Apple 失誤出包,所以未來的系統一定會修掉,但只要系統不升級就可以一直使用!要衝的趕快衝!
Credit:Apple、吉米簡
發佈留言