Appium, an open source project that provides mobile device UI automation based on Selenium Web Driver for iOS and Android devices, is gaining popularity among the enterprise test teams we’re talking to. Some might think the price (Appium is open-source freeware) drives its popularity, but I think it’s more likely because a lot of enterprise testing shops already know Selenium from another venue, desktop web automation. It’s natural to want to transfer the skills.
But perhaps the most common question we hear from potential Appium users is, “Do we need an Apple Mac in order to run Appium tests on iOS devices?” Shops who are at arm’s length (geographically) from their in-house developers, or those who have outsourced development to third parties, typically don’t have even one Mac in house. The developers, wherever they may be, are almost certainly using Macs already, especially if they’re using Xcode, Apple’s IDE for Objective-C and Swift.
Apple has provided some great capabilities for developers and testers alike in Xcode, including UI Automation and powerful debugging and profiling capabilities in Instruments. For iOS 9, Apple has even built a record-and-play and scripting capability in Xcode itself, allowing UI automation tests to be recorded and played back in the same Xcode project as the app.
So why the need for a Mac? Just as Mobile Labs has done with deviceConnect™ (the server in deviceConnect runs on a Mac computer system), companies and open-source projects alike who want to utilize the capabilities that Apple provides need to connect iOS devices to a Mac. This is because Xcode and its capabilities are only produced and licensed for use on OS X, the Mac’s operating system. Luckily, Mac servers come in some very affordable, yet powerful, packages like the Mac Mini.
In the case of Appium, the requirement for a Mac lies in Apple’s UI Automation, which means that the Mac OS X version of Xcode must be installed, and as is stated succinctly in the Appium documentation in notes for both Windows and Linux, “You will not be able to test iOS apps on a […Windows or Linux] server, because Appium relies on OS X-only libraries to support iOS testing. You can however use the Remote Server option to connect to an Appium server running on a Mac.”
The picture shows the flexibility of Appium’s implementation. Because the interface to the server uses HTTP-based JSON wire protocol to encapsulate the Selenium Web Driver protocol, the number of possible clients and development tools is almost limitless. This is because the Appium and Web Driver clients are libraries – so things as disparate as Ruby and Visual Studio are supported.
Because tests are cross-platform, a client can run a single test on both iOS and Android devices. Note that because the Appium server must have access to Apple’s UI Automation, iOS devices can only be supported on an Apple Mac.
With Mobile Labs’ deviceConnect and its deviceBridge component, the picture above becomes much simpler, because devices do not have to be connected directly to any of the Appium servers. Connections between devices and Appium servers can be made or released as needed, resulting in many fewer servers than might otherwise be needed. But that’s a topic for another time.
What we were asking today was, “Do Appium users need a Mac to test iOS devices with Appium?” and they do, because Apple’s tools and libraries needed for testing iOS devices (Xcode, UI Automation, Instruments) are built by Apple for the Mac, are only distributed by Apple for the Mac, and are only licensed for running on a Mac. The situation is the simple result of Apple producing Mac-based iOS development tools.