Programmatically create NSWindow
Xcode 11 • Swift 5.1
import Cocoa@NSApplicationMainclass AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var window: NSWindow! let newWindow = NSWindow(contentRect: .init(origin: .zero, size: .init(width: NSScreen.main!.frame.midX, height: NSScreen.main!.frame.midY)), styleMask: [.closable], backing: .buffered, defer: false) func createNewWindow() { newWindow.title = "New Window" newWindow.isOpaque = false newWindow.center() newWindow.isMovableByWindowBackground = true newWindow.backgroundColor = NSColor(calibratedHue: 0, saturation: 1.0, brightness: 0, alpha: 0.7) newWindow.makeKeyAndOrderFront(nil) } func applicationDidFinishLaunching(_ aNotification: Notification) { createNewWindow() } func applicationWillTerminate(_ aNotification: Notification) { // Insert code here to tear down your application }}
Here's a working example without any bells & whistles, updated to Swift 4.2.
It creates a bare window, with & without a nib depending on which function you call.
In IB, uncheck "initial controller" everywhere. For the nib version to work, you must give the IB-supplied window controller a storyboard ID of "WindowController."
import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate, DebugHelper { var myName: String = "AppDelegate" var windowController: NSWindowController! var window: NSWindow! func applicationDidFinishLaunching(_ aNotification: Notification) { //nib() diy() } func nib() { let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil) guard let wc = storyboard.instantiateController(withIdentifier: "WindowController") as? NSWindowController else { return } windowController = wc wc.showWindow(self) } func diy() { window = NSWindow() window.styleMask = NSWindow.StyleMask(rawValue: 0xf) window.backingType = .buffered window.contentViewController = ViewController() window.setFrame(NSRect(x: 700, y: 200, width: 500, height: 500), display: false) windowController = NSWindowController() windowController.contentViewController = window.contentViewController windowController.window = window windowController.showWindow(self) } func applicationWillTerminate(_ aNotification: Notification) { // Insert code here to tear down your application } } import Cocoa class ViewController: NSViewController, DebugHelper { var myName: String = "ViewController" override func loadView() { view = NSView() } }