Bei Verwendung eines externen Frameworks verfügt Xcode jetzt über einen Abschnitt mit eingebetteten Binärdateien sowie über verknüpfte Frameworks .
Wenn Sie ein externes Framework herunterladen und Finder-> in Xcode ziehen, wird das Framework in den verknüpften Frameworks und Bibliotheken platziert Abschnitt .
Wenn Sie eine Bibliothek mit Karthago erstellen, wird empfohlen, diese in die eingebetteten Binärdateien zu ziehen Abschnitt .
Beide scheinen in Bezug auf die Verknüpfung zu funktionieren, da die API in beiden Fällen verfügbar wird. Wenn Sie ein Framework zum Abschnitt " Eingebettete Binärdateien" hinzufügen, wird es auch automatisch zu den verknüpften Frameworks und Bibliotheken hinzugefügt Abschnitt " .
Also, wer hat recht? Karthago oder der Rest des Internets? und warum gibt es zwei Möglichkeiten, externe Ressourcen in Xcode-Projekte einzubeziehen?
Antworten:
Verknüpfen - Wir müssen ein Framework verknüpfen, wenn wir eine darin definierte API verwenden.
Einbetten - Dieser Prozess stellt sicher, dass das hinzugefügte Framework in das App-Bundle eingebettet wird, und hilft möglicherweise dabei, Code zwischen der App und allen Erweiterungs-Bundles auszutauschen. Wir binden nur Frameworks von Drittanbietern ein und nicht die von iOS bereitgestellten, da diese auf dem Gerät verfügbar sind. Wenn wir einbetten, bedeutet dies, dass wir auch eine Verknüpfung zu ihnen herstellen müssen, damit Xcode den Build kompilieren und erstellen kann. Wenn die App auf dem Gerät ausgeführt wird, wird das eingebettete Framework bei Bedarf in den Speicher geladen.
quelle
embed
und nichtlink
? Und umgekehrt? Und warum?Wenn Sie die Binärdatei einbetten, wird sie in Ihr Produkt aufgenommen. Wenn Sie eine Bibliothek oder ein Framework nur verknüpfen, ohne es einzubetten, ist es nicht Teil Ihres Produkts.
In iOS8 müssen jedoch alle Frameworks von Drittanbietern "eingebettet" sein. Sogar ein Framework, das von verschiedenen Programmen gemeinsam genutzt wird, muss in jedes einzelne dieser Programme "eingebettet" werden. In dem Fall, in dem es auf dem Gerät an einem freigegebenen Speicherort installiert wurde, kann jeder andere Installationsprozess, der denselben "eingebetteten" Code vom freigegebenen Speicherort verwendet, diese vorhandene Installation wiederverwenden. Dies ist spezifisch für iOS8. Vor iOS8 war dies nicht möglich. Außerhalb der iOS-Welt wäre diese Antwort nicht korrekt.
quelle
Linking
Mehr dazuLinker
funktioniert zur Kompilierungszeit oder zum Laden / Ausführen.Linker
Kopieren Sie aLibrary
in eine Zielbinärdatei. DaFramework
es autonom ist, ist derLinker
in diesem Fall dafür verantwortlich,Dynamic Framework
den Pfad innerhalb des Systemladeprogramms zu finden und zu verknüpfen oder innerhalb eines Bundles zu suchen und zu verknüpfen .Embedding
ist ein Prozess zum Kopieren der Binärdatei in die Zielbinärdatei. Infolgedessen befindet es sich im Inneren.Lesen Sie hier mehr
quelle
Meines Erachtens enthält die eingebettete Binärdatei nur ein dynamisches Framework, das unter iOS 8 und höher verfügbar ist. Andernfalls können Sie nur das statische Framework verknüpfen.
quelle