Kompilieren für verschiedene Geräte in Xamarin.iOS

Die Buildeigenschaften Ihrer ausführbaren Datei können auf der Seite mit den iOS-Buildeigenschaften des Projekts konfiguriert werden. Klicken Sie dazu mit der rechten Maustaste auf den Projektnamen, und navigieren Sie zu Optionen > iOS-Build in Visual Studio für Mac und Eigenschaften in Visual Studio:

Zusätzlich zu den Konfigurationsoptionen, die auf der Benutzeroberfläche verfügbar sind, können Sie auch Ihren eigenen Satz von Befehlszeilenoptionen an das Xamarin.iOS-Build-Tool (mtouch) übergeben.

SDK-Optionen

Mit Visual Studio für Mac können Sie zwei wichtige Eigenschaften des SDK konfigurieren: die iOS SDK-Version, die für die Erstellung Ihrer Software verwendet wird, und das Bereitstellungsziel (bzw. die mindestens erforderliche iOS-Version).

Die iOS-Option SDK-Version ermöglicht Ihnen, verschiedene Versionen eines von Apple veröffentlichten SDK zu verwenden, wodurch Xamarin.iOS an die Compiler, Linker und Bibliotheken weitergeleitet wird, auf die es während Ihres Builds verweisen soll. Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie Optionen und dann im Fenster „Optionen“ iOS-Build aus:

Auswählen der SDK-Version im Optionsfenster

Die Einstellung Bereitstellungsziel wird verwendet, um die mindestens erforderliche Version des Betriebssystems auszuwählen, unter der Ihre Anwendung ausgeführt wird. Diese wird in der Datei Info.plist Ihres Projekts festgelegt. Sie sollten die Mindestversion auswählen, die alle APIs enthält, die Sie für die Ausführung Ihrer Anwendung benötigen.

Festlegen des Bereitstellungsziels in der Datei Info.plist

Im Allgemeinen stellt die Xamarin.iOS-API alle Methoden zur Verfügung, die in der neuesten Version des SDK verfügbar sind. Bei Bedarf stellen wir praktische Eigenschaften zur Verfügung, mit denen Sie erkennen können, ob die Funktionalität zur Laufzeit verfügbar ist (z. B. funktionieren UIDevice.UserInterfaceIdiom und UIDevice.IsMultitaskingSupported immer in Xamarin.iOS. Wir erledigen alle Aufgaben im Hintergrund).

Verknüpfen

Sehen Sie sich unsere gesonderte Seite zum Linker an, um mehr darüber zu erfahren, wie der Linker Ihnen hilft, die Größe Ihrer ausführbaren Dateien zu reduzieren, und um herauszufinden, wie Sie diese effektiv nutzen können.

Codegenerierungsengine

Ab Xamarin.iOS 4.0 gibt es zwei Codegenerierungs-Back-Ends für Xamarin.iOS. Die reguläre Mono-Codegenerierungsengine und eine auf dem LLVM-Optimierungscompiler basierende Engine. Jede Engine hat Vor- und Nachteile.

Normalerweise verwenden Sie während des Entwicklungsprozesses wohl eher die Mono-Codegenerierungsengine, da sie es Ihnen ermöglicht, schnell zu iterieren. Für Releasebuilds und die AppStore-Bereitstellung sollten Sie auf die LLVM-Codegenerierungsengine umsteigen.

Die LLVM-Optimierungs-Back-End-Engine generiert sowohl schnelleren als auch strafferen Code als die Mono-Engine, jedoch auf Kosten langer Kompilierungszeiten.

Sie können diese in Visual Studio für Mac oder Visual Studio über „iOS-Buildoptionen“ aktivieren.

Aktivieren von LLVM in Visual Studio für Mac

Aktivieren von LLVM in Visual Studio

Architekturunterstützung

ARMv6 (Xamarin.iOS unterstützt ARMv6 ab v8.10 nicht mehr)

  • iPhone (Original), 3G
  • iPod 1., 2. Generation

ARMv7

  • iPhone 3GS, 4, 4S
  • iPad 1, 2, 3, Mini
  • iPod 3., 4., 5. Generation

ARMv7s

  • iPhone 5
  • iPhone 5c
  • iPad 4

Wenn Sie nur auf den ARMv7s-Prozessor abzielen, wird der generierte Code etwas schneller sein. Er wird nicht mehr auf ARMv7- oder ARMv6-Systemen ausgeführt werden, es sei denn, Sie kompilieren eine FAT-Binärdatei, die mehrere ausführbare Dateien in Ihrem Paket enthält.

ARM64 (Xamarin.iOS unterstützt ARM64 seit v8.6)

  • iPhone 5s
  • iPhone SE
  • iPhone 6, 6 Plus
  • iPhone 6s, 6s Plus
  • iPhone 7, 7 Plus
  • iPhone 8, 8 Plus
  • iPhone X
  • iPad Air
  • iPad Air 2
  • iPad Mini 2, 3, 4
  • iPad Pro (alle)

Beachten Sie, dass alle Builds, die an den App Store übermittelt werden, 64-Bit-Unterstützung aufweisen müssen. Dies ist eine von Apple gestellte Anforderung. Darüber hinaus unterstützt iOS 11 nur 64-Bit-Anwendungen.

ARM Thumb-2-Unterstützung

Thumb ist ein kompakterer Befehlssatz, der von ARM-Prozessoren verwendet wird. Indem Sie die Thumb-Unterstützung aktivieren, können Sie die Größe Ihrer ausführbaren Datei reduzieren, jedoch auf Kosten langsamerer Ausführungszeiten. Thumb wird unter ARMv7 und ARMv7s unterstützt.

Bedingte Frameworknutzung

Wenn Ihr Projekt einige der Funktionen der neueren iOS-Versionen nutzen möchte, müssen Sie sich möglicherweise bedingt auf bestimmte neue Frameworks verlassen. Ein Paradebeispiel dafür ist der Wunsch, iAd unter iOS 4.0 oder höher zu verwenden, aber dennoch 3.x-Geräte zu unterstützen. Um dies zu erreichen, müssen Sie Xamarin.iOS wissen lassen, dass Sie für das iAd-Framework eine „schwache“ Verknüpfung benötigen. Schwache Bindungen sorgen dafür, dass das Framework nur bei Bedarf geladen wird, wenn zum ersten Mal eine Klasse aus dem Framework benötigt wird.

Gehen Sie dazu folgendermaßen vor:

  • Öffnen Sie Projektoptionen, und navigieren Sie zum Bereich iOS-Build.
  • Fügen Sie '-gcc_flags "-weak_framework iAd"' den Zusätzlichen Optionen für jede Konfiguration hinzu, mit der Sie eine schwache Verknüpfung herstellen möchten:

Zusätzliche Optionen

Zusätzlich dazu müssen Sie Ihre Verwendung der Typen davor schützen, unter älteren Versionen von iOS ausgeführt zu werden, in denen sie möglicherweise nicht vorhanden sind. Es gibt mehrere Methoden, um dies zu erreichen, von denen eine die Analyse von UIDevice.CurrentDevice.SystemVersion ist.