xspm pour tenter de réconcilier Swift Package Manager et Xcode

Salut à tous,

Je viens vous présenter un outil sur lequel j'ai travaillé durant les derniers mois sur mon temps libre et sur lequel je voudrai un avis.
Il s'agit d'un outil en ligne de commande qui permet d'intégrer plus facilement des packages obtenus au travers du Swift Package Manager dans Xcode.

On ne peut pas le faire directement normalement mais il y a une méthode assez connue qui consiste à créer un package de type framework auquel on ajoute des dépendances. Une fois le projet Xcode généré on se retrouve avec un projet qui contient les dépendances sous forme de frameworks une fois ce projet ajouté comme sous-projet au projet cible on peut disposer de ces dernières comme bon nous semble.

J'ai voulu automatiser le processus et le rendre plus simple à mettre en place. C'est pourquoi j'ai créé xspm.
Le workflow est, je pense, simple :

On se place à la racine du projet cible et

  1. on crée le fichier manifest avec xspm bootstrap
  2. on indique dans le fichier les dépendances sous forme de ligne du type + "https://gitlab.com/Pyroh/CoreGeometry.git" CoreGeometry >= 2.6.0. Toujours + puis l'URL (les URL locales même relatives fonctionnent) le nom du ou des products dont on a besoin et une contrainte de version (ou rien pour la branche master)
  3. Optionellement on peut spécifier un mapping entre les products et les target du projet cible. l'outil n'interviendra pas mais il informera l'utilisateur des dépendances requises par target qu'il n'aura plus qu'à lier manuellement. On les spécifie avec des lignes de type # "transformer" [Sylex, CoreGeometry, Roaster]
  4. on crée le dossier des dépendances et on y génère le project Xcode correspondant avec la commande xspm init
  5. si on a spécifié dans le fichier manifest qu'il fallait ajouter le projet de dépendances au projet cible une fois ce dernier ouvert il est prêt à l'emploi et on peut disposer des dépendances comme bon nous semble. Sinon il faut ajouter manuellement le projet de dépendances comme sous projet.

Par la suite les dépendances peuvent évoluer dans ce cas le fichier manifest doit être mis à jour et la commande xspm update fera le reste. Cette commande est aussi utilisée pour mettre à jour les paquets.

Voici un exemple d'interaction avec xspm :

$ xspm update

 💫 Updating dependencies...

ℹ Updating dependencies...
✔︎ Dependencies updated.
ℹ Updating dependency project...
✔︎ Dependency project updated.

ℹ Resolving targets dependendencies...
✔︎ Target dependencies resolved.
ℹ Here is the recommanded project configuration:
ℹ 2 targets has been left unchanged:
     - transformer: Roaster, Sylex, CoreGeometry
     -  * : Roaster, Sylex, CoreGeometry


✨🌟   Jobs done   🌟✨

Le projet est dans un repo sur Gitlab il sera bientôt rendu public. Si quelqu'un veut y jouer avec avant tout le monde qu'il me donne son handle Gitlab je lui donnerai l'accès. Il faut encore que j'écrive la doc. À la base ce projet a commencé sous forme d'un script et je l'utilise moi-même depuis le tout début mais maintenant je pense qu'il est mûr pour être dévoilé. Bien que j'ai peur que personne n'attende ce genre d'outil...

Je ne sais pas si ça intéressera grand monde ici mais CocoaCafé a toujours eu la primeur de mes projets.

Réponses

  • PyrohPyroh Membre
    avril 2019 modifié #2

    Pfiouuu ce succès !!
    C'est vraiment une idée à la con ou ça ne vous intéresse tout bonnement pas ? Les deux me vont j'aimerai juste savoir 😉

  • J'use pas swift, c'est pour les faibles o:)

  • SPM est encore limité à macOS si je ne m'abuse.
    Je l'utilise un peu, mais pas énormément.

    Ce qui pourrait être utile, c'est de montrer ce que tu dois faire sans, et ce que tu fais avec (quelles étapes ton truc gère, etc.).

  • Pour parler franchement je n’ai même plus d’Xcode sur mon Mac. Android Studio mange tellement de place sur mon p’ov SSD de 128 Go qu’il a fallu faire un grand nettoyage par le vide.

    Il reviendra quand sera fini le transfert de mes fichiers et d’Android Studio sur le PC Gamer, en cours d’assemblage (1,25 To de SSD).

  • Ah du retour !

    Alors actuellement pour SPM voilà la méthode que j'utilisais :
    1. Créer un dossier pour les dépendances à la racine du projet cible
    2. Créer un fichier Package.swift à l'intérieur de ce dossier
    3. Ajouter les dépendances au ficher
    4. $ swift package initdans le dossier des dépendances
    5. $ swift package generate-xcodeproj dans le dossier des dépendances
    6. Ajouter le projet contenant les dépendances au projet cible
    7. Linker les dépendances en vérifiant bien qu'on inclus les dépendances des dépendances

    Avec xspm c'est :
    1. $ xspm bootstrap à la racine du dossier
    2. Ajouter les dépendances au fichier manifest.xmnfst
    3. $ xspm init
    4. Linker les dépendances en suivant les instructions fournies

    Mise à jour des dépendances

    Pour les mise à jour avec SPM :
    2. $ swift package update dans le dossier des dépendances
    3. $ swift package generate-xcodeproj dans le dossier des dépendances
    4. Re-vérifier le linking soit même

    Avec xspm :
    1. $ xspm update à la racine du projet cible
    2. Vérifier que le linking est conforme à ce qu'xspm préconise

    Ça n'a rien de révolutionnaire ça rend juste la vie un peu plus facile :smile:.D'autant que la syntaxe du fichier manifest.xmnfst est beaucoup plus intuitive que celle de Package.swift.

Connectez-vous ou Inscrivez-vous pour répondre.