AWS Device Farm も iOS サポートしたことだし、Appium 環境を Mac に構築してテストしようぜ！

# 1. 概要

以下のドキュメントを元に構成しています。
http://appium.io/slate/en/tutorial/ios.html

この記事のとおりやると、Appium をつかって iOS アプリを JUnit でテストしたり、Appium Ruby Console(ARC) でアプリのインスペクトできたりします。

↓実際に Appium でテストしているときのスクリーンをキャプチャしてみました。
[![IMAGE ALT TEXT HERE](https://qiita-image-store.s3.amazonaws.com/0/19485/49109dd3-71f1-54ff-4887-6e4c0feda7f2.png)](https://www.youtube.com/watch?v=Ka2QbZys-8I)
動画リンク：https://www.youtube.com/watch?v=Ka2QbZys-8I

# 2. インストール前後の環境

Mac OSX 10.10.4
Xcode N/A -> 6.4
Ruby ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin14] -> 2.2.2
RVM N/A -> 1.26.11
Java N/A -> 1.8.0_45
Homebrew N/A -> 0.9.5
Node.js N/A -> 0.12.6
NPM N/A -> 2.12.1
grunt N/A -> 0.4.5
ant N/A -> 1.9.5
Maven N/A -> 3.3.3

# 3. Xcode セットアップ
まずは、 AppStore から Xcode をダウンロード＆インストールして、一度だけ起動しておいてください。

# 4. Java セットアップ

## 4-1. Java をダウンロード＆インストール
http://www.oracle.com/technetwork/java/javase/downloads/index.html
[JDK Download] をクリック。 [Ma OS X x64] を選択して [jdk-8u45-macosx-x64.dmg] をダウンロード

## 4-2. インストール完了後にバージョンチェック
```shell-session
$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
```

# 5. Homebrew セットアップ

```shell-session
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew update
```

# 6. Ruby セットアップ

## 6-1. Ruby をインストール

```shell-session
$ \curl -sSL https://get.rvm.io | bash -s stable
$ source ~/.rvm/scripts/rvm
$ rvm install ruby
$ rvm list
$ rvm --default use 2.2.2
$ ruby —version
```

## 6-2. Gem, Bundler アップデート

```shell-session
$ gem update --system
$ gem install --no-rdoc --no-ri bundler
$ gem update
$ gem cleanup
$ gem --version
```

## 6-3. appium_console インストール

```shell-session
$ gem uninstall -aIx appium_lib
$ gem uninstall -aIx appium_console
$ gem install --no-rdoc --no-ri appium_console
```

## 6-4. flaky インストール
```shell-session
$ gem uninstall -aIx flaky
$ gem install --no-rdoc --no-ri flaky
```

# 7. Node.js セットアップ

既に Node をパッケージインストーラーでインストールしており、バージョンが適合しないような場合は、NPM と Node を 7-1. 7-2. の手順で事前にアンインストールする必要があるかもしれません。

## 7-1. npm アンインストール
```shell-session
sudo npm uninstall npm -g
```

## 7-2. node アンインストール
```shell-session
lsbom -f -l -s -pf /var/db/receipts/org.nodejs.pkg.bom \
| while read i; do
sudo rm /usr/local/${i}
done
sudo rm -rf /usr/local/lib/node \
/usr/local/lib/node_modules \
/var/db/receipts/org.nodejs.*
```

## 7-3. node, npm インストール

```shell-session
$ brew install node
$ node --version
$ npm --version
```

## 7-4. grunt インストール
```shell-session
$ npm install -g grunt grunt-cli
$ grunt --version
```

# 8. Ant, Maven セットアップ

```shell-session
$ brew install ant
$ brew install maven
$ ant -version
$ mvn -version
```

# 9. Appium セットアップ

## 9-1. appium を Clone
```shell-session
$ cd ~
$ git clone git://github.com/appium/appium.git
$ cd appium
$ ./reset.sh --ios --dev --verbose
```

## 9-2. appium 起動
```shell-session
$ node .
```

# 10. JUnit のための iOS サンプルアプリ (TestApp) をビルド

## 10-1. 別のターミナルウィンドウを起動

## 10-2. サンプルディレクトリにあるテストアプリをビルド
```shell-session
$ cd ~/appium/sample-code/apps/TestApp/
$ xcodebuild -configuration Release -sdk iphonesimulator8.4
```

※"8.4" はインストールしている iOS SDK のカレントバージョンです。

# 11. JUnit サンプルプログラム (SimpleTest.java) を起動

## 11-1. SimpleTest.java を編集
```shell-session
$ vi ~/appium/sample-code/examples/java/junit/src/test/java/com/saucelabs/appium/SimpleTest.java
```
```diff
- capabilities.setCapability("platformVersion", "8.1");
+ capabilities.setCapability("platformVersion", "8.4");
```

## 11-2. テスト開始
```shell-session
$ cd ~/appium/sample-code/examples/java/junit
$ mvn test -Dtest=com.saucelabs.appium.SimpleTest#testUIComputation
```


# 12. ARC のために iOS サンプルアプリをビルド
```shell-session
$ cd ~/appium/sample-code/apps/UICatalog/
$ xcodebuild -configuration Release -sdk iphonesimulator8.4
```

# 13. Appium Ruby Console (ARC) を起動＆実行

http://khacanh.github.io/2014/11/09/setup-appium-and-arc-to-test-android-apps/

```shell-session
$ cd ~/appium/sample-code/apps/UICatalog/
```

```shell-session
$ vi appium.txt
[caps]
platformName = "ios"
deviceName = "iPhone 6"
platformVersion = "8.4"
app = "./build/Release-iphonesimulator/UICatalog.app"
```

```shell-session
$ arc
```

With the console started, the next step is to begin automation. The pagecommand prints a list of elements that are of interest.

```shell-session
[1] pry(main)> page
```

※ARC コマンド:
http://appium.io/slate/en/tutorial/ios.html?ruby#page-command

# 免責
個人の意見です。