You can import the Foundation and AppKit modules, then subclass NSApplication. But maybe this isn't what you're looking for, if your pyobjc code isn't the entry point for your code. Could give more specifics about what you're trying to do with pyobjc?
Here's a quick example using pyobjc to make a simple status bar app, without using xcode:
import objc
from Foundation import *
from AppKit import *
from PyObjCTools import AppHelper
class MyApp(NSApplication):
def finishLaunching(self):
# Make statusbar item
statusbar = NSStatusBar.systemStatusBar()
self.statusitem = statusbar.statusItemWithLength_(NSVariableStatusItemLength)
self.icon = NSImage.alloc().initByReferencingFile_('icon.png')
self.icon.setScalesWhenResized_(True)
self.icon.setSize_((20, 20))
self.statusitem.setImage_(self.icon)
#make the menu
self.menubarMenu = NSMenu.alloc().init()
self.menuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Click Me', 'clicked:', '')
self.menubarMenu.addItem_(self.menuItem)
self.quit = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'terminate:', '')
self.menubarMenu.addItem_(self.quit)
#add menu to statusitem
self.statusitem.setMenu_(self.menubarMenu)
self.statusitem.setToolTip_('My App')
def clicked_(self, notification):
NSLog('clicked!')
if __name__ == "__main__":
app = MyApp.sharedApplication()
AppHelper.runEventLoop()
You can then use py2app to make it distributable:
from distutils.core import setup
import py2app
NAME = 'myapp'
SCRIPT = 'myapp.py'
VERSION = '0.1'
ID = 'myapp'
plist = dict(
CFBundleName = NAME,
CFBundleShortVersionString = ' '.join([NAME, VERSION]),
CFBundleGetInfoString = NAME,
CFBundleExecutable = NAME,
CFBundleIdentifier = 'com.yourdn.%s' % ID,
LSUIElement = '1', #makes it not appear in cmd-tab task list etc.
)
app_data = dict(script=SCRIPT, plist=plist)
setup(
app = [app_data],
options = {
'py2app':{
'resources':[
],
'excludes':[
]
}
}
)