콘솔 응용 프로그램으로도 작동하는 Xamarin.Mac 응용 프로그램을 만드는 방법
Problem
GUI 어플리케이션으로서 통상의 플로우로 기동할 수 있다.
그러나 터미널 등에서 인수를 주어 시작했을 때는 그대로 표준 출력에 결과를 돌려 종료한다.
그런 것을 macOS 앱으로 하고 싶을 때에 참고해 주세요.
방법론으로서 Xamarin 특유라고 하는 것은 아니지만, 여기서는 Xamarin.Mac 를 사용해 해설합니다.
TL;DR
진입점
Main.cs
에서 분기합니다.Prerequisites
여기에서 만든 샘플은 GitHub:xamarin-mac-console-sample에 공개되어 있습니다.
Solution
프로젝트 만들기
Xamarin.Mac 프로젝트를 적절하게 만듭니다. 자세한 절차는 생략하지만 창이 시작되도록 하십시오.
Main.cs에서 인수 구문 분석
Main.cs
대부분은 다음과 같아야 합니다.Main.cs
using AppKit;
namespace ConsoleSample
{
static class MainClass
{
static void Main(string[] args)
{
NSApplication.Init();
NSApplication.Main(args);
}
}
}
NSApplication.Init
를 호출하면 NSNotificationCenter.DefaultCenter
또는 NSFileManager.DefaultManager
와 같은 NS * 시스템의 정적 인스턴스를 예약하고 사용할 수 있습니다. 즉 불리지 않으면 NS*계의 무엇이든 밖에 사용할 수 있거나 사용할 수 없거나 합니다. 대체로 사용할 수 없습니다.NSApplication.Main
를 호출하면 응용 프로그램 시작 시퀀스로 들어가고 AppDelegate
로 제어가 이동합니다. 그 전에 인수를 퍼스 해 처리를 분기하는 것이 본고의 목적으로 하는 곳입니다. 그렇게 하면 적당히 커맨드 라인 파서를 NuGet 경유로 넣게 되어, 자전으로 퍼스 하게 합시다. 여기에서는 dotnet-corefxlab 리포지토리 에서 제공되고 있는 System.CommandLine
를 사용합니다. 잡담이지만 대략 다음과 같이 될 것입니다.Main.cs
using System;
using System.CommandLine;
using AppKit;
namespace ConsoleSample
{
static class MainClass
{
static void Main(string[] args)
{
var input = string.Empty;
ArgumentSyntax.Parse(args, syntax =>
{
syntax.DefineOption("i|input", ref input, true, "Something interesting.");
syntax.ErrorOnUnexpectedArguments = false;
});
if (string.IsNullOrEmpty(input))
{
NSApplication.Init();
NSApplication.Main(args);
}
else
{
Console.WriteLine($"{input.Length} - {input}");
}
}
}
}
프로젝트 설정에서 인수를 지정하여 디버깅하거나 터미널에서 인수를 주어 시작하는 등의 동작을 확인할 수 있습니다. 터미널에서 시작하려면
app/Contents/MacOS/
에 진입 점이 있습니다.% ./ConsoleSample.app/Contents/MacOS/ConsoleSample -i Hello
5 - Hello
당연히, 아무것도 인수를 주지 않으면 윈도우가 일어나, 통상의 어플리로서 동작합니다.
Conclusion
Main.cs
에서 시작하기 전에 무엇이든 할 수 있다는 것을 알았습니다.네이티브 라이브러리를 로드해 두거나 집약 예외 핸들러를 설치하거나와 나름대로의 어플리케이션을 만들 때에는 이 근처에서 여러가지 개입이 필요하게 된다고 생각합니다. 꼭 기억하십시오.
Reference
이 문제에 관하여(콘솔 응용 프로그램으로도 작동하는 Xamarin.Mac 응용 프로그램을 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ailen0ada/items/8458ab7c1eb6e5bfa3a3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)