Skip to content

A simple launch daemon for macOS which communicates with a client application via XPC

License

Notifications You must be signed in to change notification settings

jdspoone/SampleOSXLaunchDaemon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sample XPC Launch Daemon ReadMe

This Xcode project demonstrates a basic launch daemon which:
  -maintains an XPC listener to handle incoming connections from it's client(s)
  -signals it's clients via Darwin notifications

The project includes:
  -a Daemon intended to be run via launchd. It maintains a count, and responds to XPC requests for its count and to increment its count. Upon incrementing its count, it notifies all interested parties via Darwin notifications.
  -a Client, from which you can ask the Daemon for it's current count, and ask it to increment it's count.
  -an install script, which copies the daemon's executable to /Library/PrivilegedHelperTools/, the Daemon's launchd.plist to /Library/LaunchDaemons/, and then loads the daemon via launchctl
  -an uninstall script, which unloads the daemon via launchctl, and removes the daemon's executable and launchd.plist

To run the project:
  -run the Install scheme
  -run the Client scheme
    -click the button and witness XPC communication and Darwin notifications in action!
  -run the Uninstall scheme

NOTE: You will need to set SUDO_ASKPASS to run the installation and uninstallation targets.

The daemon needs to be launched via launchd if you want the XPC stuff to actually work.
However, if you're writing a more complicated daemon, you will probably want to be able to debug the daemon with Xcode.
To do this, you'll need to do the follwing:
  -modify daemon-Launchd.plist so the WaitForDebugger flag is set to YES
  -ensure the Daemon's Xcode scheme:
    -runs as Root
    -waits for the executable to be launched
  -modify install.sh so it does NOT load the daemon
  -run the Install scheme
  -run the Daemon scheme, and then load the daemon via launchctl
    -you've got to do it in this order, or the Xcode debugger will never attach

Remember to set the WaitForDebugger flag to NO again before releasing anything!

About

A simple launch daemon for macOS which communicates with a client application via XPC

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published