web-dev-qa-db-fra.com

Comment construire le projet Swift 3 sur Xcode 9?

Notes de version de Xcode 9 indique que la compilation Swift 3 est prise en charge:

Un compilateur pour Swift 4 et Swift 3 , Swift 4 et Swift 3 cibles peuvent être compilées ensemble dans le même projet.

J'ai installé Xcode 9 beta. Mais lorsque je clique sur Construire, il affiche de nombreuses erreurs. Certaines préparations spéciales doivent-elles être effectuées lorsque vous utilisez Swift 3 dans Xcode 9?

UPD: Module compiled with Swift 3.1 cannot be imported in Swift 4.0

Le module compilé avec Swift 3.1 ne peut pas être importé dans Swift 4.0

42
Exey Panteleev

Sélectionnez la cible, allez à Build Settings > Swift Language Version:

enter image description here

60
vadian

Toutes les réponses ci-dessus répondent à la mauvaise question. Lorsque vous utilisez Xcode 9, vous utilisez le compilateur Swift 4 (même si vous l'utilisez pour compiler le code Swift 3], recompilez-le à l'aide du compilateur/Xcode approprié.

Si vous essayez de le faire via la ligne de commande, vous pouvez utiliser Sudo xcode-select -switch pour basculer entre les versions de xcode. Bonne chance!

9
Jeremie

Mise à jour pour Xcode 10.1 et Swift 4.2

Les cibles Swift 3, 4 et 4.2 peuvent coexister et se lier entre elles.

Vous décidez quand et si vous souhaitez migrer cible par cible lorsque cela convient à votre projet. Bien que la migration vers Swift 4.2 soit définitivement encouragée, il ne s’agit pas d’un processus "tout ou rien", car les cibles Swift 3, 4 et 4.2 peuvent coexister et se lier entre elles.

Différents cocoapodes et différentes versions de projets peuvent également coexister.

Vous souhaitez avoir une version de cocoapod différente de celle de votre projet, vous devez alors apporter les modifications suivantes à la fin de votre fichier pod:

post_install do |installer|
    print "Setting the default Swift_VERSION to 4.2\n"
    installer.pods_project.build_configurations.each do |config|
        config.build_settings['Swift_VERSION'] = '4.2'
    end

    installer.pods_project.targets.each do |target|
        if ['SomeTarget-iOS', 'SomeTarget-watchOS'].include? "#{target}"
            print "Setting #{target}'s Swift_VERSION to 3.0\n"
            target.build_configurations.each do |config|
                config.build_settings['Swift_VERSION'] = '3.0'
            end
        else
            print "Setting #{target}'s Swift_VERSION to Undefined (Xcode will automatically resolve)\n"
            target.build_configurations.each do |config|
                config.build_settings.delete('Swift_VERSION')
            end
        end
    end
end

Parfois, même après avoir exécuté pod update, votre xcode met à jour de force la version du projet de votre cocoapod, sélectionnez dans ce cas le projet cocoapod pod et modifiez la version Swift dans les paramètres de construction.

4
Shubham Mishra

J'avais le même problème - (J'ai installé le module dont la version Swift était 3x et la version Swift de mon projet était la version Swift 4. J'ai eu tellement d'erreurs de compilation. Plus tard, j'ai changé le Swift version 4 à 3.2 et essayé de construire le projet, encore une fois, j'ai eu des erreurs de compilation, ce qui est dû au fait que je lance l'installation du pod alors que mon projet était dans Swift 4.)

  • Vous devez d’abord changer la "version linguistique Swift" des paramètres de construction.
  • Si vous avez installé un pod, la modification de "Version du langage Swift" ne vous aidera pas. Vous devrez peut-être exécuter l'installation du pod pour le projet.
3
Jeni Khant

Xcode 9 nécessite que le framework soit construit avec Swift 3.2 ou supérieur. Allez à https://github.com/emaloney/CleanroomLogger et cliquez sur Download Zip. Ouvrez le xcodeproj dans Xcode 9. Appuyez sur ⌘B. CleanroomLogger.framework passe du rouge au noir. Faites glisser le cadre dans votre projet. Voir la question connexe: Problème de domaine avec Swift 3.1

build it

2
Chris Woolfe