Share via


Native Verweise in iOS-, Mac- und Bindungsprojekten

Mit nativen Verweisen können Sie ein natives Framework in ein Xamarin.iOS- oder Xamarin.Mac-Projekt oder ein Bindungsprojekt einbetten.

Seit iOS 8.0 ist es möglich, ein eingebettetes Framework zu erstellen, um Code zwischen App-Erweiterungen und der Standard-App in Xcode freizugeben. Mithilfe der nativen Referenzfunktion ist es möglich, diese eingebetteten Frameworks (mit Xcode erstellt) in Xamarin.iOS zu nutzen.

Wichtig

Es ist nicht möglich, eingebettete Frameworks aus jedem Typ von Xamarin.iOS- oder Xamarin.Mac-Projekten zu erstellen. Native Verweise ermöglichen nur die Verwendung vorhandener nativer (Objective-C) Frameworks.

Begriff

In iOS 8 (und höher) können Eingebettete Frameworks sowohl statisch verknüpfte als auch dynamisch verknüpfte Frameworks sein. Um sie ordnungsgemäß zu verteilen, müssen Sie sie zu "fetten" Frameworks machen, die alle ihre Slices für jede Gerätearchitektur enthalten, die Sie mit Ihrer App unterstützen möchten.

Statische und dynamische Frameworks

Statische Frameworks werden zur Kompilierzeit verknüpft, wobei dynamische Frameworks zur Laufzeit verknüpft sind und daher ohne erneute Verknüpfung geändert werden können. Wenn Sie vor iOS 8 ein Drittanbieterframework verwendet haben, verwenden Sie ein statisches Framework , das in Ihre App kompiliert wurde. Weitere Informationen finden Sie in der Dokumentation zur Programmierung der dynamischen Bibliothek von Apple.

Eingebettete Im Vergleich zu Systemframeworks

Eingebettete Frameworks sind in Ihrem App-Bundle enthalten und können nur über die Sandbox für Ihre spezifische App zugänglich sein. Systemframeworks werden auf Betriebssystemebene gespeichert und sind für alle Apps auf dem Gerät verfügbar. Derzeit ist nur Apple in der Lage, Frameworks auf Betriebssystemebene zu erstellen.

Thin- und Fat-Frameworks

Thin Frameworks enthalten nur den kompilierten Code für eine bestimmte Systemarchitektur, in der Fat Frameworks Code für mehrere Architekturen enthalten. Jede architekturspezifische Codebasis, die in ein Framework kompiliert wird, wird als Slice bezeichnet. Wenn wir also beispielsweise ein Framework hätten, das für die beiden iOS-Simulatorarchitekturen (i386 und X86_64) kompiliert wurde, würde es zwei Slices enthalten.

Wenn Sie versucht haben, dieses Beispielframework mit Ihrer App zu verteilen, würde es im Simulator ordnungsgemäß ausgeführt, schlägt aber auf dem Gerät fehl, da das Framework keine codespezifischen Slices für ein iOS-Gerät enthält. Um sicherzustellen, dass ein Framework in allen Instanzen funktioniert, muss es auch gerätespezifische Slices wie arm64, armv7 und armv7s enthalten.

Arbeiten mit Eingebetteten Frameworks

Zum Arbeiten mit Eingebetteten Frameworks in einer Xamarin.iOS- oder Xamarin.Mac-App müssen zwei Schritte ausgeführt werden: Erstellen eines fat Frameworks und Einbetten des Frameworks.

Erstellen eines Fat Frameworks

Wie oben erwähnt, muss es sich um ein Fat Framework handelt, um ein Eingebettetes Framework in Ihrer App nutzen zu können, das alle Systemarchitektur-Slices für die Geräte enthält, auf denen Ihre App ausgeführt wird.

Wenn sich das Framework und die verbrauchende App im selben Xcode-Projekt befinden, ist dies kein Problem, da Xcode sowohl das Framework als auch die App mit den gleichen Buildeinstellungen erstellt. Da Xamarin-Apps keine Eingebetteten Frameworks erstellen können, kann dieses Verfahren nicht verwendet werden.

Um dieses Problem zu beheben, kann das lipo Befehlszeilentool verwendet werden, um zwei oder mehr Frameworks in einem Fat Framework zusammenzuführen, das alle erforderlichen Slices enthält. Weitere Informationen zum Arbeiten mit dem lipo Befehl finden Sie in der Dokumentation zum Verknüpfen nativer Bibliotheken .

Einbetten eines Frameworks

Die folgenden Schritte sind erforderlich, um ein Framework mithilfe nativer Verweise in ein Xamarin.iOS- oder Xamarin.Mac-Projekt einzubetten:

  1. Erstellen Sie ein neues oder öffnen Sie ein vorhandenes Xamarin.iOS-, Xamarin.Mac- oder Binding-Projekt.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, und wählen SieNativen Verweis hinzufügenaus>:

    Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, und wählen Sie Native Referenz hinzufügen aus.

  3. Wählen Sie im Dialogfeld Öffnen den Namen des nativen Frameworks aus, das Sie einbetten möchten, und klicken Sie auf die Schaltfläche Öffnen :

    Wählen Sie den Namen des einbettenden Native Frameworks aus, und klicken Sie auf die Schaltfläche Öffnen.

  4. Das Framework wird der Struktur des Projekts hinzugefügt:

    Das Framework wird der Projektstruktur hinzugefügt.

Wenn das Projekt kompiliert wird, wird das native Framework in das Paket der App eingebettet.

App-Erweiterungen und eingebettete Frameworks

Intern kann Xamarin.iOS dieses Feature nutzen, um mit der Mono-Runtime als Framework zu verknüpfen (wenn das Bereitstellungsziel = iOS 8.0 ist >), wodurch die App-Größe für Apps mit Erweiterungen erheblich reduziert wird (da die Mono-Runtime nur einmal für das gesamte App-Bündel enthalten ist, anstatt einmal für die Container-App und einmal für jede Erweiterung).

Erweiterungen verknüpfen sich mit der Mono-Runtime als Framework, da alle Erweiterungen iOS 8.0 erfordern.

Apps ohne Erweiterungen und Apps für iOS

Zusammenfassung

Dieser Artikel hat sich ausführlich mit der Einbettung eines nativen Frameworks in eine Xamarin.iOS- oder Xamarin.Mac-Anwendung befasst.