4
votes

Xcode 10.2 convertit plusieurs cibles en Swift 5: essaie de compiler certaines classes qui ne font pas partie de la cible

J'ai un projet iOS Swift avec plusieurs cibles.

La conversion de la première cible en Swift 5 a été facile.

En convertissant la deuxième cible en Swift 5, Xcode 10.2 tente de compiler des fichiers qui n'existent clairement que dans la première cible et échoue (car il ne compile pas tous les fichiers de la première cible et se plaint des identifiants non résolus).

Que puis-je faire pour que Xcode ne compile que les fichiers qui font partie de la cible lors de la conversion vers Swift 5?

Comment puis-je convertir mon projet en Swift 5?

Nettoyer le dossier Build et redémarrer Xcode 10.2 n'aide pas.


2 commentaires

Swift 5 étant compatible avec Swift 4.2, si vous rencontrez des problèmes avec l'assistant de migration, vous pouvez simplement essayer de changer SWIFT_VERSION en 5.0 et résoudre les rares erreurs manuellement.


Notez que l'assistant de migration Swift essaiera de créer toutes les architectures (pas seulement celle active), ce qui peut expliquer certains problèmes. Mais pour pouvoir vraiment aider, nous aurions besoin d'un exemple de projet et / ou de plus de détails sur les erreurs.


4 Réponses :


0
votes

J'ai trouvé une solution de contournement:

  1. réinitialiser le projet à l'état avant la conversion.
  2. convertir la cible avec le moins de classes (ne contenant pas les fichiers dans le message d'erreur de la première tentative)
  3. convertir la cible en cible, y compris de plus en plus de fichiers
  4. convertir les cibles de test

Avec cette approche, j'ai pu convertir mon projet.

(Voir aussi le commentaire de Cœur, je pense que leur conversion manuelle fonctionnerait aussi)


2 commentaires

Comment réinitialiser le projet?


J'utilise git + SourceTree pour avoir chaque bit de mon projet, y compris tous les fichiers de configuration dans git. Évidemment, cela n'aide que si vous mettez votre projet dans git avant de commencer votre conversion.



0
votes

Je ne sais pas quel est le problème, si vous pouviez déposer un rapport de bogue sur http://bugreport.apple .com , l'équipe d'Apple assurera un suivi avec vous.

Notez qu'il existe un guide de migration qui peut vous être utile ici: https://swift.org / migration-guide-swift5


0 commentaires

1
votes

Je viens de suivre ce processus et j'ai pu trouver une solution assez simple à partir d'un indice dans la dernière phrase du guide de migration https://swift.org/migration-guide-swift5/

Lorsque j'essayais de convertir chaque cible individuellement dans mon projet, la deuxième cible échouait à cause du code partagé avec la première cible déjà convertie. La solution consiste à créer un nouveau schéma qui inclut toutes les cibles qui doivent être migrées en un seul passage.

  1. Cliquez sur le bouton du schéma pour afficher le menu déroulant et sélectionnez "Nouveau schéma ..."

  2. Créez le schéma, puis sélectionnez-le dans le menu déroulant et choisissez "Modifier le schéma ..."

  3. Dans la section "Construire", utilisez le bouton "+" pour ajouter toutes les cibles que vous devez convertir au schéma.

  4. Construisez le nouveau schéma avec la version actuelle de Swift pour confirmer que toutes les cibles se construisent correctement.

  5. Utilisez Edit -> Convert -> "To Current Swift Syntax ..." pour démarrer la conversion

Cela a fonctionné pour moi dans un projet avec 15 cibles avec beaucoup de code Swift partagé qui était dans la version 4.0.


0 commentaires

0
votes

Si je comprends bien. Vous avez correctement migré une cible et une autre est bloquée sur l'ancien swift. J'ai eu une situation similaire, cliquez sur la cible, allez dans 'Build Settings', recherchez 'swift' puis changez manuellement la 'Swift Language Version' en 5. Ensuite, puisque vous avez déjà converti le code, il devrait simplement compiler .


1 commentaires

chaque cible avait des classes que l'autre n'avait pas