Fabric for Unityを入れてみる

# はじめに

[Fabric.ioがUnityをサポートする](https://fabric.io/blog/introducing-fabric-for-unity)とのメールが来ていたので
少し試してみました

※この記事はすでにFabric.ioを利用している前提ですので、サインアップなどについては割愛します

# 環境について
|   | version|
|---|--------|
|OS|OSX 10.11.3|
|Unity|5.3.3f1|
|Crashlytics|v.1.0.0|

UnityプロジェクトのプラットフォームはAndroidを想定

# 導入手順

ネイティブ向けと同様にほとんどドキュメントを見なくても導入できました

## プラグインのインストール
1. Fabric.ioの"Download Plugins"からUnity向けプラグインをDL
2. Fabric.unitypackageをUnityプロジェクトにインポート
3. メニューバーから Fabric > Prepare Fabric を選択する
4. Assets/Editor Default Resources　が作成され、  
`[Fabric] Generated a new install id ~~~~~`とログに表示されたら完了

## アプリの登録
1. インストールが終わったらFabric.ioのEditorウィンドウが立ち上がるのでログインする
2. ログインができたらインストールするKitを選ぶ  
今回はCrashlyticsで進めます
3. Installボタンを押して待機
4. 追加のアセットを勧められるので言われるがままにインポートする
5. AndroidManifest.xmlの編集する旨を伝えるウィンドウが表示されるのでApplyを押す  
6. "起動時のシーンを開いて、このオブジェクトをドラッグ&ドロップしてください" と出るので従う
7. ビルドして端末からアプリを起動させる
8. Fabric.ioのページを確認するとアプリが登録されている

## インポートしたファイルについて
登録が完了したので何をインポートしたのか、ディレクトリごとに詳しく見てみます

### Editor Default Resources
Fabric/Prepare Fabric実行後に作成されます。
FabricSettings.assetにFabric.ioに関する設定を記載するようです。
AndroidManifest.xmlを自動編集した際に、ユーザーの情報を自動で記載してくれます。

### Fabric
Fabric/Prepare Fabric実行後に作成されます
カスタムエディタのスクリプトや、Runtime向けスクリプトなどが入っています

### Plugins
Android/iOS向けプラグインアセットです。Kitのインストール後に作成されます。
ネイティブプラグインは全てここにまとめられるようです

# 実行コード
折角なのでインストールしたCrashlyticsとAnswerを使ってみます
Fabric > Crashlytics > Documentation で何ができるかを確認できます
テストシーンにボタンを配置してボタンが押されたらイベントを通知する
みたいなシンプルなものです

```lang:c#
using UnityEngine;
using System.Collections;

public class FabricCtrl : MonoBehaviour {

	public	void	OnSignUp(){
		Fabric.Answers.Answers.LogSignUp();
	}

	public	void	OnSignIn(){
		Fabric.Answers.Answers.LogLogin();
	}

	public	void	OnContentView(){
		Fabric.Answers.Answers.LogContentView("content A");
	}

	public	void	OnCrash(){
		Fabric.Crashlytics.Crashlytics.Log("onCrash");
		Fabric.Crashlytics.Crashlytics.Crash();
	}
}
```

namespcae Fabric からそれぞれのツールにアクセスできるようです。
Fabric.ioのAnswerやCrashlyticsを見ればそれぞれの通信が行われたことが確認できます

# Beta Distributions
ドキュメントに[fastlane](https://fastlane.tools)でできると書いているので試してみます。

## fastlaneのインストール
fastlaneをGitHubの指示に従ってインストールする(https://github.com/fastlane/fastlane)

インストールのために環境として、
OSX or Lion であること、Ruby2.0.0以上であることが必須とされています

1. ターミナルから以下のコマンドを実行する  
```sudo gem install fastlane --verbose```
```gem cleanup```

2. 終わったら `fastlane -v` でバージョンを確認してみます

## fastlaneの初期化
Fastlaneを使用するためプロジェクト内での設定を行います

1. .apk/.ipaのあるディレクトリに移動する 
Unity環境なのでプロジェクトのディレクトリがそれにあたるかと思います

2. `fastlane init` を実行する
いくつか質問をされますが使用している環境に合わせて入力します
以下、3点ほど注意点
・これを実行する前に.apk/.ipaを作成しておく必要があります
(今いるディレクトリにファイルがないとアプリのある場所を聞かれる)
・また、バージョン管理をしているかどうかも確認されますが、noを選択すると初期化を中断されます
・`Path to the json secret file:` では何も入力せず、そのままEnterを押します
正常に終了していれば `Successfully finished setting up fastlane` と表示される

3. 初期化が終わったら以下のファイルが作成されたことを確認する
(Project Directory)/fastlane/Appfile  : バンドルID or パッケージ名が書かれたファイル
(Project Directory)/fastlane/Fastfile : fastlaneの処理がrubyで書かれている

## Betaにアップロードする
1 . Fastfileを編集する
既存のレーン beta をドキュメントのサンプルのものに書き換えて保存します
ドキュメントに書かれている通り、api_tokenとbuild_secretについては自身のプロジェクトのものに置き換えます

```lang:ruby
 lane :beta do
  crashlytics(
    emails: "sample@sample.com",
    api_token: "FABRIC_API_KEY",
    build_secret: "FABRIC_BUILD_SECRET"
  )
end
```

2 . `fastlane beta`を実行  
FastFileに問題がなければアップロードできているはず、ですがなにやらエラーが出てしまいました  
```[!] The `crashlytics_path` must be a jar file for Android (RuntimeError)```
設定しそびれているパラメータがあるようです
ターミナルから```Fastlane actions crashlytics ```　でパラメータを確認できます
どうやらcrashlytics-developtools.jarが必要なようでした

3 .  crashlytics-developtools.jarをDL
少しググってみるとFabric.ioのAnt向けビルドツールに含まれているようです
Fabricの Download PluginsからBuild Tools > Ant を選んでcrashlytics.zipをDLし、
今回は以下の場所に配置したことにします
`(Project Directory)/crashlytics/crashlytics-devtools.jar`

4 . Fastfileを修正する
不足していたjarファイルを指定します
crashlytics_pathにjarファイルを相対パスで指定しました

```lang:ruby
 lane :beta do
  crashlytics(
    crashlytics_path: "crashlytics/crashlytics-devtools.jar",
    emails: "sample@sample.com",
    api_token: "FABRIC_API_KEY",
    build_secret: "FABRIC_BUILD_SECRET"
  )
end
```

5 . アップロードする
Fastfileを修正したら再度ターミナルから `fastlane beta` を実行します  
` Build successfully uploaded to Crashlytics Beta`  
と表示されたらFabric.ioを確認します
アップロードを確認できるはずです

# 最後に

まだTwitter Kit についてやiOSの設定についてなど触れるところはありますが、
今回はここまでにします

BetaについてはTestFlight難民となった後からお世話になっていますが、今までUnityで開発している環境だと導入が面倒くさいのが難点だったものの、今回ので随分と楽ができそうです

ちなみにiOSについてはこちらのブログが参考になりそうでした
http://engineering.otobank.co.jp/entry/ios-deploy-use-fastlane-crashlytics