web-dev-qa-db-fra.com

Ajouter une dépendance à un package local Swift dans Xcode 11

J'essaie d'ajouter une dépendance à un Swift local dans mon projet Xcode. (Je ne veux pas ajouter de dépendance à l'aide d'une URL de fichier file://me/dev/app/package car cela ne peut pas être partagé avec d'autres environnements)

J'ai essayé de glisser-déposer le package sur la cible. Cela crée une référence au package dans le projet que j'ai pu ajouter dans la phase de construction "Link Binary With Libraries", mais la bibliothèque est toujours introuvable.

No such module 'Analytics'

Ma configuration d'origine

enter image description here

Après glisser-déposer

enter image description here

et voici ma configuration de package:

// Swift-tools-version:5.1
import PackageDescription

let package = Package(
    name: "Analytics",
    products: [
        .library(name: "Analytics", targets: ["Analytics"]),
    ],
    dependencies: [
        .package(path: "../SomeOtherPackage"),
    ],
    targets: [
        .target(name: "Analytics", dependencies: [
            "SomeOtherPackage",
        ]),
    ]
)

J'ai également inclus le package dans les binaires liés cibles et/ou les ressources de bundle et/ou les sources compilées en vain:

enter image description here

J'ai lu cette longue discussion qui ne semble pas être concluant.

Voici un exemple simple de ce que j'essaie: https://github.com/gsabran/SPM_Xcode_test

3
Guig

Voici littéralement ce que je fais et ça fonctionne ... Xcode 11.2

I. Préparer le colis

  1. Fichier> Nouveau> Swift Package> Sélectionner un dossier vide (ou créer un nouveau)> Entrer le nom de la bibliothèque (MyLibrary)

  2. Ici, dans le projet, trouvez MyLibrary.Swift et rendez la structure et la variable publiques, donc il y a une exportation à utiliser dans l'application (j'ai fait une constante statique et un UT fixe)

  3. Créer> OK> Fermer le projet

II. Préparer le projet

  1. Fichier> Nouveau> Projet> iOS> Application vue unique> Entrez le nom (MyApp)> Suivant> Sélectionnez le même dossier que ci-dessus (c'est par défaut)> Créer

  2. Construire> OK

  3. Dans le Finder, faites glisser le dossier MyLibrary juste en dessous du nom du projet dans Xcode Project Navigator

  4. Construire> OK

  5. Cliquez sur l'icône du projet MyApp dans Project Navigator> Sélectionnez la cible de l'application MyApp> section Frameworks, Libraries,… cliquez sur +> Dans la section supérieure de l'espace de travail, sélectionnez MyLibrary> Ajouter

  6. Nettoyer> Construire> OK

  7. Ouvrez ContentView.Swift> tapez import MyLibrary (la saisie semi-automatique le voit déjà) Remplacer "Bonjour, monde" par "(MyLibrary.text)"

  8. Créer et exécuter> OK

C'est tout.

Pour vérifier le chemin relatif utilisé, ouvrez project.pbxproj dans TextEdit, voici une capture d'écran

Swift package relative path

Mise à jour:
Note1 - J'ai considéré un certain retard dans la résolution du paquet après le nettoyage, donc pendant une certaine période de temps, 1-2 minutes ici, La génération échoue exactement avec l'erreur signalée, mais après ce délai, il est visible que l'index a redémarré et que la génération suivante a réussi.
Note2 - L'ajout d'un deuxième package dépendant dans le graphique (MyApp> MyLibrary> AnotherLibrary) est le même.

8
Asperi