30 votes

Comment utiliser Swift Package Manager avec un projet macOS existant?

J'ai été en utilisant Cocoapods pour gérer les dépendances pour ma Swift projet. Je suis tombé sur ce paquet qui n'est pas inscrite au Cocoapods. Au lieu de cela, il suggère l'utilisation de Swift Gestionnaire de paquets. Cependant, chaque fois que j'essaie d'utiliser Swift Gestionnaire de Paquet pour faire fondamentalement quoi que ce soit, il finit par détruire complètement l'ensemble de mon projet.

Ainsi, afin de comprendre comment l'utiliser effectivement Swift Gestionnaire de Paquet, je suis en train de jouer avec elle dans un projet de test.

Voici ce que j'ai essayé:

  1. Créer un nouveau projet dans Xcode

Fichier -> Nouveau -> Projet -> Cacao App

Nom de produit: base-ssh-test

Cela crée une demande de base qui permet de charger une fenêtre vide, quand j'appuie sur "Exécuter". Juste pour le fun, j'ai ajouté print("test") de la applicationDidFinishLaunching fonction dans ma AppDelegate de sorte que la fenêtre de débogage dit "test" quand je lance le programme.

Maintenant, je veux ajouter l' Shout paquet comme une dépendance.

  1. swift package init --type executable

Cela crée les fichiers suivants:

Creating executable package: basic-ssh-test
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/basic-ssh-test/main.swift
Creating Tests/

Maintenant, je vais ajouter le "Cri" de la dépendance à mon nouveau Package.swift le fichier:

// swift-tools-version:4.0
import PackageDescription

let package = Package(
    name: "basic-ssh-test",
    dependencies: [
        .package(url: "https://github.com/jakeheis/Shout", from: "0.2.0")
    ],
    targets: [
        .target(
            name: "basic-ssh-test",
            dependencies: ["Shout"]),
    ]
)

Et je vais te tirer dans les dépendances:

  1. swift package resolve

Cela se traduit dans les dépendances d'être tiré dans l' .build annuaire:

Fetching https://github.com/jakeheis/Shout
Fetching https://github.com/jakeheis/CSSH
Fetching https://github.com/IBM-Swift/BlueSocket
Cloning https://github.com/IBM-Swift/BlueSocket
Resolving https://github.com/IBM-Swift/BlueSocket at 0.12.91
Cloning https://github.com/jakeheis/CSSH
Resolving https://github.com/jakeheis/CSSH at 1.0.3
Cloning https://github.com/jakeheis/Shout
Resolving https://github.com/jakeheis/Shout at 0.3.0

Maintenant, je régénérer l' xcodeproj le fichier:

  1. swift package generate-xcodeproj

Maintenant quand j'ouvre l' xcodeproj le fichier il y a un nouveau groupe appelé Sources qui a un seul répertoire basic-ssh-test avec un seul swift fichier main.swift avec print("Hello, world!").

Le code que je suis réellement intéressé par la course est maintenant dans un dossier bleu appelé basic-ssh-test. Tous les fichiers nécessaires sont toujours là, mais au lieu de l'exécution de ma demande, Xcode est l'exécution de l' main.swift le fichier. Je peux le dire, car la sortie de débogage est "Hello, world!" au lieu de "test".

J'ai lu quelques tutoriels qui prétendent que la Swift Gestionnaire de Paquet déplacer mes fichiers source et de continuer à bâtir le même qu'avant, mais c'est clairement pas le cas.

Il n'est pas non plus une "Interface Principale" option dans mes Paramètres de génération, donc je ne peux pas sélectionner "MainMenu.xib" que mon point de départ d'application.

C'est essentiellement la même chose qui se passe lorsque j'essaie d'utiliser Swift Gestionnaire de Projet avec mon projet existant. Il tire dans les dépendances, mais il l'ignore fondamentalement l'ensemble de mon projet existant et passe juste le "hello world" du code.

Comment puis-je utiliser Swift Gestionnaire de Package pour ajouter une dépendance à un projet existant, sans ignorer la base de code existante?

7voto

allenh Points 4335

Je pense que SPM est uniquement compatible avec Mac de ligne de commande des exécutables ou des bibliothèques. Cette stipule explicitement la GPS ne prend pas en charge iOS, watchOS, ou tvOS plates-formes à tous. Mais, depuis macOS AppKit/application Cocoa objectifs sont très similaires à iOS ou tvOS Xcode objectifs, je dirais que cette déclaration implique que le GPS ne peut pas être utilisé avec macOS applications Cocoa hors de la boîte, ce qui est ce que je pense que vous espérez pour.

Il ressemble à il y a peu de travail ici sur la façon de l'utiliser avec l'application iOS cibles qui devrait largement se traduire par un macOS Cacao cible.

4voto

shafrianadhi Points 523

Jusqu'à ce que le moment de la rédaction de la réponse, Swift Gestionnaire de paquets ne prennent pas en charge l'iOS, tvOS, et watchOS. Au lieu de cela, vous devez ajouter les fichiers à partir du colis directement à votre projet.

Je vous suggère la création d'une des Dépendances de votre projet et un groupe ci-dessous que, avec le nom du package, comme cette réponse:

Alors, tout d'abord, vous allez ajouter les fichiers de dépendance que vous souhaitez importer dans votre projet pour le nom de le nom du package inclus dans les Dépendances du groupe que nous faisons avant.

Après avoir ajouté les fichiers, vous pouvez accéder au code comme vous le faites habituellement lorsque vous écrivez vous-même comme l'image ci-dessous. Pas besoin d'importations. Vous pouvez voir plus de détails ici. espérons que cela aide.

enter image description here

3voto

rougeExciter Points 1253

Vous pouvez créer une fenêtre de l'application à l'aide de GPS (j'ai tout un projet assis en attente pour ABI qui fait cela) vous avez besoin juste de la chaudière plaque en swift.principal. Je vais creuser ça.

Cependant, la méthode d'autres sont suggère, c'est de ne jamais aller au travail (avec les versions actuelles de SPM).

Cependant, ce que je vois, c'est que vous voulez vraiment utiliser SPM pour gérer les dépendances (tenue à jour, etc). Donc, je pense que vous pourriez le faire beaucoup plus facilement.

Plutôt que de créer un fichier exécutable que votre cible par défaut, au lieu de créer une bibliothèque (peut-être l'appeler de base-ssh-dépendances). Générer votre projet Xcode et faites-le glisser dans votre principal projet Xcode et configurer votre cible à en dépendre. Lorsque vous mettez à jour la bibliothèque de SPM pour les changements dans les dépendances, vous devriez re-gen votre Xcode-proj.

Laissez-moi savoir votre kilométrage et de rides, ou si j'ai mal compris ce que vous essayez d'atteindre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X