Binär mit Bibliotheken verknüpfen VS Embed Frameworks

77

Was ist der Unterschied in den Erstellungsphasen zwischen dem Einfügen eines Frameworks in "Binär mit Bibliotheken verknüpfen" oder "Frameworks einbetten"?

Alberto Schiariti
quelle
47
Ich stimme dafür, diese Frage erneut zu öffnen. Sie ist nicht allgemein. Ich habe diese Option gerade selbst gefunden und dachte: "Was ist das? Warum brauche ich sie?" Es vergleicht direkt zwei Optionen in XCode, und beide sind ziemlich seltsam. Als würde man sagen: "Möchten Sie Ihren Schuh binden oder den Akt des Bindens Ihres Schuhs einbetten? - Es ist ziemlich verwirrend.
Stephen J

Antworten:

41

Binärdatei mit Bibliotheken verknüpfen Verknüpfen Sie Frameworks und Bibliotheken mit den Objektdateien Ihres Projekts, um eine Binärdatei zu erstellen. Sie können die Quelldateien eines Ziels mit Bibliotheken im aktiven SDK des Ziels oder mit externen Bibliotheken verknüpfen.

Embed Frameworks Sie können ein eingebettetes Framework erstellen, um Code zwischen Ihrer App-Erweiterung und der enthaltenen App freizugeben.

- -

Zeitleiste (siehe diesen Satz) - "Wenn Ihr enthaltenes App-Ziel mit einem eingebetteten Framework verknüpft ist , muss es die arm64-Architektur enthalten, sonst wird es vom App Store abgelehnt."

Jakub Truhlář
quelle
5

Ich habe mir hier und da einige Antworten angesehen und möchte dieses Wissen ändern, wenn jemand erneut auf diese Frage stößt.

In jedem Fall müssen wir eine Verknüpfung zu einer Framework-Ressource (dh der API) herstellen, wenn wir diese verwenden möchten. In diesem Fall müssen wir es im Abschnitt "Verknüpfte Frameworks und Bibliotheken" unten in den allgemeinen Zieleinstellungen hinzufügen.

Wenn wir eine Bibliothek einbetten, versenden wir die Bibliothek - so wie sie ist - mit unserem App-Bundle. Dies kann nützlich sein, z. B. auf Computern unter macOS, auf denen sicherlich keine bestimmte Bibliothek eines Drittanbieters vorhanden ist.

Was ist also mit iOS? Es gibt keine Möglichkeit, Bibliotheken von Drittanbietern per se auf einem iOS-Gerät zu installieren. Außerdem ist Apple in Bezug auf Fat Frameworks (Bibliotheken, die für mehrere Plattformen erstellt wurden) sehr streng. Es muss also eine Möglichkeit geben, die Bibliotheken trotzdem zu liefern? Welche anderen Möglichkeiten haben wir, da es für den Benutzer unserer Anwendung nicht ausreicht, sie nur zu verknüpfen?

Hier kommt eine eigenartige Bauphase ins Spiel. In den Projekteinstellungen unter Build-Phasen befindet sich der Abschnitt Link-Binärdatei mit Bibliotheken. Dieser Schritt entfernt die unnötigen Teile aus den Fat Frameworks und belässt die erforderlichen Teile im Bundle, sodass es auf einem Gerät ausgeführt werden kann, das hinsichtlich der Abhängigkeiten der App agnostisch ist.

ff10
quelle
Wenn Sie jedoch nur AVFoundationin eine App importieren , wird diese auf magische Weise verknüpft, wie in Apples eigenem AVCam-Beispiel zu sehen ist
Andy Dent,
2

Für ein App- Ziel

Xcode 11

  • Static Library
  • Static Framework - - Do Not Embed
  • Dynamic Framework - - Embed

Pre Xcode 11

  • Static Library - - Link
  • Static Framework - - Link
  • Dynamic Framework - - Embed

Wie es funktioniert [Xcode v11] und [vor Xcode v11]

yoAlex5
quelle