- Electron version: 1.2.2
- Operating system: OS X 10.11.5

Add a listener for [`NSUserDefaultsDidChangeNotification`](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/#//apple_ref/c/data/NSUserDefaultsDidChangeNotification):

```
systemPreferences.subscribeNotification('NSUserDefaultsDidChangeNotification', () => {
  // never gets here :(
});
```

Pop open System Preferences and change something under text (spelling, substitutions, or smart quotes). The notification never arrives. Have I misunderstood this API? Example usage [here](https://github.com/CharlieHess/electron-text-substitutions/blob/master/src/index.js#L46).

atom/browser/api/atom_api_system_preferences.cc
v8::Isolate* isolate) {
  return mate::CreateHandle(isolate, new SystemPreferences(isolate));
}
void SystemPreferences::BuildPrototype(
    v8::Isolate* isolate, v8::Local<v8::ObjectTemplate> prototype) {
  mate::ObjectTemplateBuilder(isolate, prototype)
#if defined(OS_WIN)
      .SetMethod("isAeroGlassEnabled", &SystemPreferences::IsAeroGlassEnabled)
#elif defined(OS_MACOSX)
      .SetMethod("subscribeNotification",
                 &SystemPreferences::SubscribeNotification)
      .SetMethod("unsubscribeNotification",
                 &SystemPreferences::UnsubscribeNotification)
      .SetMethod("getUserDefault", &SystemPreferences::GetUserDefault)
#endif
      .SetMethod("isDarkMode", &SystemPreferences::IsDarkMode);
}
}  
}  
namespace {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
                v8::Local<v8::Context> context, void* priv) {
  v8::Isolate* isolate = context->GetIsolate();
  mate::Dictionary dict(isolate, exports);
  dict.Set("systemPreferences", atom::api::SystemPreferences::Create(isolate));
}
}  
NODE_MODULE_CONTEXT_AWARE_BUILTIN(atom_browser_system_preferences, Initialize);