For iOS automation, Appium relies on system frameworks provided by Apple. For iOS 9.2 and below, Apple’s only automation technology was called UIAutomation, and it ran in the context of a process called Instruments. As of iOS 10, Apple has completely removed the UIAutomation instrument, thus making it impossible for Appium to allow testing in the way it used to. Fortunately, Apple introduced a new automation technology, called XCUITest, beginning with iOS 9.3. For iOS 10 and up, this will be the only supported automation framework from Apple.
The below Machine configuration is mandatory for running Appium automation against an iOS 9.3.x device.
- Appium: 1.6.4 and above
- Mac OS: OS X El Capitan 10.11 and Above
- Xcode Version: 8.0 and Above
Setting up appium-xcuitest-driver
This is Appiun driver for iOS using XCUITest for back-end. It has the WebDriverAgent which is a WebDriver server implementation for iOS that can be used to remote control iOS devices. It allows you to launch & kill applications, tap & scroll views or confirm view presence on a screen. This makes it a perfect tool for application end-to-end testing or general purpose device automation. It works by linking XCTest framework and calling Apple’s API to execute commands directly on a device. WebDriverAgent is developed and used at Facebook for end-to-end testing and is successfully adopted by Appium.
This package has a lot of external dependencies and we need to ensure that all those dependencies are installed properly to make this work. Below section explains the dependencies and its installations:
Installation : > brew install ideviceinstaller
Installation : > brew install carthage
Installation: brew install mobiledevice
Installation : npm install -g ios-deploy
Installation : npm install -g deviceconsole
Installation : gem install xcpretty
CONFIGURATION FOR REAL DEVICES
The profile can be manually associated with the project (keep in mind that this will have to be done each time the WebDriverAgent is updated).
Once you install the Appium, you will get the path node_modules/appium-xcuitest-driver/WebDriverAgent. Open WebDriverAgent.xcodeproj in Xcode and select your developmentteam for both the WebDriverAgentLib and WebDriverAgentRunner targets. This should also auto select Signing Certificate.
Selecting Signing Certificate for WebDriverAgentLib
Select Provisioning Profile for WebDriverAgentRnner [Select a Wildcard Development Provisioning file since this will work for all the bundle ids]
Build WebDriverAgent once to verify all above steps worked. You can just build and save the xcode project [The WebDriverAgentRunner will be installed when you execute your automation script with expected capabilities] OR you can build and install the WebDriverAgentRunner on a device connected to your mac using the below command,
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination ‘id=’
Now you are ready to start the automation using XCUITest framework for iOS 9.3.x above devices.
make it perfect !