UiPathモバイルオートメーションiOSデバイス接続ガイド

この記事はUiPathブログ発信チャレンジ2023サマーの8日目の記事です。

# はじめに
UiPathのモバイルオートメーションはネイティブアプリやWebアプリのテスト自動化はもちろん、RPAで培われた豊富なアクティビティを利用してモバイルを使った作業自動化も出来るってとこもポイントです。UiPath社の顧客事例で「**モバイルアプリのテストができるTest Suiteが、唯一の選択肢に**」ってところが、個人的には、すごく印象的です。

ただ、ローカルiOSデバイスと接続する方法についてはUiPath公式ドキュメントの情報のままでは出来なかったり、グローバルのエンジニアがYoutubeで公開しているモバイルテストのウェビナーもiOSについては、クラウドサービスのSauce LabsやBrowserStackの利用しか見かけなかったので、一部、調べまくったw
本ブログはローカルiOSデバイスの接続を自力で突破した時のノウハウをガイド風（非公式）にして見ました。

尚、公式ドキュメントは、こちらです。

https://docs.uipath.com/ja/test-suite/automation-suite/2023.4/user-guide/ios-local-devices

# 必要な機材
事前に調達する機材をまとめてみました。
* Mac
* Windows PC
* USBケーブル(MacとローカルiOSデバイス間の通信で必要)
* iOSデバイス(iPhoneでもiPadでも）
* Wi-Fi環境

# 接続図
そして接続する構成は、こんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/6a48a702-6649-bdde-ceac-18ec3f21b152.png)



# 本ブログで利用した環境
MacやiOSデバイスの機種や各ソフトウェアバージョンにより、ブログ記載と異なってくる部分もあるので、前提として記載しておきます。

* Mac M1チップ搭載MacBook Air
* Mac iOS v13.4.1
* Xcode v14.3.1
* Appium 2.0
* iPhone7(iOS 15.7.6)　※iPhoneSE(iOS 16.5.1)も実証済み。
* UiPath Studio v2023.4.1
* UiPath.Mobile.Automation.Activities v2022.10.5

# 1. Macにソフトウェアをインストールする
(1) [Xcode](https://apps.apple.com/us/app/xcode/id497799835?mt=12"Xcode")をインストールする。

(2) ターミナルを開く。

(3) 次のコマンドを実行して Homebrew をインストールする。
```ruby:コマンド
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
:::note info
パスワードを求められたらMacのログインパスワードを入力する。
:::

```ruby:コマンド
export PATH="$PATH:/opt/homebrew/bin/"
```

(4) 次のコマンドを実行して Node.js をインストールする。

```ruby:コマンド
brew install node
```

(5) Appium をインストールする。

```ruby:コマンド
npm install -g appium@next
```

```ruby:コマンド
appium driver install xcuitest
```

# 2.MacのXcodeでWebDriverAgentを構築し、ローカルiOSデバイスにWebDriverAgentをインストール

(1) ローカルiOSデバイスをMacに接続する。

:::note warn
警告のポップアップが表示されたらデバイスのロックを解除して、コンピューターがデバイスにアクセスできるようにする。
:::

:::note info
ローカルiOSデバイスがiOS16以降の場合は、iOSデバイス側で[設定]>[プライバシーとセキュリティ]>[開発者モード]で有効にしておくこと。
:::

(2) ターミナルを開く。

(3) WebDriverAgent.xcodeprojを探す。

```ruby:コマンド
echo "$(dirname "$(find "$HOME/.appium" -name WebDriverAgent.xcodeproj)")"
```
:::note info
出力されるパスの例
/Users/[XXXX]/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent
:::

(4) 出力されたパスへFinderで移動する。

(5) WebDriverAgent.xcodeprojを開く。Xcodeが起動する。

(6) [WebDriverAgent]を選択し、[Targets]セクションの[WebDriverAgentRunner]を選択する。[Signing & Capabilities] タブに切り替える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/9b9eebc7-a824-9bcd-3420-deddc4686487.png)

(7) [Automatically manage signing] を選択し、[Team] からユーザー アカウントを選択する。[Bundle Identifier] を一意の値に変更する。例）com.UiPathgmail.WebDriverAgentRunner

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/775aa6cf-4562-3900-355f-d0ac22d6eec5.png)

(8) WebDriverAgentのナビゲーションバーで [WebDriverAgentRunner]を選択する。

(9) XCodeのメニューバーで[Product]を選択し、[Test] をクリックして、接続したiOSデバイス側へWebDriverAgentのインストールが開始される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/b8e73b42-d1da-5d88-8ee6-931a91c38125.png)

:::note warn
キーチェーンパスワードの入力が求められた場合はMacのログインパスワードを入力する。繰り返し求められることもある。
:::

:::note warn
下記の様にUnlockが求められる場合はローカルiOSデバイスのロックを解除する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/bc453e2f-943e-4aef-5c66-0640e42ff41c.png)

:::

:::note warn
下記のCloud not launch"WebDriverAgentRunner"が表示された場合はiOSデバイスの[設定]>[一般]>[VPNとデバイスの管理]に遷移し、信頼されていないデベロッパAppを選択して信頼する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/c15d96fb-42f8-db8e-b665-36b401ceec6a.png)
:::

(10) MacのターミナルでXcodeのパスを確認する。

```ruby:コマンド
xcode-select -print-path
```

(11) パスが下記の様なパスでない場合は下記を実行する。

```ruby:コマンド
sudo xcode-select -switch /Applications/Xcode.app
```

# 3.MacでWi-FiネットワークのIP アドレスを取得

(1)	Macで、アップルメニュー＞「システム設定」を選択し、サイドバーで「ネットワーク」をクリックします。右側でWi-Fiの接続済み表示の[詳細...]をクリックする。

(2)	Macが接続されているWi-FiネットワークのIP アドレスを後で使うのでコピーして保存しておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/feebf86c-3e02-2855-4a15-195d7d6f5e00.png)

:::note info
コピーしたIPアドレスはUiPath StudioのMDMで接続情報設定値として使用する。Appium URLの形式はhttp://＜IPアドレス＞:8001です。(8001はAppiumを開始するポート番号です)
:::

:::note warn
Wi-Fi再接続時にIPアドレスが変わる可能性があるので念のため、Mac起動の都度確認して保存する。
:::

# 4.XcodeからローカルiOSデバイスのUDIDを取得

(1) Xcodeのメニューで[Window] > [Devices and Simulators]に移動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/7ce2dc3d-24fe-8df2-6123-1d9cc9b0c7f3.png)

(2) [Devices]タブを選択し、接続したローカルiOSデバイスを選択する。

(3) Identifier をコピーする。これがデバイスのUDIDとなる。後でUiPath Studioのモバイルデバイスマネージャにて接続情報設定値として使用する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/4fe453cb-014c-69c5-ad47-d0b40f045f08.png)

(4)	Appium を起動する。起動の都度、これを実行する。

```ruby:コマンド
export PATH="$PATH:/opt/homebrew/bin/"
```

```ruby:コマンド
appium --port 8001 --default-capabilities "{\"appium:systemPort\":9001}"
```
※\はバックスラッシュで入力

# 5.UiPath StudioのモバイルデバイスマネージャでローカルiOSデバイスを設定

(1) UiPath Studioを立ち上げ、[テンプレート]で[モバイルテストプロジェクト]を選択しプロジェクトを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/29181c37-51e5-8b77-5dcc-1a619ae222bd.png)

(2) モバイルデバイスメネージャーを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/f50cafe9-ed7f-0d57-deb4-bd5ccc7c1e6b.png)

(3) 左側の[デバイス]タブを選択し、デバイス追加アイコンをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/a58e6fd2-c5e9-aa82-b45a-6de6fcf179fd.png)

(4) 接続するデバイス情報を設定する。
* 名前 - [デバイス] タブでデバイスを識別するための名前を入力する。
* Appium URL - 前述の手順でコピーした Appium URL を http://＜IPアドレス＞:8001 という形式で入力する。
* プラットフォーム - フィールドをクリックして、ドロップダウンから [iOS] を選択する。
* デバイス名 - デバイスの名前を入力する。
* 希望する追加機能 - 次の機能を追加する。

|名前|値 (Value)|
|:---|:---------|
|automationName|xcuitest|
|udid|前述の手順でコピーしたローカルiOSデバイスのIdentifier|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/a3a19b87-4d3a-bffc-9cfd-f550533c5ff6.png)

# 6.ローカルiOSデバイスとの接続を実行

(1) 接続を開始する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/69066ce8-4ebf-e102-4cd1-d5d0e56e0c47.png)

(2) 接続する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/987741eb-9046-a991-0847-a4429896740e.png)

(3) 接続される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/f56da9f6-dab5-7595-5539-f04d6fc21fc3.png)

# 7.接続時に指定したWebアプリケーションを立ち上げる

(1) Safariで自動化する場合はiOSデバイスの[設定]>[Safari]>[詳細]のWebインスペクタを有効に設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/541db356-176d-ad34-4ffe-22aaffd11cf1.png)


(2) モバイルデバイスマネージャの左側の[アプリケーション]タブを選択し、アプリケーション追加アイコンをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/da34f211-3075-3fce-c197-b794e171aadc.png)

(3) アプリケーション情報を設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/55ff88e0-abe9-bfb1-98b4-53f51d1b1f7d.png)

(4) アプリケーションを開始する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/02a606dc-4633-a1cd-4492-592f3befb30c.png)

(5) デバイスを選択し接続する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/2c08473c-b0f5-9418-995e-00d379ae8099.png)

(6) 接続され、指定したURLのWebページが表示する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/0a8bd673-d014-3dcd-5637-a0e31906f98e.png)

# 8.ワークフローからデバイス接続、Webアプリケーションを立ち上げる

(1) [モバイルデバイスの接続]アクティビティを挿入する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/f595e5f7-0fe1-ca7e-ff4e-ef71cf89ec30.png)

(2) [接続の詳細を選択]をクリックし、接続の詳細情報を設定、保存する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/89fd42f2-b397-f172-2331-40c7ee8d701c.png)

(3) ワークフローを実行すると接続される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/0a8bd673-d014-3dcd-5637-a0e31906f98e.png)

# 9.iOSシュミレータと接続する場合
(1) 接続したいiOSシミュレータを選択し、デバイスを切り替えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/4d5a9d47-697e-3b0c-1929-481bc5e0df68.png)

(2) Xcodeのメニューバーで[Product]を選択し、[Test] をクリックするとMacでiOSシミュレータが起動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/9b6d803f-18f9-cb0a-2f67-a729c1e1f63d.png)

(3) UiPath StudioのモバイルデバイスマネージャでiOSシュミレータのデバイスを追加し、接続情報を設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/03484d85-f1c3-4c80-6b79-af63ee150cc3.png)

(4) モバイルデバイスマネージャ上で接続を実行するとMacのiOSシュミレータと接続される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/4ec8c864-d7da-ffb2-c73f-a6ed17f5156e.png)


# 10.モバイルオートメーション開発へ

UiPathと接続すると下記の様なイメージでモバイルオートメーションをローコードで構築できます。デモとして、さくっと見せたかったので、UiPathモバイルデバイスマネージャのレコーディング機能を使ってます。

<iframe width="560" height="315" src="https://www.youtube.com/embed/vtZW1mvWk4s" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


# おわりに
Androidデバイスとの接続は、Macも使わないので、もう少し簡単です。
かつ、Androidの仮想デバイスとの接続だけなら、ホワイトペーパー[Test Suite のはじめ方](https://www.uipath.com/ja/resources/automation-whitepapers/-to-start-test-suite)も、まだ役に立ちます。と言うことで、本ブログでは難易度が比較的高くなるローカルiOSデバイス接続をガイドにしてみました。