MacOS – Notifications from Reminders Wake Screen in Catalina

catalinado-not-disturbmacosnotificationsreminders

I have an issue in Catalina that I'm not sure how to solve. Whenever a notification from Reminders comes through on my Mac, it wakes the computer from sleep, which in turn wakes up the external display I have it connected to. Do Not Disturb is turned on while the display is sleeping and the screen is locked, and has been this way for as long as Do Not Disturb has been a feature of macOS. This issue, however, started occurring with the very first beta of Catalina, and persisted through the public release and now even the current beta. It never happened prior to Catalina. I have recurring reminders at 7:00 AM every day for when I wake up, and it lights up my external display every morning. What's worse, if I have my Apple Watch on and a reminder notification comes through on the Mac, when the screen wakes up it also unlocks. I'm at a loss, unless this is just a Catalina bug that will have to be fixed eventually.
Notifications Settings

Best Answer

It looks like Apple no longer thinks of Reminders as just notifications.

No matter what pmset settings I have tried, pmset -g log shows entries like this

2020-07-27 14:39:12 -0700 Sleep                 Entering Sleep state due to 'Software Sleep pid=533':TCPKeepAlive=active Using AC (Charge:100%)           
2020-07-27 14:39:17 -0700 Wake Requests         [process=mDNSResponder request=Maintenance deltaSecs=7200 wakeAt=2020-07-27 16:39:17] [*process=powerd request=UserWake deltaSecs=43 wakeAt=2020-07-27 14:40:00 info="com.apple.alarm.user-visible-com.apple.remindd.time-alarm,484"]           

That tells me that when the computer goes to sleep, the Reminder daemon is setting a wakeup request for the next time a reminder goes off. This is true even with "Wake for network access" and "Power Nap" turned off in Energy Saver. It also tells me that turning off "Power Nap" does not, in fact, keep the computer from waking up during sleep. (Turns out that maintenance wake is for Find My Mac, but that is another story.)

It appears there is no nice way to fix this.

Disabling Reminders does not work

  • Setting Do Not Disturb in notifications, or turning off Reminder Notifications entirely does not prevent the system from waking when the next reminder is scheduled.
  • Even if you remove all the reminders from the system by disconnecting Reminders from iCloud (and having no local reminders), that does not remove the existing scheduled wakeup.
    • Even manually deleting the scheduled wakeup with sudo pmset schedule cancelall does not keep the wakeup from being scheduled when the computer goes to sleep.

The only thing I found that worked was to disconnect Reminders from iCloud and then reboot the computer. Of course, this means that reminders do not show up on the computer ever at all.

This does not work either

I thought I could fix this by editing platform default setting plist, as explained below. However, the plist is a signed part of the PlugIn, and of course editing caused the signature not to match, so it did not load. I am leaving this here in case someone wants to build on this to find a different way to override the setting.

Edit the platform setting plist

  • Get your system's board-id by running ioreg -l | grep board-id, which should output something like
    |   "board-id" = <"Mac-0CFF9C7C2B63DF8D">
  • Verify your boot drive contains the IOPlatformPluginFamily file for your board-id:
/System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/X86PlatformPlugin.kext/Contents/Resource/Mac-0CFF9C7C2B63DF8D.plist

(replace Mac-0CFF9C7C2B63DF8D with the board ID output by the previous command) and save a copy of it somewhere safe, so you can restore it if something goes wrong.

  • Make a copy of the copy so you can edit it. Make sure the copy is on your boot drive.
  • Edit the file. You can use PlistBuddy if you have it and can find it, or vi, or maybe you want to edit a copy of the file before you get into Recovery mode and have it handy. With a text editor:
    • Find the lines
      <key>NotificationWake</key>
      <true/>
  • Change the second line to
      <key>NotificationWake</key>
      <false/>
  • or with PlistBuddy
PlistBuddy <board-id>.plist
Command: print  :IOPlatformPowerProfile:NotificationWake
true
Command: set  :IOPlatformPowerProfile:NotificationWake false
Command: print  :IOPlatformPowerProfile:NotificationWake
false
Command: save
  • Either by booting into recovery mode and mounting your boot drive (recommended if you know how to do it and are comfortable with Terminal) or by turning off SIP (not recommended, learn to do it the other way), get to a state where you can edit system files.
  • Go to the /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/X86PlatformPlugin.kext/Contents/Resource directory, keeping in mind that if you are in Recovery mode, that directory will be under /Volumes/<something>.
  • Copy your edited version of the <boot-id>.plist file to this directory, overwriting the existing version. The file name must match the original. Again, keep in mind that in Recovery mode, your copy will be under /Volumes/<something>
  • Reboot.

Be prepared for this to be reset the next time you update the OS.