Quantcast
Channel: Hiraku Dev
Viewing all articles
Browse latest Browse all 241

iOS 13.4 beta 2 跟 watchOS 6.2 beta 2 出包!所有國家都可以強制開啟 ECG

$
0
0

之前在 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 裡面 HKMPNDeviceRegionFeatureSupportedStateProviderHKNonMPNDeviceRegionFeatureSupportedStateProvider 這兩個 class 來決定是否檢查的。

如果是 HKMPNDeviceRegionFeatureSupportedStateProvider,則走原本的標準檢查,會看手錶本身是哪一個國家的版本、有沒有對應的手機電信商訊號等等…

但如果是 HKNonMPNDeviceRegionFeatureSupportedStateProvider,就有趣了,它會無視檢查,直接開通!

 

問題來了,什麼時候會決定走哪一條路呢?根據我在 iOS 13.4 beta 逆向的結果,看到是如果 ecg_app_install_ignores_mpn 被開啟,就會走 HKNonMPNDeviceRegionFeatureSupportedStateProvider 那邊。

/* @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,內容如下:

<?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、吉米簡

這篇文章 iOS 13.4 beta 2 跟 watchOS 6.2 beta 2 出包!所有國家都可以強制開啟 ECG 最早出現於 Hiraku Dev


Viewing all articles
Browse latest Browse all 241

Trending Articles