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/consoleapp
wartość . 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 programmake run
skompiluje i uruchomi program w bieżącym katalogumake bundle
spowoduje utworzenie samodzielnego pliku wykonywalnego