Fuseのプレビューと書き出しについて

###プレビューと書き出しについて [(公式サイトへ)](https://www.fusetools.com/docs/basics/preview-and-export)

####◎Androidの準備
Androidのプレビューと書き出しには別途SDKが必要になります。fuseのセットアップが終わったら、コマンドラインで下記を実行します。

`fuse install android`

windowsの場合は別途[こちら](https://developer.android.com/studio/run/oem-usb.html#Drivers)から端末にあったドライバをインストールする必要があります。

Android側の「USBデバッグを有効化」するのも忘れずに。

####◎iOSの準備
iOS向けに書き出す場合はMac OS Xと、最新版のXcodeが必要です。また、Appleの開発者アカウントを作り、Xcodeのアカウントセッティングから、Apple IDを追加しておく必要があります。（[開発者アカウントをXcodeに追加する](https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppStoreDistributionTutorial/AddingYourAccounttoXcode/AddingYourAccounttoXcode.html)）

##プレビュー
プレビューは下記のいずれかの方法で実行できます。

- ダッシュボードから実行する
- sublimeやAtomのプラグインをインストールして、エディタから実行する
- コマンドラインから実行する

#####◎コマンドラインでプレビューする

・USB接続されたAndroidで実行する場合
`fuse preview -t=Android`

・iOS向けに実行する場合（初回実行時はXcodeが起動されます）
`fuse preview -t=iOS`

・PC上でシミュレーターを立ち上げて実行する場合
`fuse preview -t=Local`

iOS向けに実行すると、/build配下にiOSのフォルダが作られ、previewフォルダの中に自動でXcodeプロジェクトが生成されます。

previewに関するオプションについては

`fuse help preview`

を実行すれば見ることができます。

公式サイトでは`--target=Android`と`-t=Android`で表記が揺れていたりするのですが、同じ意味のようです。

##その他のプレビューオプション
- --endpoint=

プロキシサーバーにendpointを設定することができます。フォーマットは`アドレス:ポート`です。

- -n=, --name=

ビルドが開始された直後に実行される`Fuse.BuildStarted`イベントで取得できる`BuildTag`に指定した値が渡されます。（[参考](https://www.fusetools.com/docs/technical-corner/fuse-protocol#build)）

- -v, --verbose

Verbose outputで書き出します。

- -l, --libs

ライブラリをビルドする。

- --prompt-on-error
ビルドエラーや致命的になクラッシュが発生しても、コンソールが閉じられないようにする。


##書き出し
書き出しをすると、UXマークアップがネイティブC++のコードにコンパイルされます。なので、リアルタイムに更新をキャッチすることはできません。
書き出しに関してはコマンドラインからのみ実行できるようです。また、リリース用のアプリを書き出す場合は先に署名情報を書く必要があります。これについては明日書きたいと思います。

####◎Androidの書き出し
プロジェクトのルートで下記を実行します。

とりあえず書き出したい場合はこちら
`fuse build -t=Android --run`

`-run`をつけると、ビルドが成功した後に、接続されたAndroid端末で実行されます。

ストア提出用のリリースビルドはこちら
`fuse build -t=Android --configuration=Release`

####◎iOSの書き出し
プロジェクトのルートで下記を実行します。

`fuse build -t=iOS --run`

Xcodeでプロジェクトを開きたい場合は下記を実行します。

`fuse build -t=iOS -adebug`


リリースビルドはこちら

`fuse build -t=iOS --configuration=Release`

##書き出しヘルプとオプション

- サンプル

`fuse build -t=android` : アンドロイドアプリの書き出し
`fuse build -t=ios -r` : iOSアプリを書き出して実行する
`fuse build -t=native -d` : ビルドして、Xcodeを開く

※ターゲットに`native`を指定する場合はcmakeがインストールされている必要があります。

- 共通オプション

`-c`,`--configuration=STRING` : ビルド設定(DebugかReleaseを指定)
`-t`,`--target=STRING` : どのOS向けに書き出すか（上記サンプル参照）
'-d',`--debug` : ビルド成功後に、デバッグ用のIDEを起動する
`-r`,`--run` : ビルド後にアプリを立ち上げる
`-z`,`--clean` : ビルドする前にアウトプットするディレクトリを空にする
`-v`,`-vv`,... : verbose outputのレベル

- 追加オプション

`-n`,`--native-args=STRING` : ネイティブビルド用コマンドの引数
`-a`,`--run-args=STRING` : runコマンドの引数
`-m`,`--main=STRING` : アプリのエントリーポイントをoverrideする
`-s`,`--set:NAME=STRING` : ビルドシステムのプロパティをoverrideする
`-o`,`--out-dir=PATH` : アウトプットするディレクトリをoverrideする
`-f`,`--force` : 最新でももう一度ビルドし直す
`-l`,`--libs` : 必要であればライブラリをビルドし直します
`-p`,`--print-internals` : ビルドシステムのプロパティをリストで出力する
`-N`,`--no-native` : ネイティブビルドステップを無効にする
`-P`,`--no-parallel` : マルチスレッドを無効にする
`-S`,`--no-strip` : 使ってないコードを消す機能を無効にする

- コンパイラーオプション

`-D`,`--define=STRING` : 指定した定義を追加して、機能を有効にする
`-U`,`--undefine=STRING` : 指定した定義を消去して、機能を無効にする
`-E`,`--max-errors=NUMBER` : エラーの最大数を指定する(0を指定すると無効に)
`-O<0..3>` : 最適化のレベルを指定する
`-W<0..3>` : werningのレベルを指定する

- C++ オプション

`-DREFLECTION` : 実行時型情報を有効にする
`-DSTACKTRACE` : 例外のスタックトレースを有効にする
`-DDEBUG_UNSAFE` : 安全でないコードの評価を有効にする
`-DDEBUG_ARC<0..4>` : ARCメモリ管理のログのレベルを設定する
`-DDEBUG_DUMPS` : GraphVizファイルをダンプして、メモリ内のサイクルを識別しやすくします
`-DO0` : デバッグ時のC++の最適化を無効にします。

- GLSL オプション

`-DDUMP_SHADERS` : 精査しやすいようにシェーダーダンプしてディレクトリを作る