LaunchAgent icon indicating copy to clipboard operation
LaunchAgent copied to clipboard

[Feature Request] Support fine-grained `KeepAlive` control?

Open rami3l opened this issue 1 year ago • 2 comments

Thanks a lot for making this wonderful library!

LaunchAgent.keepAlive in its current form can only accept a Bool, but I have encountered the following case where a simple true is not enough since I have to distinguish between zero and non-zero exit codes (a very well-written rationale can be found at https://github.com/tjluoma/launchd-keepalive#launchd-keepalive).

In short, this KeepAlive field has to look like this if I want to follow the best practice:

<key>KeepAlive</key>
  <dict>
    <key>SuccessfulExit</key>
      <false/>
    <key>Crashed</key>
      <true/>
  </dict>

Is it possible to use an enum or something for the type of this field? I'm not that familiar with Swift, but if it is a minor change, maybe I can do something about it... 🙏

rami3l avatar Jul 09 '23 03:07 rami3l

Those are the keys supported by KeepAlive as per https://keith.github.io/xcode-man-pages/launchd.plist.5.html#KeepAlive:

  1. SuccessfulExit <boolean>
  2. ~~NetworkState <boolean>~~ (deprecated)
  3. PathState <dictionary of booleans>
  4. OtherJobEnabled <dictionary of booleans>
  5. Crashed <boolean>

... and I guess the most popular keys are the boolean ones.

rami3l avatar Jul 09 '23 03:07 rami3l

It should be possible to support the extended KeepAlive options. It looks like there are a bunch of nested options that will need to be modeled so they're both Swift-y and encode into a valid plist. If you'd like to take a swing at it feel free, I'll also see what I can come up with as I have time.

emorydunn avatar Jul 10 '23 00:07 emorydunn