web-dev-qa-db-fra.com

Bibliothèque statique et Swift

Je travaille donc sur un projet iOS dans Swift, et je voulais créer une bibliothèque statique avec des trucs utiles.

Mon problème est quand j'essaye de construire ma lib dans Xcode (version 6.3) j'ai un "Build Failed" suivi de: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: unknown option character 'X' in: -Xlinker

Je n'ai jamais vu ça et ce n'est pas ma première bibliothèque statique. Je pensais donc que je pouvais être lié au fait que j'utilise exclusivement la classe Swift.

Qu'en pensez-vous ? Merci d'avance.

23
Que20

À partir de Xcode 9 beta 4, Xcode prend en charge nativement les bibliothèques statiques avec des sources Swift.

10
Alessandro

Comme mentionné, Apple ne permet Swift dans les bibliothèques statiques à partir de Xcode 9 Bêta 4.

Nous avons tenté de le faire sur un projet existant avec une cible basée sur Objective-C et des projets de bibliothèque statique "enfant" et avons continué à rencontrer une erreur de liaison

ld: library not found for -lswiftSwiftOnoneSupport for architecture x86_64

aussi

ld: library not found for -lswiftDispatch for architecture x86_64

En effet, la cible principale (application) essaie de construire uniquement avec Objective-C et la bibliothèque statique ne lui dit pas qu'elle doit inclure les bibliothèques Swift. C'est parce qu'il n'y avait pas de ' t tous les fichiers Swift dans la section Compile Sources de notre Build Phases pour la cible de l'application.

Donc, fondamentalement tout ce que vous avez à faire est d'ajouter au moins un fichier .Swift À cette liste de compilation et il inclura le Swift bibliothèques pour vous. Il n'a même pas besoin de code ou de valeurs, il peut s'agir d'un fichier vide.

Ensuite, vous pouvez commencer à ajouter des fichiers Swift à votre projet de bibliothèque statique "enfant". Je le laisserais d'abord générer l'en-tête de pontage pour vous, puis vous pouvez le déplacer et modifier ce qui est importé (faire assurez-vous que le projet pointe vers le bon fichier dans les paramètres de construction si vous le déplacez).

Vous devez toujours garder à l'esprit que l'utilisation de Swift et Objective-C dans la bibliothèque statique même peut avoir ses propres problèmes. Je suggère de lire le Apple "Swift et Objective-C dans le même projet" sur la façon de traiter l'importation d'Objective-C dans Swift (en utilisant un en-tête de pontage) et comment utiliser les fichiers Swift dans votre code Objective-C (importation du -Swift.h généré pour votre bibliothèque).

19
Dean Kelly

Swift ne prend en charge la bibliothèque statique

Bien que la bonne façon soit de créer un framework, il existe une solution ici .

18
Giordano Scalzo

Consommateur Swift -> Swift

Xcode version 10.2.1

Créer une bibliothèque statique Swift

Créer un projet de bibliothèque ou créer une cible de bibliothèque

File -> New -> Project... -> Cocoa Touch Static Library
//or
Project editor -> Add a Target -> Cocoa Touch Static Library 

Ajouter des fichiers .Swift

Select `.Swift` file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files

Créer une bibliothèque - ⌘ Command + B ou Product -> Build

Remarque: veillez à créer une bibliothèque pour la même architecture de processus que le code client.

Rechercher la sortie générée [Lieu de construction]

Products group -> lib<product_name>.a -> Show in Finder

Le répertoire comprend

  • lib<product_name>.a - une bibliothèque statique construite
  • <product_name>.swiftmodule dossier contenant:
    • .swiftdoc - documents
    • .swiftmodule - interface publique/définitions

Utilisation de Swift bibliothèque statique

Drag and drop le binaire dans le projet Xcode [Sur]

Link Binary[Symboles non définis][Lien vs intégration]

Project editor -> select a target -> General -> Linked Frameworks and Libraries -> add -> Add Others... -> point to `lib<target_name>.a` file
//or
Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to `lib<target_name>.a` file

Ajouter Library Search paths[Bibliothèque introuvable pour][Chemin récursif]

Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of `lib<target_name>.a` file

Ajouter Import Paths[Aucun module de ce type][Chemin récursif]

Project editor -> select a target -> Build Settings -> Swift Compiler - Search Paths -> Import Paths -> add path to the parent of `.swiftmodule` folder

Importer le module dans le code client Swift [nom_module]

import module_name

Plus d'exemples ici

6
yoAlex5