I have not worked with a keyboard extension yet, but I ran into a similar issue with the Today and WatchKit extensions. NSUserDefaultsDidChangeNotification only posts in the same process as making the change. Thus, a change within the settings of the iPhone application does not cause this notification to observers during the expansion process.
However, Darwin notifications ( CFNotificationCenterGetDarwinNotifyCenter ) post messages in other processes.
Here's the gist of catching NSUserDefaultsDidChangeNotification inside an iPhone application, sending Darwin notifications for extensions (s), capturing it inside an extension, and finally converting it to standard NSNotification for easier use: https://gist.github.com/phatblat/f640416c15e11b685511
Note that you cannot send userInfo in the Darwin notification, so you still need to provide the application group and create an instance of NSUserDefaults with initWithSuiteName: with your application group ID.
source share