Skip to content

codinn/AHLaunchCtl

 
 

Repository files navigation

#AHLaunchCtl Objective-C library for managing launchd Daemons & Agents.

Usage:

####Notes

  • There are five members of AHLaunchDomain representing the common locations of LaunchDaemons and LaunchAgents.

    /* User Launch Agents `~/Library/LaunchAgents`.  Loaded by the console user.*/
    kAHUserLaunchAgent,
    
    /* Administrator provided LaunchAgents `/Library/LaunchAgents/`.  Loaded by the console user */
    kAHGlobalLaunchAgent,
    
    /* Apple provided LaunchAgents `/System/Library/LaunchAgents/`.  Loaded by root user.*/
    kAHSystemLaunchAgent,
    
    /* Administrator provided LaunchDaemon `/Library/LaunchDaemons/`.  Loaded by root user.*/
    kAHGlobalLaunchDaemon,
    
    /* Apple provided LaunchDaemon `/System/Library/LaunchDaemons/`.  Loaded by root user.*/
    kAHSystemLaunchDaemon,

Add Job

This will load a job and create the launchd.plist file in the appropriate location.

AHLaunchJob* job = [AHLaunchJob new];
job.Program = @"/bin/echo";
job.Label = @"com.eeaapps.echo";
job.ProgramArguments = @[@"/bin/echo", @"hello world!"];
job.StandardOutPath = @"/tmp/hello.txt";
job.RunAtLoad = YES;
job.StartCalendarInterval = [AHLaunchJobSchedule dailyRunAtHour:2 minute:00];

// All sharedController methods return BOOL values.
// `YES` for success, `NO` on failure (which will also populate an NSError).
[[AHLaunchCtl sharedController] add:job
                           toDomain:kAHUserLaunchAgent
                              error:&error];

Remove Job

This will unload a job and remove associated launchd.plist file.

[[AHLaunchCtl sharedController] remove:@"com.eeaapps.echo"
                            fromDomain:kAHUserLaunchAgent
                                 error:&error];

Load Job

Simply load a job, this is good for one off jobs you need executed. It will not create a launchd file, but it will run the specified launchd job as long as the user in logged in (for LaunchAgents) or until the system is rebooted (LaunchDaemons).

AHLaunchJob* job = [AHLaunchJob new];

// build the job as you would for adding one ...

[[AHLaunchCtl sharedController] load:job
						    inDomain:kAHGlobalLaunchDaemon
					  	  	   error:&error];

Unload Job

Unload a job temporarily, this will not remove the launchd.plist file

[[AHLaunchCtl sharedController] unload:@"com.eeaapps.echo.helloworld"
                              inDomain:kAHGlobalLaunchDaemon
                                 error:&error];

Scheduling

To set the StartCalendarInterval key in the job, use the AHLaunchJobSchedule class.

+ (instancetype)scheduleWithMinute:(NSInteger)minute
                              hour:(NSInteger)hour
                               day:(NSInteger)day
                           weekday:(NSInteger)weekday
                             month:(NSInteger)month

Passing AHUndefinedScheduleComponent to any of the above parameters will make it behave like a wildcard for that parameter.

There are also some convenience methods

+ (instancetype)dailyRunAtHour:(NSInteger)hour minute:(NSInteger)minute;
+ (instancetype)weeklyRunOnWeekday:(NSInteger)weekday hour:(NSInteger)hour;
+ (instancetype)monthlyRunOnDay:(NSInteger)day hour:(NSInteger)hour;

Install Privileged Helper Tool

Your helper tool must be properly code signed, and have an embedded Info.plist and Launchd.plist file.**

	NSError *error;
    [AHLaunchCtl installHelper:kYourHelperToolReverseDomain
    					prompt:@"Install Helper?"
   						 error:&error];
    if(error)
    	NSLog(@"error: %@",error);

**See the HelperTool-CodeSign.py script at the root of this repo, for more details, it's helpful for getting the proper certificate name and .plists created.

see the AHLaunchCtl.h for full usage.

About

LaunchD Framework for Cocoa Apps

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Objective-C 95.5%
  • Python 3.0%
  • Other 1.5%