UnityのビルドをJenkins氏に任せて楽したい。
Unityはじめました。
会社でUnityを触りはじめました。
マルチプラットフォーム開発で夢が広がりますね。
ただUnityさん、ビルドが超面倒臭い。
Android向け、iOS向けにそれぞれビルドはもちろん、
確認のために実機一台一台にインストール・・・。
日が暮れます。家に帰るとリス寝ちゃってます。
それは困る。
ビルドから端末へのインストールまで自動化してみたので
そのメモを書いておきます。
みんな大好きJenkins氏
Jenkinsさん全部やってくれないかなー。
とぐーぐる先生に聞いてみた結果、
Unity3D - Jenkinsさんでビルドしてスマホでの確認を楽ちんに - Qiita [キータ]
【研究課題レポート抜粋】Jenkins+Unityで構築するスマフォアプリビルドサーバー|サイバーエージェント 公式エンジニアブログ
なんかできそう。
とりあえずmacにJenkins環境を立ち上げました。
よさげなjenkins pluginがある
上記記事ではUnityをバッチモードで起動して
xcodeプロジェクトと.apkファイルを出力するところがシェルスクリプトになっていますが、下記プラグイン使えばちょっと楽できるっぽい。
Unity3dBuilder Plugin - Jenkins - Jenkins Wiki
早速ビルド手順を追加でUnity3dプラグインを選び、このように設定。
ここで呼ばれるMyBuilderは、上記記事でのBatchBuild.csに該当します。
中身はこんな感じになってます。
[UnityEditor.MenuItem("Tools/Build Project AllScene Android")] public static void BuildProjectAllSceneAndroid() { EditorUserBuildSettings.SwitchActiveBuildTarget( BuildTarget.Android ); string[] allScene = new string[EditorBuildSettings.scenes.Length]; int i = 0; foreach( EditorBuildSettingsScene scene in EditorBuildSettings.scenes ){ allScene[i] = scene.path; i++; } PlayerSettings.bundleIdentifier = "jp.co.hoge.hoge"; PlayerSettings.statusBarHidden = true; BuildPipeline.BuildPlayer( allScene, "hoge.apk", BuildTarget.Android, BuildOptions.None ); }
[UnityEditor.MenuItem("Tools/Build Project AllScene iOS")] public static void BuildProjectAllSceneiOS() { EditorUserBuildSettings.SwitchActiveBuildTarget( BuildTarget.iPhone ); string[] allScene = new string[EditorBuildSettings.scenes.Length]; int i = 0; foreach( EditorBuildSettingsScene scene in EditorBuildSettings.scenes ){ allScene[i] = scene.path; i++; } BuildOptions opt = BuildOptions.SymlinkLibraries | BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.Development; //BUILD for Device PlayerSettings.iOS.sdkVersion = iOSSdkVersion.DeviceSDK; PlayerSettings.bundleIdentifier = "jp.co.hoge.hoge"; PlayerSettings.statusBarHidden = true; string errorMsg_Device = BuildPipeline.BuildPlayer( allScene, "hoge4iOSDevice", BuildTarget.iPhone, opt ); if (string.IsNullOrEmpty(errorMsg_Device)){ } else { //エラー処理適当に } //BUILD for Simulator PlayerSettings.iOS.sdkVersion = iOSSdkVersion.SimulatorSDK; //あとはDeviceビルドと同様に。
でビルド。
とりあえずapkとxcodeプロジェクトは出力された。
あとは【研究課題レポート抜粋】Jenkins+Unityで構築するスマフォアプリビルドサーバー|サイバーエージェント 公式エンジニアブログの
#---------------------------------------------------------------------- # コマンドラインでのipaと.dSYMファイルの作成 #----------------------------------------------------------------------
以降のシェルスクリプトを自分の環境に合わせ、ビルド手順に追加しませう。
apkとipaとdSYMファイルを手に入れた!
apkファイル
Androidはapkファイルを端末に入れさえすればインストールできるため、端末から見れる適当な場所へアップします。
社内からのみ見れる場所とか、Googleドライブとか。
jenkinsのビルド後の処理でURLはっつけたメールを送るようにすればきっと勝手にインストールしてもらえます。
ipa, dSYMファイル
iOSはどうやるの・・・
→TestFlightを使います。
実はjenkinsのpluginにTestFlightのものがあります。
ただ、私の環境ではうまく動かなかったため、TestFlightのUploadAPIを呼んでいます。
Jenkinsのビルド手順にシェルスクリプトの実行を追加して、
curl http://testflightapp.com/api/builds.json -F file=@testflightapp.ipa -F dsym=@testflightapp.app.dSYM.zip -F api_token='your_api_token' -F team_token='your_team_token' -F notes='リリースノート' -F notify=True -F distribution_lists='test' #通知を送るdistribution_list
を書いておけばOK。
TestFlight送る時のリリースノートにSVNのコミットログとか取得して入れておけば良いのじゃないかなー。
あとはTestFlightにテストしてもらいたい人を招待して
その人のiOS端末のUDIDを貰って開発機登録して
プロビジョニングファイル作る。
それをipa作成の際に使うようにしてください。