Starting Appium Via launchd

In a recent project I needed to find a way of getting the Appium node.js app to run all the time on an iOS CI server. The requirements were as follows:

  1. Appium must be run from the checked out Git repository
  2. Launch Appium on start-up, in case the server needs to be rebooted
  3. If Appium crashes (it does sometimes), relaunch the server
  4. Output stdout and stderror to a log file that I can easily view using Console.app to debug problems with Appium

This was achieved with the following launchd plist configuration file placed in ~/Library/LaunchAgents/.

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>KeepAlive</key>
        <dict>
            <key>SuccessfulExit</key>
            <false/>
        </dict>
        <key>Label</key>
        <string>com.companyname.appium</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/node</string>
            <string>/Users/Mike/Projects/appium/server.js</string>
        </array>
    	<key>Debug</key>
		<true/>
        <key>RunAtLoad</key>
        <true/>
        <key>WorkingDirectory</key>
        <string>/Users/Mike/Projects/appium/</string>
		<key>StandardOutPath</key>
		<string>/Users/Mike/Library/Logs/appium.log</string>
		<key>StandardErrorPath</key>
		<string>/Users/Mike/Library/Logs/appium_error.log</string>
    </dict>
</plist>

 

The WorkingDirectory setting is required, as Appium uses it to locate the instruments/client.js file.

Start the agent by running:


launchctl load ~/Library/LaunchAgents/<configuration name>.plist

Or stop it by running:


launchctl unload ~/Library/LaunchAgents/<configuration name>.plist

Hope this helps!


How to Remove a Mass of Stubborn Photos from Your iPhone

It’s tip time! Sync your iPhone a few times incorrectly and you may end up with a mass of stubborn photos that just won’t ‘delete after syncing’ to iPhoto. Over time this could become a huge collection of photos gobbling up precious storage space on your device, and this juggernaut of photos becomes far too […]


Xcode 4.3 / 4.4, Archive Build, Strip Static Library Bug

Sometimes it can be quite useful to hide a static library inside another one to hide the details of the inner static library from an application. We successfully did this with the Urban Airship library, but were having problems in a specific situation where the application would crash on first access of a method defined […]