Unity Cloud Build の Win/iOS GUIフロントエンドを作った
あくまで自分用なんですけど作ってみました。
スクリーンショット
iOS Simulator
機能
- ビルド開始
- ビルドターゲット一括作成
- ビルドターゲット一括削除
- Credential情報の取得
なんで作ったか
UnityCloudBuildは便利だけどビルドをパラメトリックに実行できない…。
設定やDefineSymbolが少し違うだけで同じようなビルドターゲットをその組み合わせ分作らないといけない。
これは人力でやることではない。だからプログラムした。
そしてパラメータを指定してビルドを実行できるGUIフロントエンドがほしいと思った。
あとあったら便利そうなのでiOSアプリもつくった。というのは理由の半分でXamarin使ってみたかったのでiOS/WPFなプロジェクトにした。
なにで出来ているか
Xamarinで出来ている。
初めてのXamarinだったのでわけがわからんかった。
UIはXamarinFormsというのをつかった。これはUI(XAML)部分をMultiplatform write onceにできるものらしい。
Xamarin自体はUnityほどMultiplatformにおけるコードの共通化がされておらず、Platform寄りのコードはNativeなAPIをC#でラップした単純な感じのものらしい(使ってないので分からない)
ただ、XamarinFormsは今(2018/1/29)はまだWPFを正式にサポートしてない感じで。NugetのNightlyBuildで公開されているExperimentalなXamarin.WPFを使わせてもらった。
当初は「普通にWPFもいけるっしょ」みたいに思っていたので泡を食ったが、情報があってよかった。
ちなみに、はじめはUnityでツールを作ろうとおもっていたけど。
UnityCloudBuildAPIがUnity上で動いてくれなくてXamarinならいけるやろってことでこうなった。
使わせてもらったもの
guitarrapc/UnityCloudbuildApi
まずUnityCloudBuildAPIをC#からつかうために
https://build-api.cloud.unity3d.com/docs/1.0.0/index.html
この公式APIリファレンスで書かれているSwaggerCodeGeneratorをつかってC#のClientCodeを作ろう!今風にと思ってやってみた。
しかしうまくいかなかった。そもそもCodeGenコマンドが失敗したり、出てきたコードがビルド通らなかったり…。
SwaggerCodeGenはwindowでjarをつかってみたり、macでhomeblewしてみたけどNGだった。
疲れた僕はリンク先の偉大な先人のお方のありがたい御コードを拝借した。すごい、うごくしコンパイルが通る。どうやったんだ…。ありがとうございます。
Xamarin.WPF
こちらの記事を参考にさせていただいた。
Newtonsoft Json.NET for Unity3D
色々実装していってiOS向けにビルドしてみるとAOT絡みのビルドエラーに出くわした。
System.Reflection.EmitをJson.NETが使っているからで、Json.NETはUnityCloudAPIが使っていた。
これをどうにかするためにAOT対策が施されたJson.NETを使わせてもらった。Unity向けだが…。
使おうと思っていたもの
- Prism
- MVVMインフラストラクチャ(ですよね?)で、自分はLivetしか使ったことなかったがXamarinFormsならPrismがええど、という噂を目にしたので使いたかった。でも新しいものだらけでキャパオーバーしたので別の機会に。
所感など
- Xamarinいいなー。Windows上で開発して隣のMacに接続してビルドして、WindowsのVisualStudio上からデバッガつないでってなんかかっこいいわー。ターンアラウンドタイムも全然OKな範囲だし、これはいいわー。
- でもUnityCloudBuildAPIが動かないのさえなければUnityで作ってただろうなー。この程度のUIなら一瞬でつくれるしCloudBuildでビルドと配布までワンストップだし。今回は配布にHockeyapp使ったが利用者側のことも考えると若干手間。
- 多分シンプルなツール程度ならiOSとWPFでUIをシングルコード実装できるんだろうけど。ある程度複雑になるとまぁ無理そうだなと思った。これはもう実装がどうっていうかそもそも使いやすくするためには別レイアウトにせざる得ない気がする。そういうことであんまりXamarinForms.WPFは需要ないんかなーと思ったり。しらんけど。
- トライアンドエラーの繰り返しでプロジェクトがぐちゃぐちゃになったのが原因なのかしらないが、XamarinFormsのXAMLのインテリセンスが変になっていて。変なコード補完が働いてめっちゃ書きにくかった。