ControlFloorAgent is an XCTest that exposes access to XCTest / XCUITest API in a dynamic fashion. It is similar to WebDriverAgent in this way, but CFA does not utilize either WDA code nor a WebDriver API.

Improved Keyboard

Besides enabling Apple testing APIs to be called dynamically, CFA also contains code to automate the iOS keyboard effectively. This is done by mapping out the location of all keys ahead of time, so that lengthy calls for key position can be avoided. This advancement allows ControlFloor to simulate keystrokes as users type on a real keyboard faster than any other product on the market.

WDA and Appium

As CFA is based on the latest XCTest APIs available, and does not use a "virtual DOM" like WDA, CFA is free from many of the bugs that abound within WDA. Those bugs persist through to Appium, as Appium utilizes WDA for device automation.

Because CFA is not based on WDA, it is not compatible with Appium, nor do we intend to make it compatible. Instead we created our own lightweight scripting that can be used to make calls through to CFA similar to how one would use Appium. The result is a clean and bug-free method of easily automating iOS devices. An Appium-free method.

Legality and the Apple Developer Agreement

CFA was built by dumping the API available within XCTest including the so called "private API calls." This was also done for WDA, and we utilized the same software to do this API dump that was used for WDA. We believe this method of API dumping is legal and does not break the Apple Developer Agreement, as we are not attempting to reverse engineer Apple work only to make calls through to what is available. Additionally, we believe this work falls into the "interoperability" clause of the DMCA, as the goal is to make these calls from Linux where XCode is not available.

Some clients have expressed concern over this, but we do not think it is something to worry about as the exact same thing was done with WebDriverAgent and WDA is in heavy use both by Appium and directly. Its use is commonplace across all iOS device farm vendors.

If Apple is reading this, and has some objection to what we have done, please contact us and we will be happy to talk about it and what we can do to address any concerns.