web-dev-qa-db-fra.com

Lien binaire avec les bibliothèques VS Embed Frameworks

Quelle est la différence dans les phases de construction entre la mise en place d'un cadre dans "Lien binaire avec bibliothèques" ou dans "cadres Embed"?

62
Alberto Schiariti

Liez les fichiers binaires aux bibliothèques Liez les frameworks et les bibliothèques aux fichiers objets de votre projet pour générer un fichier binaire. Vous pouvez lier les fichiers source d’une cible aux bibliothèques du SDK actif de la cible ou à des bibliothèques externes.

Cadres intégrés Vous pouvez créer un cadre intégré pour partager le code entre votre extension d’application et l’application la contenant.

-

Timeline (Regardez cette phrase) - "Si votre application cible contenant links vers un framework intégré , elle doit inclure l'architecture arm64 sinon elle sera rejetée par l'App Store. "

37
Jakub Truhlář

J'ai examiné certaines réponses ici et là et j'aimerais modifier cet apprentissage si quelqu'un revenait sur cette question.

Dans tous les cas, si nous voulons utiliser l’une quelconque des ressources de frameworks (c’est-à-dire l’API), nous devons y effectuer un lien. Dans ce cas, nous devons l'ajouter dans la section "Structures et bibliothèques liées" au bas des Paramètres généraux de la cible.

Si nous intégrons une bibliothèque, nous expédions la bibliothèque - telle quelle - avec notre bundle d'applications. Cela pourrait être pratique, par exemple. sur des machines exécutant macOS qui ne possèdent certainement pas de bibliothèque tierce spécifique.

Alors, qu'en est-il d'iOS? Il n’est pas possible d’installer des bibliothèques tierces sur un appareil iOS en tant que tel. De plus, Apple est très strict en ce qui concerne les infrastructures fat (bibliothèques construites pour plusieurs plates-formes). Il doit donc y avoir un moyen pour que les bibliothèques soient livrées de toute façon? Etant donné que les lier simplement ne suffit pas pour l'utilisateur de notre application, quelles autres possibilités avons-nous?

C'est là qu'une phase de construction particulière entre en jeu. Dans les paramètres du projet sous Build Phases, vous trouverez la section link binary with libraries. Cette étape supprime les composants inutiles des frameworks fat et laisse les composants nécessaires avec le bundle, de sorte qu'il puisse s'exécuter sur un périphérique ne tenant pas compte des dépendances de l'application.

0
ff10

Lien binaire

Build Phases -> Link Binary With Libraries est un miroir de General -> Linked Frameworks and Libraries.

Bibliothèque statique et cadre statique

Si vous ajoutez un Static Library or Static Framework à cette section, il apparaîtra dans le groupe Frameworks et une référence sera ajoutée à votre projet. pour ça. Ensuite, il sera utilisé par Static Linker. Static Linker au moment de la compilation inclura tout le code de la bibliothèque dans le fichier objet exécutable. Si vous n’ajoutez pas la bibliothèque à cette section, vous obtiendrez une erreur de l’éditeur de liens [ld: symbole (s) non trouvé (s)]

Veuillez noter que l’éditeur de liens fonctionne en paire avec Build Settings -> Library Search Paths[bibliothèque non trouvée]

PS Xcode 10. Vous pouvez ignorer cette étape pour un Static Framework

Cadre dynamique

  • Vous pouvez ignorer cette section si vous avez Embedded Binaries.

  • N'utilisez pas cette approche. Juste pour votre information. Si vous essayez de créer une structure première partie avec une structure tierce , vous ne verrez pas la section General -> Embedded Binaries. Si vous ajoutez un cadre à cette section, il apparaîtra dans le groupe Frameworks. Si vous n’ajoutez pas le cadre à cette section, vous obtiendrez une erreur de l’éditeur de liens [ld: symbole (s) non trouvé (s)] . Aussi, vous devez spécifier un @rpath[À propos] avec un chemin local qui fonctionnera sur un simulateur mais jettera l'erreur [dyld: la bibliothèque n'est pas chargée] si vous utilisez un périphérique réel.

Veuillez noter que cela fonctionne en paire avec Build Settings -> Framework Search Paths[Aucun module de ce type]

Binaire intégré

Bibliothèque statique

L’incorporation n’aurait aucun sens pour un Static Library parce que les symboles de la bibliothèque statique sont compilés dans l’exécutable. Xcode ne vous laissera donc pas déposer une bibliothèque statique dans la section Incorporer.

Cadre statique

Ce n'est pas nécessaire à cause d'un linker statique

Cadre dynamique

Build Phases -> Embed Frameworks est un miroir de General -> Embedded Binaries. En réalité, l’incorporation ajoute une copie de la structure dans votre offre. En conséquence, lorsqu'un framework est ajouté/supprimé à la section Embed, il sera automatiquement ajouté/supprimé à la section Linked. Par défaut, le dossier de l'ensemble est Frameworks mais vous pouvez le modifier à l'aide du champ Destination. De plus, vous pouvez spécifier un Subpath.

Dynamic linker :dyld à charge ou à l'exécution essaiera de trouver le cadre intégré en utilisant @rpath[À propos] S'il n'est pas trouvé l'erreur se produira [dyld: la bibliothèque n'est pas chargée]

lorsque vous utilisez Link et Embed

Vocabulaire

La source est ici .

0
yoAlex5