macOS dotnet MAUI Apple Script実行

Pocket

Visual Studio for Mac Preview 17.3MAUIプロジェクトで Apple Scriptを実行する方法です。

新しいプロジェクトで、 .NET MAUI アプリプロジェクトを 作成後

新規プロジェクト
新規プロジェクト

メイン画面に テキストボックスとボタン追加

作成したプロジェクト内に「MainPage.xaml」があるので下記のように編集する。

テキストボックスと、 ボタンを追加
テキストボックスと、 ボタンを追加

「MainPage.xaml」のコードは下記を追加する。

<HorizontalStackLayout HorizontalOptions="Center">
<Entry
	x:Name="TextField1"                
	Text="" HorizontalOptions="Center" WidthRequest="200"/>
<Button Text="Execute Script" Clicked=""></Button>
</HorizontalStackLayout>

MAUIの場合、 テキストボックスは<Entry />です。

ボタンイベントを作成

「MainPage.xaml」作成したButtonのClicked=””の空部分で、 コントロール+スペースで「New Event Handler」を選ぶ

MAUI Button Event
Button Event

「MainPage.xaml.cs」C#コード側にボタンイベントが作成されました。

各プラットフォームに対応するコードを記述していく

プロジェクト内 Platformsは、 Android, iOS, MacCatalyst, Tizen, Windows フォルダがあり、

それぞれに対応するコードが書ける。

この5つのプラットフォームに ダミークラスを用意する。

TUtils.csを各プラットフォームに作成する
TUtils.csを各プラットフォームに作成する
public class TUtils : IUtils
{
	public string ScriptExecute(string text)
	{
		return "";
	}
}

MacCatalystフォルダ内のTUtils.cs↓だけ中身を書く

using System;
using Foundation;
public class TUtils : IUtils
{
	public string ScriptExecute(string text)
	{
		try
		{
			NSDictionary d1;
			var scrpt = new NSAppleScript(text);
			var exe = scrpt.ExecuteAndReturnError(out d1);
			if (d1 == null)
			{
				string s = exe.StringValue;
				return s;
			}
		}
		catch (Exception _e)
		{
			Console.WriteLine(_e.Message);
		}
		return "";
	}
}

MainPage.xaml近くに共通するIUtilsインターフェイスを作成する。

public interface IUtils
{
	public string ScriptExecute(string text);
}

MainPage.xamlのボタンから作成した関数ScriptExecute()を呼び出す。

先程作成したイベント MainPage.xaml.csのButton_Clicked()の中を、 下記に編集する。

void Button_Clicked(System.Object sender, System.EventArgs e)
{
	var u1 = new TUtils();
	TextField1.Text = u1.ScriptExecute("set value to \"Execute AppleScript.\"");
}

上記コードのScriptExecute()引数の文字列に、 簡単な文字を返すだけのAppleScriptコードを入れました。

macOSで実行するので、 「MacCatalyst フォルダ」にあるTUtilsクラスが呼ばれます。

実行画面

下↓のようにボタンを押すとAppleScriptが実行されました。

アプリ実行
アプリ実行

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED