Skip to content

Instantly share code, notes, and snippets.

@imReker
Last active June 26, 2025 18:27
Show Gist options
  • Save imReker/fba069c6cae7407509863b0ed78da2a7 to your computer and use it in GitHub Desktop.
Save imReker/fba069c6cae7407509863b0ed78da2a7 to your computer and use it in GitHub Desktop.
iOS 18.1 plist for Apple Watch to Enable ECG, Atrial Fibrillation(IRNF), Sleep Apnea Notify. No AfiB History.

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>
@germanbuchmuller
Copy link

germanbuchmuller commented May 7, 2025

Working on iPhone 11 iOs 18.4.1, and Apple Watch 10. Just had to download all 6 files, and modify:

  • com.apple.private.health.feature-properties.ElectrocardiogramRecordingV1.companion.plist
  • com.apple.private.health.feature-properties.SleepApneaNotifications.companion.plist

changing <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>, as the previous files in the backup were.
Used iMazing (paid unfortunately).

@Kawixh
Copy link

Kawixh commented Jun 11, 2025

ECG works on ios and watchos 26 dev beta 1

@prohoudini
Copy link

Not sure if this helps anyone, but today my phone randomly started showing my location in Ukraine. I used this opportunity to activate all region-blocked features (e.g., oxygen, Afib, etc.) except Sleep Apnea, which isn’t available in that region.

This made me think that if you guys can change your phone’s GPS location, perhaps you might be able to activate the features. I had changed my phone’s location once with Xcode, but it didn’t work. Perhaps I didn’t do it correctly.

Good luck!

@imReker
Copy link
Author

imReker commented Jun 26, 2025

Not sure if this helps anyone, but today my phone randomly started showing my location in Ukraine. I used this opportunity to activate all region-blocked features (e.g., oxygen, Afib, etc.) except Sleep Apnea, which isn’t available in that region.

This made me think that if you guys can change your phone’s GPS location, perhaps you might be able to activate the features. I had changed my phone’s location once with Xcode, but it didn’t work. Perhaps I didn’t do it correctly.

Good luck!

The lock depends on Cellular signal, not GPS. Maybe you can share the pref files

@prohoudini
Copy link

Not sure if this helps anyone, but today my phone randomly started showing my location in Ukraine. I used this opportunity to activate all region-blocked features (e.g., oxygen, Afib, etc.) except Sleep Apnea, which isn’t available in that region.
This made me think that if you guys can change your phone’s GPS location, perhaps you might be able to activate the features. I had changed my phone’s location once with Xcode, but it didn’t work. Perhaps I didn’t do it correctly.
Good luck!

The lock depends on Cellular signal, not GPS. Maybe you can share the pref files

I too had thought this, hence why I couldn’t activate the features through location change with Xcode. That said, the recent GPS change on my phone allowed the activation of these features. I did not physically change location nor do I have an international SIM card. Be it as it may, there is probably more to the story than what we had all originally thought.

happy hacking!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment