Vazby Xamarin.Mac v konzolových aplikacích
Existují některé scénáře, kdy chcete použít některá nativní rozhraní API Apple v jazyce C# k vytvoření bezobsedné aplikace , která nemá uživatelské rozhraní – pomocí jazyka C#.
Šablony projektů pro aplikace pro Mac zahrnují volání NSApplication.Init()
následované voláním NSApplication.Main(args)
, obvykle to vypadá takto:
static class MainClass {
static void Main (string [] args)
{
NSApplication.Init ();
NSApplication.Main (args);
}
}
Volání pro Init
přípravu modulu runtime Xamarin.Mac spustí Main(args)
hlavní smyčku aplikace Cocoa, která připraví aplikaci na příjem událostí klávesnice a myši a zobrazí hlavní okno aplikace. Main
Volání se také pokusí vyhledat prostředky Cocoa, připravit okno nejvyšší úrovně a očekává, že program bude součástí sady aplikací (programy distribuované v adresáři s rozšířením .app
a velmi konkrétním rozložením).
Bezobsedné aplikace nepotřebují uživatelské rozhraní a nemusí se spouštět jako součást sady aplikací.
Vytvoření konzolové aplikace
Proto je lepší začít s běžným typem projektu konzoly .NET.
Potřebujete udělat několik věcí:
- Vytvořte prázdný projekt.
- Odkaz na knihovnu Xamarin.Mac.dll
- Přenesení nespravované závislosti do projektu
Tyto kroky jsou vysvětleny podrobněji níže:
Vytvoření prázdného projektu konzoly
Vytvořte nový projekt konzoly .NET, ujistěte se, že se jedná o .NET, nikoli .NET Core, protože Xamarin.Mac.dll neběží pod modulem runtime .NET Core, spouští se pouze s modulem runtime Mono.
Odkaz na knihovnu Xamarin.Mac
Ke kompilaci kódu budete chtít odkazovat na Xamarin.Mac.dll
sestavení z tohoto adresáře: /Library/Frameworks/Xamarin.Mac.framework/Versions/Current/lib/64bits/full
Uděláte to tak, že přejdete na odkazy na projekt, vyberete kartu Sestavení .NET a kliknutím na tlačítko Procházet vyhledejte soubor v systému souborů. Přejděte na výše uvedenou cestu a vyberte Xamarin.Mac.dll z daného adresáře.
Tím získáte přístup k rozhraním Cocoa API v době kompilace. V tomto okamžiku můžete přidat using AppKit
do horní části souboru a volat metodu NSApplication.Init()
. Před spuštěním aplikace existuje ještě jeden krok.
Přenesení nespravované knihovny podpory do projektu
Před spuštěním aplikace je potřeba do projektu přenést knihovnu Xamarin.Mac
podpory. Uděláte to tak, že do projektu přidáte nový soubor (v možnostech projektu, vyberete Přidat a pak Přidáte existující soubor) a přejdete do tohoto adresáře:
/Library/Frameworks/Xamarin.Mac.framework/Versions/Current/SDKs/Xamarin.macOS.sdk/lib
Tady vyberte soubor libxammac.dylib. Budete vám nabídnuti možnost kopírování, propojení nebo přesouvání. Osobně se mi líbí propojení, ale kopírování funguje také. Pak musíte vybrat soubor a v oblasti vlastností (>>pokud panel vlastností není viditelný), přejděte do části Sestavení a nastavte nastavení Kopírovat do výstupního adresáře na kopírovat, pokud je novější.
Teď můžete spustit aplikaci Xamarin.Mac.
Výsledek v adresáři bin bude vypadat takto:
Xamarin.Mac.dll
Xamarin.Mac.pdb
consoleapp.exe
consoleapp.pdb
libxammac.dylib
Ke spuštění této aplikace budete potřebovat všechny tyto soubory ve stejném adresáři.
Vytvoření samostatné aplikace pro distribuci
Můžete chtít distribuovat jeden spustitelný soubor uživatelům. K tomu můžete pomocí mkbundle
tohoto nástroje převést různé soubory na samostatný spustitelný soubor.
Nejprve se ujistěte, že se vaše aplikace zkompiluje a spustí. Jakmile budete s výsledky spokojeni, můžete z příkazového řádku spustit následující příkaz:
$ 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]
$ _
Ve výše uvedeném vyvolání příkazového řádku se možnost -o
používá k určení vygenerovaného výstupu, v tomto případě jsme předali /tmp/consoleapp
. Jedná se o samostatnou aplikaci, kterou můžete distribuovat a nemá žádné externí závislosti na Mono nebo Xamarin.Mac, jedná se o plně samostatný spustitelný soubor.
Příkazový řádek ručně zadal soubor machine.config , který se má použít, a konfigurační soubor mapování knihovny pro celý systém. Nejsou nezbytné pro všechny aplikace, ale je vhodné je seskupit, protože se používají při použití více funkcí rozhraní .NET.
Sestavení bez projektu
K vytvoření samostatné aplikace Xamarin.Mac nepotřebujete úplný projekt. K dokončení úlohy můžete také použít jednoduché makefile unixu. Následující příklad ukazuje, jak můžete nastavit soubor pravidel pro jednoduchou aplikaci příkazového řádku:
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
Výše uvedené Makefile
možnosti poskytují tři cíle:
make
vytvoří program.make run
sestaví a spustí program v aktuálním adresáři.make bundle
vytvoří samostatný spustitelný soubor.