Udostępnij za pośrednictwem


Powiązania platformy Xamarin.Mac w aplikacjach konsoli

Istnieją pewne scenariusze, w których chcesz użyć niektórych natywnych interfejsów API firmy Apple w języku C# do utworzenia aplikacji bezgłowej — takiej, która nie ma interfejsu użytkownika — przy użyciu języka C#.

Szablony projektów dla aplikacji dla komputerów Mac zawierają wywołanie, po NSApplication.Init() którym następuje wywołanie NSApplication.Main(args)metody , zwykle wygląda następująco:

static class MainClass {
    static void Main (string [] args)
    {
        NSApplication.Init ();
        NSApplication.Main (args);
    }
}

Wywołanie w celu Init przygotowania środowiska uruchomieniowego platformy Xamarin.Mac, wywołanie Main(args) uruchamia pętlę główną aplikacji Cocoa, która przygotowuje aplikację do odbierania zdarzeń klawiatury i myszy oraz wyświetlania głównego okna aplikacji. Wywołanie Main polecenia spowoduje również próbę zlokalizowania zasobów Cocoa, przygotowanie okna toplevel i oczekuje, że program będzie częścią pakietu aplikacji (programy dystrybuowane w katalogu z .app rozszerzeniem i bardzo konkretnym układem).

Aplikacje bezgłowe nie wymagają interfejsu użytkownika i nie muszą być uruchamiane w ramach pakietu aplikacji.

Tworzenie aplikacji konsolowej

Dlatego lepiej zacząć od zwykłego typu projektu konsoli .NET.

Należy wykonać kilka czynności:

  • Utwórz pusty projekt.
  • Odwołanie do biblioteki Xamarin.Mac.dll.
  • Przełącz niezarządzaną zależność do projektu.

Te kroki zostały wyjaśnione bardziej szczegółowo poniżej:

Tworzenie pustego projektu konsoli

Utwórz nowy projekt konsoli platformy .NET, upewnij się, że jest on platformą .NET, a nie .NET Core, ponieważ Xamarin.Mac.dll nie działa w środowisku uruchomieniowym platformy .NET Core, jest uruchamiany tylko w środowisku uruchomieniowym Mono.

Odwołanie do biblioteki platformy Xamarin.Mac

Aby skompilować kod, należy odwołać się Xamarin.Mac.dll do zestawu z tego katalogu: /Library/Frameworks/Xamarin.Mac.framework/Versions/Current/lib/64bits/full

W tym celu przejdź do odwołań do projektu, wybierz kartę Zestaw .NET, a następnie kliknij przycisk Przeglądaj , aby zlokalizować plik w systemie plików. Przejdź do powyższej ścieżki, a następnie wybierz Xamarin.Mac.dll z tego katalogu.

Zapewni to dostęp do interfejsów API cocoa w czasie kompilacji. Na tym etapie możesz dodać using AppKit element na początku pliku i wywołać metodę NSApplication.Init() . Przed uruchomieniem aplikacji jest tylko jeden krok.

Przenoszenie niezarządzanej biblioteki pomocy technicznej do projektu

Przed uruchomieniem aplikacji należy przenieść bibliotekę Xamarin.Mac pomocy technicznej do projektu. W tym celu dodaj nowy plik do projektu (w opcjach projektu wybierz pozycję Dodaj, a następnie dodaj istniejący plik) i przejdź do tego katalogu:

/Library/Frameworks/Xamarin.Mac.framework/Versions/Current/SDKs/Xamarin.macOS.sdk/lib

W tym miejscu wybierz plik libxammac.dylib. Zostanie wyświetlona opcja kopiowania, łączenia lub przenoszenia. Osobiście lubię łączenie, ale kopiowanie działa również. Następnie musisz wybrać plik, a następnie w okienku właściwości (wybierz pozycję Wyświetl>okienka>właściwości, jeśli okienko właściwości nie jest widoczne), przejdź do sekcji Kompilacja i ustaw ustawienie Kopiuj do katalogu wyjściowego na Kopiuj, jeśli nowsze.

Teraz możesz uruchomić aplikację Xamarin.Mac.

Wynik w katalogu bin będzie wyglądać następująco:

Xamarin.Mac.dll
Xamarin.Mac.pdb
consoleapp.exe
consoleapp.pdb
libxammac.dylib

Aby uruchomić tę aplikację, potrzebne będą wszystkie te pliki w tym samym katalogu.

Tworzenie autonomicznej aplikacji do dystrybucji

Możesz chcieć rozpowszechnić jeden plik wykonywalny dla użytkowników. W tym celu możesz użyć mkbundle narzędzia , aby przekształcić różne pliki w samodzielny plik wykonywalny.

Najpierw upewnij się, że aplikacja kompiluje i uruchamia. Gdy wyniki będą zadowalające, możesz uruchomić następujące polecenie z poziomu wiersza polecenia:

$ mkbundle --simple -o /tmp/consoleapp consoleapp.exe --library libxammac.dylib --config /Library/Frameworks/Mono.framework/Versions/Current/etc/mono/config --machine-config /Library/Frameworks/Mono.framework/Versions/Current/etc/mono/4.5/machine.config
[Output from the bundling tool]
$ _

W powyższym wywołaniu wiersza polecenia opcja -o służy do określania wygenerowanych danych wyjściowych, w tym przypadku przekazano /tmp/consoleappwartość . Jest to teraz autonomiczna aplikacja, którą można dystrybuować i nie ma zewnętrznych zależności od platformy Mono lub Xamarin.Mac, jest to w pełni samodzielny plik wykonywalny.

Wiersz polecenia ręcznie określił plik machine.config do użycia oraz plik konfiguracji mapowania bibliotek dla całego systemu. Nie są one niezbędne dla wszystkich aplikacji, ale wygodne jest ich łączenie, ponieważ są one używane w przypadku korzystania z większej liczby możliwości platformy .NET

Kompilacje bez projektu

Nie potrzebujesz pełnego projektu, aby utworzyć samodzielną aplikację platformy Xamarin.Mac. Możesz również użyć prostych plików makefile systemu Unix, aby wykonać zadanie. W poniższym przykładzie pokazano, jak skonfigurować plik make dla prostej aplikacji wiersza polecenia:

XAMMAC_PATH=/Library/Frameworks/Xamarin.Mac.framework/Versions/Current/lib/x86_64/full/
DYLD=/Library/Frameworks/Xamarin.Mac.framework/Versions/Current/lib
MONODIR=/Library/Frameworks/Mono.framework/Versions/Current/etc/mono

all: consoleapp.exe

consoelapp.exe: consoleapp.cs Makefile
    mcs -g -r:$(XAMMAC_PATH)/Xamarin.Mac.dll consoleapp.cs
    
run: consoleapp.exe
    MONO_PATH=$(XAMMAC_PATH) DYLD_LIBRARY_PATH=$(DYLD) mono --debug consoleapp.exe $(COMMAND)

bundle: consoleapp.exe
    mkbundle --simple consoleapp.exe -o ncsharp -L $(XAMMAC_PATH) --library $(DYLD)/libxammac.dylib --config $(MONODIR)/config --machine-config $(MONODIR)/4.5/machine.config

Powyższe Makefile elementy udostępniają trzy cele:

  • make skompiluje program
  • make run skompiluje i uruchomi program w bieżącym katalogu
  • make bundle spowoduje utworzenie samodzielnego pliku wykonywalnego