Inno Setupを利用しGithub ActionsでUnityアプリをインストーラーを作成する手順
はじめに
この度、MidraLabコミュニティからOSS uDesktopMascot をリリースしました。
デスクトップ上でVRMなどの3Dモデルを表示するアプリケーションになります!
今回は、このアプリケーションのインストーラーを様々な方法で作成する方法を紹介します。
背景
インストーラーにするメリット
個人的には、アンインストールする際に関連するファイルを一度に削除できることや、更新時に複数の同じアプリが共存することなく更新できる点が良いと思っています。
ローカル環境でインストーラにする
以下の記事を参考にしました。
Inno Setup のインストール
下記のURLからインストーラーセットアップソフトをダウンロードします。
Inno Setup のセットアップ
Create a new script file using the Script Wizardを選択して、OKを押します。

Nextを押します。

application名、バージョン、パブリッシャー名、アプリケーションWebSiteを入力し、Nextを押します。

Application folder nameには、団体/アプリケーション名を入力するのがよさそうです。

以下のようにインストールした先に団体/アプリケーション名が入ります。
同じ団体で複数のアプリケーションを出した場合に一緒にまとめられてフォルダが整理できるのでよさそうです。

Nextを押します。
実行ファイルのパスを指定と実行するのに必要なファイルやフォルダを指定します。

この二つを指定します。


Nextを押します。
とりあえず変更なしでNextを押します。

インストーラーの実行時にショートカットを作成するかどうかだったりその設定をします。
Defaultの設定のままNextを押します。

ライセンスファイルやアプリに関する設定ファイルのパスを指定したりします。

続いて、管理者権限でインストールするかどうかを選択します。

アプリのセーブデータを保存するときに使ったりするレジストリの設定もできます。

アプリのサポートする言語を選択します。

インストーラーをどのフォルダに出力するかとそのインストーラーの名前を指定します。

出力されるissファイルのコードを読みやすいものにするかどうかを選択します。

これで設定完了です!

インストーラーの実行
ここではいか▶ボタンを押すと、インストーラーができます。

Github Actionsでインストーラにする
以下のレポジトリを参考にしました。
Workflowを見てみる
Game CIというサービスがあり、そこでUnityのビルドを行っています。
ビルドの成果物がbuildというフォルダに入るようになっています。
その後、Inno Setup Actionを使って、プロジェクトのRootにあるsetup.issを実行してArtifactsにインストーラーを出力しています。
issファイルの設定
ビルドの成果物があるbuildフォルダとその中にある実行ファイルのパスを指定しています。
インストーラーをArtifactsにアップロードするためパスを合わせます。
これで実行すると、ArtifactsにインストーラーができArtifactsにアップロードされます。
おまけ
ビルドしたアプリのバージョンをインストーラーに反映する
Unity側でビルド後にPostBuildProcessor.csを実行して、ビルドしたアプリのバージョンを指定の形でテキストファイルに書き込むようにします。
// ビルドしたアプリのバージョン
var appVersion = PlayerSettings.bundleVersion;
// バージョンを書き込むファイルのパスをissファイルと同じ階層にします。
var configFilePath = Path.Combine(Path.GetDirectoryName(examplePath), "..", "..", "setup.txt");
// インストーラーの設定ファイルにバージョンを書き込む
var configText = $"#define MyAppVersion \"{appVersion}\"";
File.WriteAllText(configFilePath, configText);
ビルド後に以下のようなテキストフォルダができます。
#define MyAppVersion "1.0.0"
以上のテキストファイルをissファイルで読み込むようにします。
[Setup]
; バージョン設定を読み込む
#include "setup.txt"
; バージョン設定からバージョンを取得する
#define AppVersion GetFileVersion("Input\" + AppExec)
AppName={#AppName}
AppVersion={#AppVersion}
; このようにすることでインストーラーのファイル名にバージョンを含めることができます。
OutputBaseFilename=uDesktopMascot_win64_installer_{#AppVersion}
つまづいたところ
issファイルはアンダースコア(_)のファイル名のテキストファイルは読み込めないというのに数時間費やしました。
inno_setup_setup.txt <-- これは読み込めない
innoSetupSetup.txt <-- これは読み込める
midra-lab.notion.site/MidraLab-dd08b86fba4e4041a14e09a1d36f36ae 個人が興味を持ったこと × チームで面白いものや興味を持ったものを試していくコミュニティ
Discussion