I see in the release notes of 10.13:
Changing the delegate of an NSWindow, NSTabView, or NSSplitView managed by a NSWindowController, NSTabViewController, or NSSplitViewController respectively is not supported and will assert. When building using Xcode 9 or later, Xcode will now automatically set the delegate outlet on these objects to their owning controllers. If the application was previously changing the delegate of these objects programmatically after view/window loading, the application will now assert.
Ignoring NSSplitViewController, and NSTabViewController because I don't usually use those, what is the justification for not allowing one to set a window's delegate to an object other than its window controller?
Why would a window controller need to be the delegate of its window? If a base NSWindowController relied on the window delegate events, should it not get those privately in some other way (through notifications or private API)? Isn't a large point of delegates, is to allow the app developer to use them? Shouldn't the developer be the one to make this decision? It's pretty typical for the window controller to be the window's delegate, but I don't see why it has to be?