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:
- Appium must be run from the checked out Git repository
- Launch Appium on start-up, in case the server needs to be rebooted
- If Appium crashes (it does sometimes), relaunch the server
- 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!