Introduction

会社でLinux上でGUIアプリケーションを使った簡単なアプリを作る話が出た。
担当は自分では無いが、LinuxのGUIは試してみたいので、実験。
Avalonia とかがあるが、アレは不安定だった…なので、今回は XamarinGTK を使ってみる。

How to?

Windowsで開発して、Linux上でBuild&Runが理想です。
下記Tutorialが教えてくれました。

が、Prismあたりの話を端折っているので、適宜行間は読みます。

今回のソースは下記になります。

1. インストール

まずは、Mono を入手してインストール。
公式ページから Download Mono 64-bit (no GTK#)GTK# for .NET のインストーラを入手。

この時点 (2021/04/20) でバージョンは *6.12.0.1072.12.45
インストールは割愛 (特筆すべき事は何も無い)。

2. Xamarin Prism のプロジェクトを作成

AndroidとかiOSは不要なので、UWPと共有プロジェクトだけ残して削除。

3. .NET Frameworkの空のプロジェクトを追加

新しいプロジェクトから 空のプロジェクト (.NET Framework) を選択。

Visual Studio

肝は .NET 4.7.2以上

Visual Studio

このプロジェクトが GTK を扱います。

4. 出力の種類を変更

追加したプロジェクトのプロパティで、アプリケーションから 出力の種類Windows アプリケーションに変更

5. Xamarinの共有プロジェクトを参照に追加

最初に作った Xamarin Prism に含まれている奴です。

6. 参照ライブラリを追加

GTKのインストール先から下記を選択して追加。

  • atk-sharp.dll
  • gdk-sharp.dll
  • glade-sharp.dll
  • glib-sharp.dll
  • gtk-dotnet.dll
  • gtk-sharp.dll

インストールする GTK# for .NET によるが、基本は C:\Program Files (x86)\GtkSharp\2.12\lib\gtk-sharp-2.0 に入っている。

7. Nugetで下記ライブラリをインストール

  • Prism.Unity.Forms
  • Xamarin.Forms.Platform.GTK

8. Program.cs を追加

下記のコードを追加。
予断ですが、名前空間に Gtk と付けたばかりに、global 等という余計な修飾子を付ける羽目になりました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using Prism;
using Prism.Ioc;
using Xamarin.Forms;
using Xamarin.Forms.Platform.GTK;

namespace Sample.Gtk
{

public class Program
{

[STAThread]
public static void Main(string[] args)
{
global::Gtk.Application.Init();
Forms.Init();

var app = new App(new GtkInitializer());
var window = new FormsWindow();
window.LoadApplication(app);
window.SetApplicationTitle("Your App Name");
window.Show();

global::Gtk.Application.Run();
}
}

public class GtkInitializer : IPlatformInitializer
{
public void RegisterTypes(IContainerRegistry containerRegistry)
{
// Register any platform specific implementations
}
}

}

9. Build & Run

はい!!
無事に動きません!!

Not Found

GTKのライブラリが足りないので、実行ディレクトリにコピーしておきます。
面倒なので C:\Program Files (x86)\GtkSharp\2.12\bin の中身を全部コピー。

はい、まだ動きません!!

Not Found

Nugetで Xamarin.Essentials.Interfaces をインストールします。

よくわからないが、Darkテーマが問題?

そして、ようやく動きました。

Not Found

Source Code

https://github.com/takuya-takeuchi/Demo/tree/master/Xamarin.Gtk1