/
Mobile Local Run Setup (MacOS)

Mobile Local Run Setup (MacOS)

If you have the proper licensing (Basically you will see the mobile commands being available in the command wizard), follow the steps below to setup local execution on your machine. 

 

Android

Installation of Major Requirements

  1. Install Homebrew (Homebrew )

  2. Install NodeJS with Homebrew brew install node

  3. Install Java Development Kit (versions 17-21 - we recommend using 21 LTS). You can download from Oracle_17 or Oracle_21 or Adoptium

  4. Install Appium via NPM and update drivers, using console:

npm install -g appium appium driver install uiautomator2 appium driver install xcuitest

5. In order to update Appium, you can use:

appium driver update uiautomator2 appium driver update xcuitest

6. Click Appium Inspector to download Appium Desktop Inspector.

7. Run the attached SH file to install the all other requirements automatically or follow the next steps manually.

Note: If you would like to do the setup manually and want to use zsh instead of bash, you should create/modify ~/.zprofile file.

 

Install Android Emulator Hypervisor

Run the command below:

./sdkmanager "extras;google;Android_Emulator_Hypervisor_Driver"

 

Set environment variables
We need to set environment variables, so Appium can communicate with ADB (Android Debug Bridge).

For example, Android Sdk (installation step 2) is placed on /Users/home/shad0w/Android/Sdk
Open ~/.bash_profile with any editor and add next lines to the bottom:

export ANDROID_HOME=/home/shad0w/Android/Sdk export PATH=$PATH:/home/shad0w/Android/Sdk/tools export PATH=$PATH:/home/shad0w/Android/Sdk/platform-tools

 

Install required emulator system image and create an Emulator
Go to your Android SDK manager folder, e.g. /Users/home/shad0w/Android/Sdk
Run next command to download system emulator.

./sdkmanager "system-images;android-26;google_apis;x86" ./avdmanager create avd -n Nexus_5X_Oreo --abi google_apis/x86 --package "system-images;android-26;google_apis;x86"

If you need to create a different emulator with a different API version, you can change the values in the commands. For example, if we want to create ‘Samsung Galaxy S20’ with API 27, we can use the following commands:

./sdkmanager "system-images;android-27;google_apis;x86" ./avdmanager create avd -n Samsung_Galaxy_S20_27_Oreo --abi google_apis/x86 --package "system-images;android-27;google_apis;x86"

Note: If you need x64 version of emulators, you can replace x86 with x86_64 in the lines above.

 

Install Android Emulator Hypervisor

Execute the below command in order to install Android Emulator Hypervisor (Intel HAXM is now obsolete and no longer used)

./sdkmanager "extras;google;Android_Emulator_Hypervisor_Driver"

 

Run created Emulator to be sure everything was created as planned. Go to Sdk/tools folder and run next command:

./emulator -avd Nexus_5X_Oreo -accel on

Kill simulator after

To verify that HAXM installation is successful, run next command:

emulator -accel-check

 

Run Appium
Open any console and run Appium there:

appium

 

Emulator Customization

In order to change the default values for the emulator RAM, resolution and DPI, follow the steps below:

  1. Navigate to the folder where your AVDs are located. For example, on ~/.android/avd

  2. Go to the folder with your device name, for example Google_Pixel_4XL_27_Oreo.avd and find config.ini file

  3. The parameters below must be updated if they already exist in the file. If they do not exist, simply add the missing ones to the bottom of the file (Do not add spaces between values and equals symbol):

hw.ramSize hw.lcd.width hw.lcd.height skin.name hw.lcd.density

A full list of specification is found on the bottom of this article.

 

For example, if our device is Samsung Galaxy S20, we can use the following parameters:

Device Information:

Device Name: Samsung Galaxy S20 Device RAM (Mb): 8192 Device Screen Inches: 6.2 Device Resolution: 1440x3199 Device Density: 480

Device Modifications in (config.ini.) file:

hw.ramSize=8192 hw.lcd.width=1440 hw.lcd.height=3199 skin.name=1440x3199 hw.lcd.density=480

 

"Android API 26 (Oreo) - LG Nexus 5X" -> "Nexus_5X_Oreo" "Android API 26 (Oreo) - Samsung Nexus 10" -> "Nexus_10" "Android API 27 (Oreo) - Amazon Fire 7" -> "Amazon_Fire_7_27_Oreo" "Android API 27 (Oreo) - Google Pixel 4 XL" -> "Google_Pixel_4XL_27_Oreo" "Android API 27 (Oreo) - Huawei Mate 20" -> "Huawei_Mate_20_27_Oreo" "Android API 27 (Oreo) - Huawei Mate 20 Pro" -> "Huawei_Mate_20_Pro_27_Oreo" "Android API 27 (Oreo) - Huawei Mate 30 Pro" -> "Huawei_Mate_30_Pro_27_Oreo" "Android API 27 (Oreo) - Huawei P30" -> "Huawei_P30_27_Oreo" "Android API 27 (Oreo) - Huawei P30 Pro" -> "Huawei_P30_Pro_27_Oreo" "Android API 27 (Oreo) - LG G8 ThinQ" -> "LG_G8_ThinQ_27_Oreo" "Android API 27 (Oreo) - LG Nexus 5X" -> "LG_Nexus_5X_27_Oreo" "Android API 27 (Oreo) - LG V40 ThinQ" -> "LG_V40_TninQ_27_Oreo" "Android API 27 (Oreo) - LG X Venture" -> "LG_X_Venture_27_Oreo" "Android API 27 (Oreo) - Moto G7" -> "Moto_G7_27_Oreo" "Android API 27 (Oreo) - Motorola One Zoom" -> "Motorola_One_Zoom_27_Oreo" "Android API 27 (Oreo) - Motorola One Action" -> "Motorola_One_Action_27_Oreo" "Android API 27 (Oreo) - OnePlus 8" -> "OnePlus_8_27_Oreo" "Android API 27 (Oreo) - OnePlus 8 Pro" -> "OnePlus_8_Pro_27_Oreo" "Android API 27 (Oreo) - Samsung Galaxy Note10" -> "Samsung_Galaxy_Note10_27_Oreo" "Android API 27 (Oreo) - Samsung Galaxy Note10+" -> "Samsung_Galaxy_Note10_Plus_27_Oreo" "Android API 27 (Oreo) - Samsung Galaxy S8" -> "Samsung_Galaxy_S8_27_Oreo" "Android API 27 (Oreo) - Samsung Galaxy S10" -> "Samsung_Galaxy_S10_27_Oreo" "Android API 27 (Oreo) - Samsung Galaxy S20" -> "Samsung_Galaxy_S20_27_Oreo" "Android API 27 (Oreo) - Samsung Galaxy S20+" -> "Samsung_Galaxy_S20_Plus_27_Oreo" "Android API 27 (Oreo) - Samsung Galaxy Tab S6" -> "Samsung_Galaxy_Tab_S6_27_Oreo" "Android API 27 (Oreo) - Samsung Galaxy Tab S6 Lite" -> "Samsung_Galaxy_Tab_S6_Lite_27_Oreo" "Android API 27 (Oreo) - Samsung Nexus 10" -> "Samsung_Nexus_10_27_Oreo" "Android API 27 (Oreo) - Xiaomi Mi 10 Pro" -> "Xiaomi_Mi_10_Pro_27_Oreo" "Android API 28 (Pie) - Amazon Fire 7" -> "Amazon_Fire_7_28_Pie" "Android API 28 (Pie) - Google Pixel 4 XL" -> "Google_Pixel_4XL_28_Pie" "Android API 28 (Pie) - Huawei Mate 20" -> "Huawei_Mate_20_28_Pie" "Android API 28 (Pie) - Huawei Mate 20 Pro" -> "Huawei_Mate_20_Pro_28_Pie" "Android API 28 (Pie) - Huawei Mate 30 Pro" -> "Huawei_Mate_30_Pro_28_Pie" "Android API 28 (Pie) - Huawei P30" -> "Huawei_P30_28_Pie" "Android API 28 (Pie) - Huawei P30 Pro" -> "Huawei_P30_Pro_28_Pie" "Android API 28 (Pie) - LG G8 ThinQ" -> "LG_G8_ThinQ_28_Pie" "Android API 28 (Pie) - LG Nexus 5X" -> "LG_Nexus_5X_28_Pie" "Android API 28 (Pie) - LG V40 ThinQ" -> "LG_V40_TninQ_28_Pie" "Android API 28 (Pie) - LG X Venture" -> "LG_X_Venture_28_Pie" "Android API 28 (Pie) - Moto G7" -> "Moto_G7_28_Pie" "Android API 28 (Pie) - Motorola One Zoom" -> "Motorola_One_Zoom_28_Pie" "Android API 28 (Pie) - Motorola One Action" -> "Motorola_One_Action_28_Pie" "Android API 28 (Pie) - OnePlus 8" -> "OnePlus_8_28_Pie" "Android API 28 (Pie) - OnePlus 8 Pro" -> "OnePlus_8_Pro_28_Pie" "Android API 28 (Pie) - Samsung Galaxy Note10" -> "Samsung_Galaxy_Note10_28_Pie" "Android API 28 (Pie) - Samsung Galaxy Note10+" -> "Samsung_Galaxy_Note10_Plus_28_Pie" "Android API 28 (Pie) - Samsung Galaxy S8" -> "Samsung_Galaxy_S8_28_Pie" "Android API 28 (Pie) - Samsung Galaxy S10" -> "Samsung_Galaxy_S10_28_Pie" "Android API 28 (Pie) - Samsung Galaxy S20" -> "Samsung_Galaxy_S20_28_Pie" "Android API 28 (Pie) - Samsung Galaxy S20+" -> "Samsung_Galaxy_S20_Plus_28_Pie" "Android API 28 (Pie) - Samsung Galaxy Tab S6" -> "Samsung_Galaxy_Tab_S6_28_Pie" "Android API 28 (Pie) - Samsung Galaxy Tab S6 Lite" -> "Samsung_Galaxy_Tab_S6_Lite_28_Pie" "Android API 28 (Pie) - Samsung Nexus 10" -> "Samsung_Nexus_10_28_Pie" "Android API 28 (Pie) - Xiaomi Mi 10 Pro" -> "Xiaomi_Mi_10_Pro_28_Pie" "Android API 29 (Android10) - Amazon Fire 7" -> "Amazon_Fire_7_29_Android10" "Android API 29 (Android10) - Google Pixel 4 XL" -> "Google_Pixel_4XL_29_Android10" "Android API 29 (Android10) - Huawei Mate 20" -> "Huawei_Mate_20_29_Android10" "Android API 29 (Android10) - Huawei Mate 20 Pro" -> "Huawei_Mate_20_Pro_29_Android10" "Android API 29 (Android10) - Huawei Mate 30 Pro" -> "Huawei_Mate_30_Pro_29_Android10" "Android API 29 (Android10) - Huawei P30" -> "Huawei_P30_29_Android10" "Android API 29 (Android10) - Huawei P30 Pro" -> "Huawei_P30_Pro_29_Android10" "Android API 29 (Android10) - LG G8 ThinQ" -> "LG_G8_ThinQ_29_Android10" "Android API 29 (Android10) - LG Nexus 5X" -> "LG_Nexus_5X_29_Android10" "Android API 29 (Android10) - LG V40 ThinQ" -> "LG_V40_TninQ_29_Android10" "Android API 29 (Android10) - LG X Venture" -> "LG_X_Venture_29_Android10" "Android API 29 (Android10) - Moto G7" -> "Moto_G7_29_Android10" "Android API 29 (Android10) - Motorola One Zoom" -> "Motorola_One_Zoom_29_Android10" "Android API 29 (Android10) - Motorola One Action" -> "Motorola_One_Action_29_Android10" "Android API 29 (Android10) - OnePlus 8" -> "OnePlus_8_29_Android10" "Android API 29 (Android10) - OnePlus 8 Pro" -> "OnePlus_8_Pro_29_Android10" "Android API 29 (Android10) - Samsung Galaxy Note10" -> "Samsung_Galaxy_Note10_29_Android10" "Android API 29 (Android10) - Samsung Galaxy Note10+" -> "Samsung_Galaxy_Note10_Plus_29_Android10" "Android API 29 (Android10) - Samsung Galaxy S8" -> "Samsung_Galaxy_S8_29_Android10" "Android API 29 (Android10) - Samsung Galaxy S10" -> "Samsung_Galaxy_S10_29_Android10" "Android API 29 (Android10) - Samsung Galaxy S20" -> "Samsung_Galaxy_S20_29_Android10" "Android API 29 (Android10) - Samsung Galaxy S20+" -> "Samsung_Galaxy_S20_Plus_29_Android10" "Android API 29 (Android10) - Samsung Galaxy Tab S6" -> "Samsung_Galaxy_Tab_S6_29_Android10" "Android API 29 (Android10) - Samsung Galaxy Tab S6 Lite" -> "Samsung_Galaxy_Tab_S6_Lite_29_Android10" "Android API 29 (Android10) - Samsung Nexus 10" -> "Samsung_Nexus_10_29_Android10" "Android API 29 (Android10) - Xiaomi Mi 10 Pro" -> "Xiaomi_Mi_10_Pro_29_Android10"
Device Name: Amazon Fire 7 Device RAM (Mb): 1024 Device Screen Inches: 7 Device Resolution: 1024x600 Device Density: 160 --------------- hw.ramSize=1024 hw.lcd.width=1024 hw.lcd.height=600 skin.name=1024x600 hw.lcd.density=160 ============================== Device Name: Google Pixel 4 XL Device RAM (Mb): 6144 Device Screen Inches: 6.3 Device Resolution: 1440x3040 Device Density: 480 --------------- hw.ramSize=6144 hw.lcd.width=1440 hw.lcd.height=3040 skin.name=1440x3040 hw.lcd.density=480 ============================== Device Name: Huawei Mate 20 Device RAM (Mb): 6144 Device Screen Inches: 6.53 Device Resolution: 1080x2244 Device Density: 320 --------------- hw.ramSize=6144 hw.lcd.width=1080 hw.lcd.height=2244 skin.name=1080x2244 hw.lcd.density=320 ============================== Device Name: Huawei Mate 20 Pro Device RAM (Mb): 8192 Device Screen Inches: 6.39 Device Resolution: 1440x3120 Device Density: 480 --------------- hw.ramSize=8192 hw.lcd.width=1440 hw.lcd.height=3120 skin.name=1440x3120 hw.lcd.density=480 ============================== Device Name: Huawei Mate 30 Pro Device RAM (Mb): 8192 Device Screen Inches: 6.53 Device Resolution: 1176x2400 Device Density: 480 --------------- hw.ramSize=8192 hw.lcd.width=1176 hw.lcd.height=2400 skin.name=1176x2400 hw.lcd.density=480 ============================== Device Name: Huawei P30 Device RAM (Mb): 6144 Device Screen Inches: 6.1 Device Resolution: 1080x2340 Device Density: 480 --------------- hw.ramSize=6144 hw.lcd.width=1080 hw.lcd.height=2340 skin.name=1080x2340 hw.lcd.density=480 ============================== Device Name: Huawei P30 Pro Device RAM (Mb): 8192 Device Screen Inches: 6.47 Device Resolution: 1080x2340 Device Density: 320 --------------- hw.ramSize=8192 hw.lcd.width=1080 hw.lcd.height=2340 skin.name=1080x2340 hw.lcd.density=320 ============================== Device Name: LG G8 ThinQ Device RAM (Mb): 6144 Device Screen Inches: 6.1 Device Resolution: 1440x3120 Device Density: 480 --------------- hw.ramSize=6144 hw.lcd.width=1440 hw.lcd.height=3120 skin.name=1440x3120 hw.lcd.density=480 ============================== Device Name: LG Nexus 5X Device RAM (Mb): 2048 Device Screen Inches: 5.2 Device Resolution: 1080x1920 Device Density: 480 --------------- hw.ramSize=2048 hw.lcd.width=1080 hw.lcd.height=1920 skin.name=1080x1920 hw.lcd.density=480 ============================== Device Name: LG V40 ThinQ Device RAM (Mb): 6144 Device Screen Inches: 6.4 Device Resolution: 1440x3120 Device Density: 480 --------------- hw.ramSize=6144 hw.lcd.width=1440 hw.lcd.height=3120 skin.name=1440x3120 hw.lcd.density=480 ============================== Device Name: LG X Venture Device RAM (Mb): 2048 Device Screen Inches: 5.2 Device Resolution: 1080x1920 Device Density: 480 --------------- hw.ramSize=2048 hw.lcd.width=1080 hw.lcd.height=1920 skin.name=1080x1920 hw.lcd.density=480 ============================== Device Name: Moto G7 Device RAM (Mb): 4096 Device Screen Inches: 6.2 Device Resolution: 1080x2270 Device Density: 480 --------------- hw.ramSize=4096 hw.lcd.width=1080 hw.lcd.height=2270 skin.name=1080x2270 hw.lcd.density=480 ============================== Device Name: Motorola One Zoom Device RAM (Mb): 4096 Device Screen Inches: 6.39 Device Resolution: 1080x2340 Device Density: 480 --------------- hw.ramSize=4096 hw.lcd.width=1080 hw.lcd.height=2340 skin.name=1080x2340 hw.lcd.density=480 ============================== Device Name: Motorola One Action Device RAM (Mb): 4096 Device Screen Inches: 6.3 Device Resolution: 1080x2520 Device Density: 480 --------------- hw.ramSize=4096 hw.lcd.width=1080 hw.lcd.height=2520 skin.name=1080x2520 hw.lcd.density=480 ============================== Device Name: OnePlus 8 Device RAM (Mb): 12288 Device Screen Inches: 6.55 Device Resolution: 1080x2400 Device Density: 480 --------------- hw.ramSize=12288 hw.lcd.width=1080 hw.lcd.height=2400 skin.name=1080x2400 hw.lcd.density=480 ============================== Device Name: OnePlus 8 Pro Device RAM (Mb): 12288 Device Screen Inches: 6.78 Device Resolution: 1440x3168 Device Density: 480 --------------- hw.ramSize=12288 hw.lcd.width=1440 hw.lcd.height=3168 skin.name=1440x3168 hw.lcd.density=480 ============================== Device Name: Samsung Galaxy Note10 Device RAM (Mb): 8192 Device Screen Inches: 6.3 Device Resolution: 1080x2280 Device Density: 480 --------------- hw.ramSize=8192 hw.lcd.width=1080 hw.lcd.height=2280 skin.name=1080x2280 hw.lcd.density=480 ============================== Device Name: Samsung Galaxy Note10+ Device RAM (Mb): 12288 Device Screen Inches: 6.8 Device Resolution: 1440x3040 Device Density: 480 --------------- hw.ramSize=12288 hw.lcd.width=1440 hw.lcd.height=3040 skin.name=1440x3040 hw.lcd.density=480 ============================== Device Name: Samsung Galaxy S8 Device RAM (Mb): 4096 Device Screen Inches: 5.8 Device Resolution: 1440x2960 Device Density: 480 --------------- hw.ramSize=4096 hw.lcd.width=1440 hw.lcd.height=2960 skin.name=1440x2960 hw.lcd.density=480 ============================== Device Name: Samsung Galaxy S10 Device RAM (Mb): 8192 Device Screen Inches: 6.1 Device Resolution: 1440x3040 Device Density: 480 --------------- hw.ramSize=8192 hw.lcd.width=1440 hw.lcd.height=3040 skin.name=1440x3040 hw.lcd.density=480 ============================== Device Name: Samsung Galaxy S20 Device RAM (Mb): 8192 Device Screen Inches: 6.2 Device Resolution: 1440x3199 Device Density: 480 --------------- hw.ramSize=8192 hw.lcd.width=1440 hw.lcd.height=3199 skin.name=1440x3199 hw.lcd.density=480 ============================== Device Name: Samsung Galaxy S20+ Device RAM (Mb): 8192 Device Screen Inches: 6.7 Device Resolution: 1440x3200 Device Density: 480 --------------- hw.ramSize=8192 hw.lcd.width=1440 hw.lcd.height=3200 skin.name=1440x3200 hw.lcd.density=480 ============================== Device Name: Samsung Galaxy Tab S6 Device RAM (Mb): 6144 Device Screen Inches: 10.5 Device Resolution: 2560x1600 Device Density: 320 --------------- hw.ramSize=6144 hw.lcd.width=2560 hw.lcd.height=1600 skin.name=2560x1600 hw.lcd.density=320 ============================== Device Name: Samsung Galaxy Tab S6 Lite Device RAM (Mb): 4096 Device Screen Inches: 10.4 Device Resolution: 2000x1200 Device Density: 213 --------------- hw.ramSize=4096 hw.lcd.width=2000 hw.lcd.height=1200 skin.name=2000x1200 hw.lcd.density=213 ============================== Device Name: Samsung Nexus 10 Device RAM (Mb): 2048 Device Screen Inches: 10 Device Resolution: 2560x1600 Device Density: 320 --------------- hw.ramSize=2048 hw.lcd.width=2560 hw.lcd.height=1600 skin.name=2560x1600 hw.lcd.density=320 ============================== Device Name: Xiaomi Mi 10 Pro Device RAM (Mb): 12288 Device Screen Inches: 6.67 Device Resolution: 1080x2340 Device Density: 320 --------------- hw.ramSize=12288 hw.lcd.width=1080 hw.lcd.height=2340 skin.name=1080x2340 hw.lcd.density=320

 

iOS

  1. Register an account on developer.apple.com. It’s free.

  2. Download and install Xcode from AppStore.

  3. Run Xcode and follow basic instructions if any. Quit Xcode.

  4. Install Command Line Tools for Xcode that fit your Xcode version from https://developer.apple.com/download/all/ (login with your developer account)

  5. Run Xcode and create single view project in Xcode from template.

  6. Navigate in Xcode to devices and simulators view. Windows → Devices and Simulators (or Shift+CMD+2).

  7. Switch to Simulators tab. Create here all the Simulators that you plan to use relatively to Mobile dropdown list in Subject 7 preferences. Names of simulators should fit dropdown names.

    Screenshot 2024-04-18 at 13.43.58.png
  8. Now application testing in Simulators should work.

     

Real devices

Apple does not allow to run on real devices unsigned applications of unknown authors. We use Appium as engine for testing, it installs Appium tools on device. When you run iOS test first time (after installation or after Appium update) Appium compiles updated version of Appium driver on the fly from sources. To do so it needs developer certificate.

  1. If you are not developer and you don’t have all the required certs and settings, you need to run Xcode and create new Single View project (or open already created project from step #5 in instructions above).

  2. Open project Target section → Signing & Capabilities tab.

  3. Set checkbox “Automatically manage signing”

    Screenshot 2024-04-18 at 13.58.54.png
  4. Select the Team. First time you will need to select “Add and account…”

  5. In the displayed popup, add the developer account you created in the beginning (sign in). As result Developer Certificate will be created. You can close accounts popup.

  6. Now in Target → Signing & Capabilities tab you will see 2 things from certificate that you will need:

    • Code sign identity that is Apple Development in the screenshot above

    • Team ID in round brackets that is 5KA9C2KB6C in the screenshot above.

  7. Navigate to your home folder and create file sign.xcconfig. E.g. /Users/shad0w/sign.xcconfig

  8. Put next content inside:

    DEVELOPMENT_TEAM = 5KA9C2KB6C CODE_SIGN_IDENTITY = Apple Development

    Replace values with values you have

  9. Also in home folder create file driverOverrideBundleId. E.g. /Users/shad0w/driverOverrideBundleId

  10. Put the only line with application Bundle ID inside like:

    net.slizh.WebDriverAgentRunner

    Warning!

    • Application name should be strongly WebDriverAgentRunner.

    • Domains of Bundle ID altogether should be absolutely unique and don’t correspond to real software Bundle IDs, e.g.

      com.my.absolutely.unique.bundle123.WebDriverAgentRunner
  11. Now first test case execution on this machine will take some time to compile driver on the fly, but next real device tests will go faster.

Related content