How to Configure macOS for iOS Mobile App Automation using Appium?

How to Configure macOS for iOS Mobile App Automation using Appium?

iOS App Automation on macOS – Configuring a macOS system for testing on real iOS devices for mobile app automation is a lengthy and complicated process. The steps to follow for this configuration are tricky, and many times testers struggle with it.

The steps involved are installing the right software, setting environment variables, configuring settings on the device, and connecting the devices properly for iOS app automation. This can cause lots of issues in configuration and slow down the testing process.

In this blog, we’ll make this process easy for you to follow.

We’ll walk you through each step, from installing necessary software like the Java Development Kit (JDK) and Xcode, to setting up your iOS device for iOS app automation on macOS.

We’ll also show you how to install Appium, configure it correctly, and use tools like Appium Inspector to interact with your app.

By following this simple guide, you’ll be ready to test your mobile apps on real devices quickly and efficiently for iOS app automation on macOS.

What is Appium testing in iOS App Automation on macoS

Appium is a freely distributed open-source automation tool used for testing mobile applications. It allows testers to automate native, hybrid, and mobile web applications on iOS and Android platforms using the WebDriver protocol. 

Appium provides a unified API (Application Programming Interface) that allows you to write tests using your preferred programming language (such as Java, C#, Python, JavaScript, etc.) and test frameworks. It supports a wide range of automation capabilities and handling various types of mobile elements.
Appium enables cross-platform testing, where the same tests can be executed on multiple devices, operating systems, and versions, providing flexibility and scalability in mobile app testing or iOS testing. It has NO dependency on Mobile device OS; because APPIUM has a framework or wrapper that translates Selenium WebDriver commands into UIAutomation (iOS) or UIAutomator (Android) commands depending on the device type, not any OS type.

Prerequisites for iOS Automation Setup on macOS

  1. JDK Installation 
  2. Install npm and Node.js 
  3. Install Appium Server & Appium Inspector 
  4. Setting up environment variables
  5. Xcode installation and setup
  6. Install XCUITest Driver
  7. Install WebDriverAgent 
  8. Real Device Settings
  9. Get the device-identifier or udid of real device
  10.  Configure the desired capabilities of Appium Inspector
  • 1. JDK Installation:
    Download and Install JAVA JDK for MAC OS (https://www.oracle.com/in/java/technologies/downloads/#jdk21-mac)
    If already installed on the system, please check and confirm using command-
    • java -version
  • 2. Install npm and Node.js:
    Download the Node.js pre-built installer for mac platform and install it. (https://nodejs.org/en/download) If already installed on the system, please check and confirm using the following commands on the terminal.
    • To see if Node is installed, type in node -v .
    • To see if NPM is installed, type in npm -v  
  • 3. Install Appium Server & Appium Inspector:
    Install the Appium via terminal you need to run the below commands:
  • 4. Setting up environment variables:
    Do below settings in .profile file. Open a terminal and type following command-
    • nano ~/.profile
    • Then, paste the below commands: (Change your username!).
    • export JAVA_HOME=$(usr/libexec/java_home)
    • export PATH=$JAVA_HOME/bin:$PATH
  • 5. Xcode installation and setup:
    You can download Xcode from the App Store (https://apps.apple.com/us/app/xcode/id497799835?mt=12 ) to install the command line tools use following command in terminal-
    • xcode-select — install
    • Open Xcode a Preferences -> Accounts -> Add Apple ID
  • 6. Install XCUITest Driver:
    Now we need to install XCUITest driver which allows to interact with the UI elements of iOS apps during automated testing. Use following command in terminal to install XCUITest driver-
    • appium driver install xcuitest
  • 7. Install WebDriverAgent:
    Open Terminal & Run the following command:
    • cd /Applications/Appium-Server-GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitestdriver/appium-webdriveragent
    • To make directory in Resources folder mkdir -p Resources/WebDriverAgent.bundle

How to setup WebDriverAgent on Mac for iOS App Automation

WebDriverAgent is a WebDriver server implementation for iOS that can be used to remote control iOS devices. We need to add an account to XCode (you can use your Apple Id or create new).

For that go to XCode —> Preferences —> Accounts

setup for iOS app automation

Once you are signed in — your account will appear at the left.

We need to add Signing Certificate to this account iOS Automation:

1. Click on Download Manual Profiles
2. Click on Manage Certificates — Plus icon — Apple Development. Once it is done — you will see a new certificate added to the list as per screenshot below

iOS automation account

Open the WebDriverAgent.xcodeproj project in xcode

To find it please use the path:
/Applications/Appium-Server-GUI.app/ Contents/ Resources/ app/node_modules /appium/node_modules/appium-xcuitestdriver/appium-webdriveragent

(NOTE: If you do not see this folder — please use shortkeys “Shift”+”Command”+”.” to display hidden files in your Macintosh HD root)

Click on Project name at the left navigation (WebDriverAgent)

For both the WebDriverAgentLib and WebDriverAgentRunner targets, Go to Signing & Capabilities and Select the Automatically Manage Signing check box select your development team and Select your device. This should also auto select Signing Certificate. The outcome should look as shown below:

automation project in xcode

If the error below appears while changing the Bundle Identifier, we will need to change the  value of Bundle Identifier to something else which xCode can accept.

error in setup

The value for Bundle Identifier should be changed in the following places:

  1. WebDriverAgentLib target:
    • From the Signing & Capabilities tab —change value of Bundle Identifier
    • From Build Settings tab — Packaging section — change value of Product Bundle Identifier
  2. WebDriverAgentRunner target:
    • From Build Settings tab — Packaging section — change value of Product Bundle Identifier
  3. IntegrationApp target:
    • From the Signing & Capabilities tab — change value of Bundle Identifier
    • From Build Settings tab —> Packaging section —> change value of Product Bundle Identifier

After changing the values of Bundle Identifier,
Build the WebDriverAgentLib, WebDriverAgenrRunner, IntegrationApp from WebDriverAgent project in xcode.

  • 8. Now for real device testing
    • we also need to make some changes on device side too so we need to enable  developer option for this:
    • Open settings and click on Privacy and Security-> Developer Option:
real device ios automation
pop-up
  • 9. Get the device-identifier or udid of real device
    • Once the xcode build is succeeded and Developer mode of device is turned on, get the udiid or device-identifier connected to the mac machine from xcode as well as get the bundleId.
    • xcode- windows-Devices and Simulators – check the identifier and other device details, which are required to define capabilities to connect to device either programmatically or through Appium inspector.
device identifier

Get the bundleId from xcode-

  • A bundle ID, also known as a CFBundleIdentifier. It is a unique identifier for an app in Xcode, allowing the system to distinguish it.
  • Bundle IDs are typically written in reverse-DNS format and can only contain alphanumeric characters (A–Z, a–z, and 0–9), hyphens (-), and periods (.). They are also case-insensitive.
  • BundleId is required to define capabilities to connect to the device either programmatically or through Appium inspector.
    For that, from xcode, select the top project item in the project navigator at the left then select TARGETS -> General. Bundle Identifier is found under Identity.

After all the settings, you need to build the xcode project from the Terminal – for that we need to run the following command:
(xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination ‘id=udid’ test ) from the location where the WebDriverAgent project is present. To go to that location first run the command-

cd /Applications/Appium-Server-GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appiumxcuitestdriver/appiumwebdriveragent

Now run the command with device identifier and WebDriverAgent project location.

(e.g. –
xcodebuild -project /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appiumxcuitestdriver/appiumwebdriveragent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination ‘platform=iOS,id=53e4089fac10d5307c8f0d9a1f35aeb84e89b819’ test)

After the above configurations, Start Appium Server from the terminal.
Start Appium Inspector and set the desired capabilities.

  • 10. Configure the desired capabilities and other settings of Appium Inspector:

Appium inspector is a tool which provides testers with a graphical user interface  for inspecting and interacting with elements within mobile applications.When setting up automation with Appium for ios devices, it’s crucial to define the desired capabilities appropriately. These capabilities act as parameters that instruct Appium on how to interact with the device and the application under test.

Open the Appium Inspector and enter Remote Host as 0.0.0.0 and Remote Port as 4723. and set the following parameters as desired capabilities:

appium parameters for ios automation
  • deviceName: This parameter specifies the name of the testing device. It’s essential to provide an accurate device name to ensure that Appium connects to the correct device. 
  • udid: The Unique Device Identifier (UDID) uniquely identifies the device among all others. Appium uses this identifier to target the specific device for automation. Make sure to input the correct UDID of the device you intend to automate. 
  • platformName: The platform name is set to “iOS,” indicating that the automation targets the iOS platform.
  • platformVersion: This parameter denotes the version of the ios platform of the device. 
  • automationName: Appium supports multiple automation frameworks, and here, “XCUITest” is specified as the automation name. XCUITest is a widely used automation framework for testing iOS apps. 
  • bundleId: This unique identifier for an app in Xcode allows the system to distinguish it.

Once you set all the above capabilities, click the Start Session button to open the application in Appium Inspector with the specified capabilities. Your app is now ready for inspection to prepare for efficient automation testing.

automation testing

also you can see the following image on your device’s screen:

Automation running

Conclusion

Setting up Appium for testing on real iOS devices can initially seem complicated due to the numerous steps involved and the technical nuances of configuring software and environment variables. However, by following this step-by-step guide, the process becomes easy and manageable.

Having the right tools and configurations in place streamlines your testing workflow, ensuring efficient and effective testing of your mobile apps on real devices. This not only improves the quality of your apps but also enhances your overall development process.

Remember, the key to successful automation testing is meticulous setup and configuration. By taking the time to follow each step carefully, you will save yourself from potential issues down the line and make your testing process smoother.

Click here to read more blogs like this.