After a lot of testing by the people in the comments, it looks like only ECG will work.
So just replace the first three files:
com.apple.HeartRate.notifications.plist
com.apple.HeartRate.plist
com.apple.private.health.feature-availability.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>MigrationVersion</key> | |
<integer>1</integer> | |
<key>EnableCardioFitnessNotifications_lastReconciledValue</key> | |
<true/> | |
<key>EnableBradycardiaDetection</key> | |
<true/> | |
<key>StationaryDiscordanceMinimumBPM</key> | |
<integer>110</integer> | |
<key>EnableAtrialFibrillationDetection</key> | |
<true/> | |
<key>EnableStationaryDiscordanceDetection</key> | |
<true/> | |
<key>BradycardiaThresholdBPM</key> | |
<integer>50</integer> | |
<key>EnableCardioFitnessNotifications</key> | |
<true/> | |
</dict> | |
</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>CompletedBuddyVersion</key> | |
<integer>2</integer> | |
</dict> | |
</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>DisableOxygenSaturationRecordingCompanionAnalysis</key> | |
<dict> | |
<key>userInfo</key> | |
<dict/> | |
<key>ruleIdentifier</key> | |
<string>AlwaysFalse</string> | |
</dict> | |
<key>ExpireElectrocardiogramRecording</key> | |
<dict> | |
<key>userInfo</key> | |
<dict/> | |
<key>ruleIdentifier</key> | |
<string>AlwaysFalse</string> | |
</dict> | |
<key>DisableOxygenSaturationRecording</key> | |
<dict> | |
<key>userInfo</key> | |
<dict/> | |
<key>ruleIdentifier</key> | |
<string>AlwaysFalse</string> | |
</dict> | |
<key>DisableSleepApneaNotifications</key> | |
<dict> | |
<key>userInfo</key> | |
<dict> | |
<key>grouping</key> | |
<string>OR</string> | |
<key>rules</key> | |
<array> | |
<dict> | |
<key>userInfo</key> | |
<dict/> | |
<key>ruleIdentifier</key> | |
<string>AlwaysFalse</string> | |
</dict> | |
<dict> | |
<key>userInfo</key> | |
<dict> | |
<key>ProductTypePrefix</key> | |
<string>Watch6</string> | |
</dict> | |
<key>ruleIdentifier</key> | |
<string>WatchProductTypeHasPrefix</string> | |
</dict> | |
</array> | |
</dict> | |
<key>ruleIdentifier</key> | |
<string>CompoundRule</string> | |
</dict> | |
<key>ExpireBackgroundAtrialFibrillationDetection</key> | |
<dict> | |
<key>userInfo</key> | |
<dict/> | |
<key>ruleIdentifier</key> | |
<string>AlwaysFalse</string> | |
</dict> | |
<key>ExpireAFibBurden</key> | |
<dict> | |
<key>userInfo</key> | |
<dict/> | |
<key>ruleIdentifier</key> | |
<string>AlwaysFalse</string> | |
</dict> | |
<key>CountMobileAssetsDownloadedPast24Hours</key> | |
<integer>338</integer> | |
</dict> | |
</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>AvailableRegionsContentVersion</key> | |
<integer>2</integer> | |
<key>AvailableRegionsVersion</key> | |
<integer>1</integer> | |
<key>AvailableRegions</key> | |
<array> | |
<integer>18446744073709551615</integer> | |
<integer>18446744073709551615</integer> | |
<integer>18446744073709551615</integer> | |
<integer>18446744073709551615</integer> | |
<integer>3</integer> | |
</array> | |
<key>CountrySetProvenance</key> | |
<integer>3</integer> | |
<key>UDIDeviceIdentifier</key> | |
<string>(01)00190198909541(10)1.22B83</string> | |
<key>YearOfRelease</key> | |
<string>2024</string> | |
<key>FeatureVersion</key> | |
<string>1</string> | |
<key>UpdateVersion</key> | |
<string>1.22B83</string> | |
</dict> | |
</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>AvailableRegionsContentVersion</key> | |
<integer>4</integer> | |
<key>AvailableRegionsVersion</key> | |
<integer>1</integer> | |
<key>AvailableRegions</key> | |
<array> | |
<integer>18446744073709551615</integer> | |
<integer>18446744073709551615</integer> | |
<integer>18446744073709551615</integer> | |
<integer>18446744073709551615</integer> | |
<integer>3</integer> | |
</array> | |
<key>CountrySetProvenance</key> | |
<integer>4</integer> | |
<key>UDIDeviceIdentifier</key> | |
<string>(01)00195949116209(10)1.22B83</string> | |
<key>YearOfRelease</key> | |
<string>2024</string> | |
<key>FeatureVersion</key> | |
<string>1</string> | |
<key>UpdateVersion</key> | |
<string>1.22B83</string> | |
</dict> | |
</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>HKElectrocardiogramV1ToV2UpgradeBackgroundDelivered</key> | |
<true/> | |
<key>ElectrocardiogramWatchAppInstallIsAllowed</key> | |
<true/> | |
<key>HKElectrocardiogramV1ToV2UpgradeAlertDismissed</key> | |
<true/> | |
<key>HKAtrialFibrillationDetectionOnboardingCompleted</key> | |
<integer>1</integer> | |
<key>HKElectrocardiogramFirstRecordingCompleted</key> | |
<true/> | |
<key>PromimentUpgradeTileDismissed</key> | |
<true/> | |
<key>HKElectrocardiogramOnboardingCompleted</key> | |
<integer>4</integer> | |
</dict> | |
</plist> |
I had success with enabling ECG with iOS 18.3.2 + WatchOS 11.3.1 (Apple Watch 10); here are some recommendations from my painful experience.
Original manuals from 2019 with outdated screenshots and files, but fresh comments are:
Use an APFS disk on your Apple device for the backup location (not tested with other filesystems). I had a lot of problems with an ExFAT external disk; also, with ExFAT in the end I got a triple-sized backup that I could not edit (Editable backups are not supported on your chosen backup location for XX iPhone. Please use the "Export to Folder" option to make a local copy which you can then edit
error).
For editing plist files, use an app (BBEdit (Paid), PlistEdit Pro (Paid), etc.). I used this Vim plugin because it's free and easy to use. Do not recommend XCode, because of its strange behaviour with plist files and its non-user-friendly edit mode.
Do not replace existing files with text files from a gist! Use the apps above to edit existing plist files, carefully changing existing parameter values with the parameters in the gist files. This is important because at least UDIDeviceIdentifier
, YearOfRelease
, and UpdateVersion
were different in my case.
Be careful with restoring: you need to have more than 50% free space available on your iPhone. If not, you could restore without photos (it will erase all photos on your phone), then restore with photos. Do not check the erase checkmark when restoring, because in this case all your esims and other stuff will be wiped!
After restoring you will need to re-add all Apple Wallet cards, and some Bank/Telecom apps will be logged out. Keep this in mind.
Hello! Used these files today, Jan 2nd 2025 and it worked! Only ECG though but this is great. Thank you!