Sdílet prostřednictvím


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.