Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is use of @NSApplicationMain in swift programming project in xcode

Tags:

I've created a sample project using Xcode 6 and language as swift.

Xcode created AppDelegate.swift with following code

import Cocoa  @NSApplicationMain  class AppDelegate: NSObject, NSApplicationDelegate {      func applicationDidFinishLaunching(aNotification: NSNotification) {         // Insert code here to initialize your application     }      func applicationWillTerminate(aNotification: NSNotification) {         // Insert code here to tear down your application     }   } 

What does @NSApplicationMain mean and where is my main.mm/main.m file with main()?

like image 881
Omkar Avatar asked Dec 14 '14 12:12

Omkar


People also ask

What does NSApplicationMain do?

The NSApplicationMain function sends shared to the principal class to obtain the global app instance ( NSApp )—which in this case will be an instance of your custom subclass of NSApplication . Many AppKit classes rely on the NSApplication class and may not work properly until this class is fully initialized.

What is SwiftUI vs Xcode?

Swift is a programming language that is used for building iOS and Mac applications, while Xcode is not a programming language – it is a comprehensive IDE. Xcode is the canvas to write and program the code, while Swift is the actual code that your team is writing.

What is Swift vs SwiftUI?

So “SwiftUI” is the thing that draws buttons and stuff, Swift is the language it is written in, and probably the language that a programmer doing a “let's show a list of flowers, let people tap on them, and see details about them” app uses.

Who made SwiftUI?

SwiftUI is Apple's brand new framework for building user interfaces for iOS, tvOS, macOS, and watchOS. Apple introduced SwiftUI in 2019 and the framework has been evolving at a rapid pace ever since. Unlike UIKit and AppKit, SwiftUI is a cross-platform framework.


Video Answer


1 Answers

As it mentioned in the release notes:

OS X apps can now apply the @NSApplicationMain attribute to their app delegate class in order to generate an implicit main for the app. This attribute works in the same way as the @UIApplicationMain attribute for iOS apps."

So, basically, it's a way of getting your app bootstrapped and running without having to write some global-level boilerplate in a separate Swift file. In previous versions of Xcode, when you created a new Swift Cocoa project, Xcode would generate a main.swift file for a new OS X project that looked like this:

import Cocoa  NSApplicationMain(Process.argc, Process.unsafeArgv) 

And that was the main entry point. Now Xcode doesn't bother generating this file; instead it just tags your app delegate with @NSApplicationMain and this bootstrapping step is handled behind the scenes.

More info from The Swift Programming Language:

Apply this attribute to a class to indicate that it is the application delegate. Using this attribute is equivalent to calling the NSApplicationMain function and passing this class’s name as the name of the delegate class.

If you do not use this attribute, supply a main.swift file with a main function that calls the NSApplicationMain function. For example, if your app uses a custom subclass of NSApplication as its principal class, call the NSApplicationMain function instead of using this attribute.

like image 88
Matt Gibson Avatar answered Sep 21 '22 19:09

Matt Gibson