Developing: AutoRun

I wanted to find out how long it takes to download my 2TB photo library from iCloud. To do that I wanted to monitor the file size of the library. I created a short shell script and packaged it using automator into an app. Unfortunately I had to run it manually to create a data point. I researched different options to run apps regularly in macOS

1. Launch Agents (Using launchd)

  • Description: The launchd service allows you to create and manage a Launch Agent (a .plist file) to schedule app launches or background tasks. These files are stored in ~/Library/LaunchAgents.
  • Disadvantages:
    • Requires knowledge of XML-based .plist syntax.
    • Debugging errors can be difficult without proper tools.
    • Changes require reloading or restarting the launchd service.

2. Cron Jobs (via cron)

  • Description: Although deprecated in favor of launchd, cron is still available for scheduling recurring tasks via the crontab command.
  • Disadvantages:
    • Requires familiarity with the cron syntax and terminal usage.
    • May not handle macOS-specific contexts (e.g., GUI applications) well.
    • Deprecated, so it might lack support in future macOS versions.

3. Automator

  • Description: Automator allows users to create workflows or applications that can be scheduled via Calendar or saved as login items.
  • Disadvantages:
    • Limited control over advanced scheduling options.
    • Some tasks may require additional scripting, which can increase complexity.
    • Less flexible than scripting-based solutions for complex needs.
    • Calendar items can only be repeated daily – not every hour.

4. Login Items

  • Description: Apps can be added to “Login Items” in System Preferences to launch automatically upon user login.
  • Disadvantages:
    • Only triggers on user login, not suitable for recurring tasks at specific times.
    • Maintenance can be cumbersome if managing multiple apps.

5. Shell Scripts and Scheduled at Commands

  • Description: Scripts can be written to launch apps and scheduled using tools like at or triggered manually.
  • Disadvantages:
    • Requires scripting knowledge and familiarity with the command line.
    • Limited scheduling capabilities compared to cron or launchd.
    • May lack robustness for recurring tasks.

Non of these were easy to use and easy to maintain. So I started the development of my own solution: AutoRun.

Early screenshot of AutoRun

It’s currently in a prototype phase. No design work has been done. It’s only a proof of concept to see if this works. You can download the source code and a compiled app at GitHub.