Konsol uygulamalarında Xamarin.Mac bağlamaları

C# kullanarak kullanıcı arabirimi olmayan bir uygulama oluşturmak için C# dilinde bazı Apple yerel API'lerini kullanmak istediğiniz bazı senaryolar vardır.

Mac uygulamaları için proje şablonları, çağrısının NSApplication.Init() ardından çağrısının eklenmesini NSApplication.Main(args)içerir ve genellikle şöyle görünür:

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

Xamarin.Mac çalışma zamanını hazırlama çağrısı Init , Cocoa uygulaması ana döngüsünü başlatır. Bu çağrı Main(args) , uygulamayı klavye ve fare olaylarını almaya hazırlar ve uygulamanızın ana penceresini gösterir. çağrısı Main ayrıca Cocoa kaynaklarını bulmaya, bir üst düzey pencere hazırlamaya çalışır ve programın bir uygulama paketinin parçası olmasını bekler (uzantı ve çok özel bir düzen içeren .app bir dizinde dağıtılan programlar).

Başsız uygulamaların kullanıcı arabirimine ihtiyacı yoktur ve uygulama paketinin bir parçası olarak çalıştırılması gerekmez.

Konsol uygulamasını oluşturma

Bu nedenle normal bir .NET Konsol proje türüyle başlamak daha iyidir.

Birkaç şey yapmanız gerekir:

  • Boş bir proje oluşturun.
  • Xamarin.Mac.dll kitaplığına başvurun.
  • Yönetilmeyen bağımlılığı projenize getirin.

Bu adımlar aşağıda daha ayrıntılı olarak açıklanmıştır:

Boş konsol projesi oluşturma

Yeni bir .NET Konsol Projesi oluşturun, .NET Core değil.NET Core olduğundan emin olun, Xamarin.Mac.dll .NET Core çalışma zamanı altında çalışmaz, yalnızca Mono çalışma zamanıyla çalışır.

Xamarin.Mac kitaplığına başvurma

Kodunuzu derlemek için bu dizinden derlemeye Xamarin.Mac.dll başvurmak istersiniz: /Library/Frameworks/Xamarin.Mac.framework/Versions/Current/lib/64bits/full

Bunu yapmak için proje başvurularına gidin, .NET Derleme sekmesini seçin ve gözat düğmesine tıklayarak dosyayı dosya sisteminde bulun. Yukarıdaki yola gidin ve ardından bu dizinden Xamarin.Mac.dll seçin.

Bu, derleme zamanında Cocoa API'lerine erişmenizi sağlayacaktır. Bu noktada, dosyanızın en üstüne ekleyebilir using AppKit ve yöntemini çağırabilirsiniz NSApplication.Init() . Uygulamanızı çalıştırmadan önce yalnızca bir adım daha vardır.

Yönetilmeyen destek kitaplığını projenize getirin

Uygulamanız çalışmadan önce destek kitaplığını Xamarin.Mac projenize getirmeniz gerekir. Bunu yapmak için projenize yeni bir dosya ekleyin (proje seçeneklerinde Ekle'yi seçin ve ardından Varolan Dosyayı Ekle'yi seçin) ve şu dizine gidin:

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

Burada libxammac.dylib dosyasını seçin. Kopyalama, bağlama veya taşıma seçenekleri sunulur. Kişisel olarak bağlamayı severim, ama kopyalama da işe yarar. Ardından dosyayı seçmeniz gerekir ve özellik panelinde (özellik bölmesi görünmüyorsa Görünüm>Bölmesi>Özellikleri'ni seçin), Derleme bölümüne gidin ve Daha yeniyse Çıkış Dizinine Kopyala ayarını Kopyala olarak ayarlayın.

Artık Xamarin.Mac uygulamanızı çalıştırabilirsiniz.

Bin dizininizdeki sonuç şöyle görünür:

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

Bu uygulamayı çalıştırmak için tüm bu dosyaların aynı dizinde olması gerekir.

Dağıtım için tek başına uygulama oluşturma

Kullanıcılarınıza tek bir yürütülebilir dosya dağıtmak isteyebilirsiniz. Bunu yapmak için aracı kullanarak mkbundle çeşitli dosyaları bağımsız yürütülebilir dosyaya dönüştürebilirsiniz.

İlk olarak, uygulamanızın derlendiğinden ve çalıştığından emin olun. Sonuçlardan memnun olduktan sonra komut satırından aşağıdaki komutu çalıştırabilirsiniz:

$ 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]
$ _

Yukarıdaki komut satırı çağrısında, bu seçenek -o oluşturulan çıkışı belirtmek için kullanılır; bu örnekte, geçtik /tmp/consoleapp. Bu artık dağıtabileceğiniz tek başına bir uygulamadır ve Mono veya Xamarin.Mac üzerinde dış bağımlılıkları yoktur, tamamen kendi içinde bulunan bir yürütülebilir dosyadır.

Komut satırı, kullanılacak machine.config dosyasını ve sistem genelinde kitaplık eşleme yapılandırma dosyasını el ile belirtti. Tüm uygulamalar için gerekli değildir, ancak .NET'in daha fazla özelliğini kullandığınızda kullanıldıkları için bunları paketlemek uygundur

Projesiz derlemeler

Bağımsız bir Xamarin.Mac uygulaması oluşturmak için tam bir projeye ihtiyacınız yoktur, işi yapmak için basit Unix derleme dosyalarını da kullanabilirsiniz. Aşağıdaki örnek, basit bir komut satırı uygulaması için derleme dosyasını nasıl ayarlayabileceğinizi gösterir:

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

Yukarıdaki Makefile üç hedef sağlar:

  • make programı oluşturur
  • make run programı geçerli dizinde derleyip çalıştırır
  • make bundle bağımsız bir yürütülebilir dosya oluşturur