[Set up] appium 2.x in Mac for iOS APP (Ventura)


# Mac

今回は、Apple M1 chip のmacを用いて
Ventura 13.3.1 にて構築した

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/becfd7e0-d883-bbdd-92ff-5214f1265bfc.png)


# Java

Javaは最新の２０を用いた
M1なので、ARM64 DMG Installerを使用する

https://www.oracle.com/java/technologies/downloads/#java20

次に、JAVAのPATH周りを設定する
macのdefault shellがzshなので、.zshrcを編集する


```
vi .zshrc 


---
export JAVA_HOME=JAVA_HOME=$(/usr/libexec/java_home)
---
```


```
% java -version

java version "20.0.1" 2023-04-18
Java(TM) SE Runtime Environment (build 20.0.1+9-29)
Java HotSpot(TM) 64-Bit Server VM (build 20.0.1+9-29, mixed mode, sharing)
```


# Android Studio

Androidのテストを行う場合、必須
今回、 Android Studio Flamingo | 2022.2.1 Patch 2 をインストールした。
基本的にデフォルトのインストールで問題ない。（開発ツール含む）

https://developer.android.com/studio

インストール後、PATHの設定が必要となる。
PATHの情報は、Tools -> SDK Manager をopenし、SDK Locationを取得する。

これより、 ANDROID_HOME の場所を設定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/3f8741d8-5103-e0d8-9de2-97f32c2ab1e8.png)


```
vi .zshrc 


---
export ANDROID_HOME=/Users/USERNAME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools
---
```

# Xcode

iOSのテストをするときは必須
XcodeはVersion 14.3 (14E222b)を利用する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/9129fa22-a156-804d-903d-745fe37a61f2.png)


command lineで利用可能にする

```
xcode-select --install
```


対象のXcodeを指定する（基本的に、デフォルトで良いが、複数versionをinstallしている場合、
明示的に指定する

```
sudo xcode-select --switch /Applications/Xcode.app
```


# brew

package管理のツールをインストールする。

https://brew.sh/

以下コマンドでinstallする

```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```


brewのPATHを設定する
zshを使用しているので、以下コマンドで設定ファイルに書きこみ

```
echo 'eval $(/opt/homebrew/bin/brew shellenv)' >> ~/.zshrc 
```


最後にversionを確認する
```
% brew -v

Homebrew 4.0.19
```


# npm

javascript系package管理ツールをinstallする
appiumのinstall時に必要である。
nodebrew 最新版をインストールする

```
brew install nodebrew

/opt/homebrew/opt/nodebrew/bin/nodebrew setup_dirs

nodebrew install-binary latest
```

npmのversionを指定する
今回、v20.5.1であったので、このversionを指定する
```
nodebrew use v20.5.1
```

すると、currentのpathが設定される
```
ls -l ~/.nodebrew 
```

lrwxr-xr-x  1 ospdqa  staff  36 Aug 17 08:56 current -> /Users/ospdqa/.nodebrew/node/v20.5.1
drwxr-xr-x  3 ospdqa  staff  96 Aug 17 08:52 default
drwxr-xr-x  2 ospdqa  staff  64 Aug 17 08:52 iojs
drwxr-xr-x  3 ospdqa  staff  96 Aug 17 08:52 node
drwxr-xr-x  3 ospdqa  staff  96 Aug 17 08:52 src





pathを設定する

.zshrc 
```
export PATH=$HOME/.nodebrew/current/bin:$PATH
```

最後に初期化をする
```
npm init
```


reference###
versionを指定する場合、以下のように可能versionをlistupして対象のverionをinstallすることも可能

```
% nodebrew ls-remote

v19.0.0   v19.0.1   v19.1.0   v19.2.0   v19.3.0   v19.4.0   v19.5.0   v19.6.0
v19.6.1   v19.7.0   v19.8.0   v19.8.1   v19.9.0   
v20.0.0   v20.1.0   v20.2.0   
````

```
nodebrew install v20.2.0 
nodebrew use v20.2.0 
```


# Carthage

iOS library 管理ツールをinstallする

```
brew install carthage
```


# Appium

今回は将来性を考えて、appium2を使用する

尚、今現在appium desktopに関してはsupportが終了していた。
https://github.com/appium/appium-desktop/releases


以下の方法でインストールする



```
npm i --location=global appium
```

appiumの設定確認をするdoctorをインストール
```
npm install appium-doctor -g
```

appium inspectorは以下よりdmgをdownloadしてインストールする

https://github.com/appium/appium-inspector/releases

なお、起動すると以下のエラーで起動しない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/0406e51f-7b1d-9a59-42f1-b6ee78c0d084.png)

それを回避するために、以下コマンドを実行する
```
xattr -cr "/Applications/Appium Inspector.app"
```

# optionl library

appium-doctorを実行し、環境構築が十分かを確認する。
最低限necessaryに関する設定は完了させる。
optionalに関して、一部構築が完了していないものが表示される。
これは、必要に応じてインストールする必要がある。

ここでは、optionalのインストールに関して記述する

```
appium-doctor
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/133c7c2b-582e-9eb2-c0af-1814da1f03de.png)


### opencv4nodejs

opencvをinstallする
```
brew install opencv@4

brew link --force opencv@4
```

次に環境設定をする

.zshrc
```
export OPENCV4NODEJS_DISABLE_AUTOBUILD=1
export OPENCV_HOME=/opt/homebrew/Cellar/opencv/4.7.0_4/
export OPENCV_LIB_DIR=${OPENCV_HOME}/lib
export OPENCV_BIN_DIR=${OPENCV_HOME}/bin
export OPENCV_INCLUDE_DIR=${OPENCV_HOME}/include/opencv4
```

尚、OPENCV_HOMEはインストールされたversionのpathを設定する

設定後、以下を実行し、opencv4nodejsをインストールする
```
npm install -g opencv4nodejs  
```

### mjpeg-consumer

```
npm install -g mjpeg-consumer
```

### set-simulator-location

https://github.com/MobileNativeFoundation/set-simulator-location

```
brew install lyft/formulae/set-simulator-location
```


### idb

https://github.com/facebook/idb


install idb companion
```
brew tap facebook/fb
brew install idb-companion
```

install idb-client
```
pip3.11 install fb-idb
```

### applesimutils

```
brew tap wix/brew
brew install applesimutils
```

### ios-deploy

https://github.com/ios-control/ios-deploy


```
brew install ios-deploy
```

### bundletool.jar

以下より、bundletool.jar最新版をdownloadする

https://github.com/google/bundletool/releases

bundletool.jarをandroid sdk配下に設置する

```
mkdir ~/Library/Android/sdk/bundle-tool
cp ~/Downloads/bundletool-all-1.15.1.jar ~/Library/Android/sdk/bundle-tool/bundletool.jar
chmod +x ~/Library/Android/sdk/bundle-tool/bundletool.jar
```

最後に、bundletool.jarのpathを指定する

.zshrc
```
export PATH=${PATH}:${ANDROID_HOME}/bundle-tool
```


# Appium Driver

### uiautomator2
AndroidのためのDriver

https://github.com/appium/appium-uiautomator2-server
```
appium driver install uiautomator2
```

### chrome driver (waiting for bug fix)

https://github.com/appium/appium-chromium-driver

```
appium driver install chromium
```

今現在、installで問題が起きてみたいだ・・・
https://github.com/appium/appium/issues/18006



### xcuitest
iOSのためのDriver

https://github.com/appium/appium-xcuitest-driver
```
appium driver install xcuitest
```


# Device Setting

iPhoneでテストできる設定が必要

### Enabling Developer Mode on a device

https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device


### Enabling Web Inspector

https://developer.apple.com/library/archive/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/GettingStarted/GettingStarted.html



# xcuitest setting

iOSのテストを行うとき、xcuitestを使用する。
defaultだと、xbuildが失敗する

xbuildを実行した時のエラーメッセージ。（appium inspectorで接続するときも、同様のエラーを出す）
```
Testing failed:
	Signing for "WebDriverAgentRunner" requires a development team. Select a development team in the Signing & Capabilities editor.
	Testing cancelled because the build failed.
```

これは、signingが正しく設定されてないため、発生する。


まず、appium2のxcuitestのsourceの場所を確認する（1.xとはpathが異なる）
以下の場所にあると思う。

```
cd ~/.appium/node_modules/appium-xcuitest-driver     
```

次に、そこにあるWebDriverAgent.xcodeprojをxcodeで開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/97a858b6-8321-d1e5-20e9-e773965e4ffb.png)

buildを実行すると、警告画面になる
主に２点
-WebDriverAgent
-WebDriverAgentRunner

以下のように、Sigin Errorがでる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/35f7c7af-7bea-c20e-2f0a-569ae6b836aa.png)


Signing & Capabilities にて、Add Accountを選択する
このとき、apple developer accountでログインし、profileをダウンロード設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/2651e45a-aeed-92eb-6264-56803b58b578.png)

このエラー対応後、command lineでxbuild でテストする

```
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=$UDID' test
```
※$UDID は接続するiPhoneのUDID

成功すると、iphoneで以下のように、「Automation Running」のmessageが表示される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/3277a91b-9fb4-0a19-4d42-e7e2f2ad6131.png)



# 起動確認


appiumを実行する


```
appium
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/7d77610c-5dce-d546-d5d1-4ff1457690a4.png)


portなどoptionを指定したい場合、helpを参照
```
% appium -help
usage: appium server [-h] [--address ADDRESS] [--allow-cors] [--allow-insecure ALLOW_INSECURE] [--base-path BASE_PATH] [--callback-address CALLBACK_ADDRESS]
                     [--callback-port CALLBACK_PORT] [--debug-log-spacing] [--default-capabilities DEFAULT_CAPABILITIES] [--deny-insecure DENY_INSECURE]
                     [--keep-alive-timeout KEEP_ALIVE_TIMEOUT] [--local-timezone] [--log LOG] [--log-filters LOG_FILTERS] [--log-level LOG_LEVEL]
                     [--log-no-colors] [--log-timestamp] [--long-stacktrace] [--no-perms-check] [--nodeconfig NODECONFIG] [--port PORT] [--relaxed-security]
                     [--session-override] [--strict-caps] [--tmp TMP] [--trace-dir TRACE_DIR] [--use-drivers USE_DRIVERS] [--use-plugins USE_PLUGINS]
                     [--webhook WEBHOOK] [--driver-xcuitest-webdriveragent-port WEBDRIVERAGENT_PORT] [--shell] [--show-build-info] [--show-config]
                     [--config CONFIGFILE]
```

## inspectorで起動確認

### Case1 Android APP

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/62e2a838-f4f8-d795-0381-0ad4d41970db.png)


capabilitiesの例は以下の通り

| Parameter | note | 
|:-----------|:-----------|
| platformName       | android       |
| appium:deviceName       | device name       |
| appium:udid | device UDID       |
| appium:platformVersion | android version       |
| appium:appPackage | app package name       |
| appium:autoGrantPermissions | true       |
| appium:automationName | UIAutomator2       |
| appium:app | apk file path       |

### Case2 iOS APP

| Parameter | note | 
|:-----------|:-----------|
| platformName       | iOS       |
| appium:deviceName       | device name       |
| appium:udid | device UDID       |
| appium:platformVersion | iOS version       |
| appium:appPackage | app package name       |
| appium:autoGrantPermissions | true       |
| appium:automationName | XCUITest       |
| appium:app | ipa file path       |


### Case3 iOS Safari

| Parameter | note | 
|:-----------|:-----------|
| platformName       | iOS       |
| appium:deviceName       | device name       |
| appium:udid | device UDID       |
| appium:platformVersion | iOS version       |
| appium:autoGrantPermissions | true       |
| appium:automationName | XCUITest       |
| browserName | Safari      |


うまく設定ができていれば、以下のようにdeviceの情報を取得できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/06607219-1de3-1de9-8101-e08a8bb0be27.png)