weexをiOS_Androidで実行と実行時のエラー解決まとめ

WEEXを「iOS, Android, Web」で動かすまでと、開発に使うリンクなどをまとめた記事です！
エラーを踏みまくったので、エラーの解決策が特に参考になると思います。

# WEEXとは
<img width="104" alt="スクリーンショット 2018-12-18 19.44.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/89992/7221f26c-c988-4c72-5806-4e5ddcd10a0c.png">
[WEEX](https://weex.incubator.apache.org/guide/index.html)は、Vue.jsで開発したコードを「iOSとAndroidとWeb」にコンパイルするものです。
iOSとAndroidのネイティブのコードにコンパイルするので、WebViewで表示するより処理が滑らかになります。
ReactNativeのVue.js版。
フロントでVue.jsの採用に比例して、weexの利用も今後増えていくかも。
[・WEEXのサンプル一覧(ここでだいたいのできることがわかる)](https://weex.incubator.apache.org/examples.html)

# 1 セットアップ
## 1.1 install
npmの「weex作成ツール」をインストールします。([npmの環境構築はこちら](https://qiita.com/taketakekaho/items/dd08cf01b4fe86b2e218))
これで、weexコマンドが使えるようになります。

```
npm -g i weex-toolkit
```
 
## 1.2 weexのプロジェクト作成
「weex create」の後ろにプロジェクト名を書いて作成します。
今回はweex-testという名前で作成。
実行すると、Project名、詳細などを聞かれるのでそれぞれ入力。
完了すると「weex-test」というフォルダが作成される。

```
weex create weex-test
```

## 1.3 npmのパッケージのインストール
npmはライブラリの情報だけをファイルにまとめておき、「npm install」でライブラリのインストールをするようになっているので、ライブラリ(パッケージ)のインストールをする。

```
cd weex-test
npm install 
```

## 1.4 プロジェクトの起動
下のコマンドを実行すると自動的にブラウザが立ち上がる。

```
npm start
```

このようにブラウザでアプリの状態を確認できる。
右下にある「conmonents/HelloWorldとindex」がページであり、クリックすると左のiphoneの画面が切り替わる。
右のQRコードは、次の項目のweexアプリをダウンロードしてスキャンする。
<img width="782" alt="スクリーンショット 2018-12-11 22.54.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/89992/2ee6fdf0-58cb-4271-0957-66309aeeb808.png">

## ビルド内容をアプリで試せる公式アプリ
ビルド内容をWeexが提供するアプリから実行することもできます。
[・iOSアプリ](https://itunes.apple.com/cn/app/weex-playground/id1130862662?mt=8)
[・Androidアプリ](https://weex-project.io/tools/playground.html)
## 1.5 iOSとAndroidの環境を整える
下の二つのコマンドを実行して、iOSとAndroidをビルドするための環境をインストールします。

```
weex platform add ios
weex platform add android
```

# 2 シュミレータで実行
## 2.1 iOSのビルド
下記のコマンドを実行すると、自動的にiPhoneシュミレータが起動する。
ビルドにはしばらく時間がかかる。
※ Xcodeを最新にアップデートしておく必要あり。

```
weex run ios
```

### 2.2 実行するiOSシュミレータのバージョンを選ぶ
選ぶ画面が出るので矢印で移動して、Enterで決定。
<img width="362" alt="スクリーンショット 2018-12-11 23.23.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/89992/2752283a-6ea2-1b7e-75d9-fe5baa95ed7d.png">


### ERR1. このエラーが出た場合は、

```
stderr: xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
```

この2つのコマンドを実行。

```
xcode-select --install
sudo xcode-select --switch /Library/Developer/CommandLineTools 
```

### ERR2. このエラーが出た場合は、
```
Error:Error: Command failed: pod update
```

このコマンドを実行。
[cocoapodのインストール記事](https://qiita.com/ShinokiRyosei/items/3090290cb72434852460)

```
sudo gem install cocoapods
```

### 2.4 実行された
初回だとインストールに時間が１０分ほどかかるが、２回目からはビルドのみなので、３分ほど。
基本的に開発はWebブラウザで行う感じ。

<img width="292" alt="スクリーンショット 2018-12-11 23.27.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/89992/3f8edfb5-6d1b-7ea2-a615-c2dbe9e6306a.png">

# 2.6 iOSの実機で実行
platformsフォルダのiosフォルダを開きます。
そこにXcodeのファイルがあるので、それを開くとXcodeから実機で実行できます。
[・Xcode実機で実行方法](https://qiita.com/natsumo/items/3f1dd0e7f5471bd4b7d9)

```
open weex-test/platforms/ios
```


## 2.6 Androidのビルド
Androidの実機で実行します。
USBに接続したら、ファイルの接続の許可をしてください。
ビルドにはしばらく時間がかかる。
※ AndroidStudioをインストールしておき、アップデートしておくと良い。
※ AndroidSDKを入れておく必要あり。
[・Mac AndroidStudioインストール](https://akira-watson.com/android/adt-mac.html)
[・Windows AndroidStudioインストール](https://www.kunihikokaneko.com/dblab/toolchain/androidstudio.html)

```
weex run android
```

### ERR1. このエラーが出た場合は、
```
adb: command not found
```

「 ~/.bash_profile」ファイルに、下のコマンドを追加。
AndroidSDKをインストールして、「platform-tools」のフォルダをPATHに追加。

```~/.bash_profile
// abdコマンドの設定
export PATH=$PATH:/Users/ここに自分のユーザ名/Library/Android/sdk/platform-tools/
```

追加したら、「source ~/.bash_profile」を実行。


### ERR2. このエラーが出た場合は、

```
Environment variable $ANDROID_HOME not found !
```

「 ~/.bash_profile」ファイルに、下のコマンドを追加。

```~/.bash_profile
// Android Home
export ANDROID_HOME="/Users/ここに自分のユーザ名/Library/Android/sdk/"
```

追加したら、「source ~/.bash_profile」を実行。

### ERR3. このエラーが出た場合は、
デバイスが接続さていない。

```
Error: No android devices found.
```

このコマンドで接続されているデバイスの一覧を表示しても出ないはず。

```
adb devices
```

「~/.android/adb_usb.ini」のファイルにIDを追加する。
[この記事を参考](https://stackoverflow.com/questions/7135999/adb-not-finding-my-device-phone-macos-x)

```~/.android/adb_usb.ini
自身のデバイスのVenderID
```

これでもダメな場合は、デバイスとパソコンを繋げるケーブルに問題があるかもです。
自分はケーブルが充電のみできるやつで、データ送信ができないやつを使ってしまっていて、エラーしました><

### ERR4. このエラーが出た場合は、

```
Error: Error: Command failed: ./gradlew  assembleDebug

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '10.0.2'.
```

上のエラーが出たら、javaのバージョンをJAVA8まで下げる必要があります。(2018/12/14では)
[・MacでJAVAのバージョン切り替え](https://qiita.com/mas0061/items/2fe9333f045800d00b5c)

### 2.7 実行された
Androidの実機で実行されました！

![Screenshot_20181214-230117.jpg](https://qiita-image-store.s3.amazonaws.com/0/89992/b2a17a4c-0d74-b9a8-86e5-8ee86e757f89.jpeg)


## 2.8 Webのビルド
下のコマンドを実行すると、「localhost:番号」というURLがでるので、ブラウザで開く。

```
weex run web
```
### 2.9 Webで実行できた
<img width="393" alt="スクリーンショット 2018-12-12 1.18.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/89992/31848098-7373-20fe-4cf4-5464ccf73bee.png">

## 3. 開発

### 3.1　リファレンス
コンポーネント一覧はこのページ参考。
各リファレンスのページ下部に「Exampleリンク」があるのでそこからどういう機能か確認できる。
https://weex.incubator.apache.org/references/components/a.html

### 3.2 パッケージの利用
画面下にあるタブバーなどは、npmのパッケージをダウンロードして使う。
https://www.npmjs.com/package/weex-tabbar

### 3.3 http request 
stream.fetchを使う
https://weex.incubator.apache.org/references/modules/stream.html

### 3.4 実機のストレージに保存
storageクラスを使う
https://weex.incubator.apache.org/references/modules/storage.html

### 3.5 iOSとAndroid独自の機能を使う
weexに含まれてない機能は、それぞれネイティブのコードを追加しないといけない。
ReactNativeと比較するポイントとして、どこまで機能やプラグインがあるかもありそう。
[・iOS拡張](https://weex.incubator.apache.org/guide/extend-ios.html)
[・Android拡張](https://weex.incubator.apache.org/guide/extend-android.html)

## 参考
[・公式チュートリアル](https://weex.incubator.apache.org/guide/)