Konsol uygulamalarında Xamarin. Mac bağlamaları

C# kullanarak bir kullanıcı arabirimine sahip olmayan bir gözetimsiz uygulama oluşturmak Için c# ' de bazı Apple Native API 'Leri kullanmak istediğiniz bazı senaryolar vardır.

Mac uygulamaları için proje şablonları, NSApplication.Init() öğesine yapılan çağrısı tarafından izlenen bir çağrı içerir NSApplication.Main(args) , genellikle şöyle görünür:

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

InitXamarin. Mac çalışma zamanını hazırlık çağrısı olan çağrı, Main(args) uygulamayı klavye ve fare olaylarını alacak ve uygulamanızın ana penceresini gösteren Cocoa uygulaması ana döngüsünü başlatır. Main' A çağrı, Cocoa kaynaklarını bulmayı, TopLevel penceresini hazırlamayı ve programın bir uygulama paketinin parçası olmasını bekler (uzantıya sahip bir dizinde dağıtılan programlar .app ve çok özel bir düzen).

Gözetimsiz uygulamaların bir kullanıcı arabirimine ihtiyacı yoktur ve bir uygulama paketinin parçası olarak çalıştırılması gerekmez.

Konsol uygulaması oluşturma

Bu nedenle, düzenli 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 taşıyın.

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

Boş bir konsol Project oluşturun

yeni bir .net konsolu Project oluşturun, .net core çalışma zamanı altında Xamarin.Mac.dll .net core çalışma zamanı altında çalıştırılmadığından emin olun, ancak Mono çalışma zamanı ile çalışır.

Xamarin. Mac kitaplığına başvurma

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

Bunu yapmak için, proje başvuruları ' na gidin, .NET bütünleştirilmiş kodu sekmesini seçin ve dosya sistemindeki dosyayı bulmak için Git düğmesine tıklayın . Yukarıdaki yola gidin ve sonra bu dizinden Xamarin.Mac.dll seçin.

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

Yönetilmeyen destek kitaplığını projenize taşıyın

Uygulamanızın çalışması için önce Xamarin.Mac destek kitaplığını projenize taşımanız gerekir. Bunu yapmak için projenize yeni bir dosya ekleyin (proje seçenekleri ' ne tıklayın, Ekle' yi seçin ve var olan dosyayı ekleyin) ve bu dizine gidin:

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

Burada, libxammac. dylibdosyasını seçin. Kopyalama, bağlama veya taşıma seçenekleri sunulur. Bağlama beğendim, ancak aynı zamanda, çalışma de kopyalanıyor. Ardından, dosyayı seçmeniz gerekir ve özellik panelinde (özellik paneli görünür değilse, oluştur bölmesini görüntüle > ' yi seçin), > bölümüne gidin ve Çıkış Dizinine Kopyala ayarını daha yeniyse kopyalaolarak 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, aynı dizindeki tüm bu dosyalara ihtiyacınız olacak.

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, mkbundle aracı kullanarak çeşitli dosyaları kendi içinde bulunan bir yürütülebilir dosyaya getirebilirsiniz.

İ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, -o Bu seçenek oluşturulan çıktıyı belirtmek için kullanılır, bu durumda geçirilir /tmp/consoleapp . Bu artık, tek başına dağıtabileceğiniz ve mono veya Xamarin. Mac üzerinde dış bağımlılıkları olmayan tek başına bir uygulamadır. Bu, tamamen kendi içinde kapsanan bir yürütülebilir dosyadır.

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

Project-daha az derlemeler

Kendi kendine içerilen bir Xamarin. Mac uygulaması oluşturmak için tam bir proje gerekmez, ayrıca işi yapmak için basit UNIX derleme görevleri dosyalarını kullanabilirsiniz. Aşağıdaki örnek, basit bir komut satırı uygulaması için derleme görevleri dosyasını nasıl ayarlayakullanabileceğinizi göstermektedir:

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 verilmiştir:

  • make programı oluşturacak
  • make run geçerli dizinde programı derleyip çalıştıracak
  • make bundle kendi içinde bir çalıştırılabilir dosya oluşturur