2017-10-19 7 views
0

Quelque temps après la mise à niveau vers Xcode 9, j'ai découvert que je ne pouvais plus créer un projet basé sur Kitura avec l'instantané Swift 3.1.1 (que j'ai installé via swiftenv).Erreur de compilation Swift 3.1.1: clé inconnue 'SwiftImportAsNonGeneric'

Quand je courais swift build, un peu de temps dans la construction je recevrais:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes:8:28: error: unknown key 'SwiftImportAsNonGeneric' 
    SwiftImportAsNonGeneric: true 
         ^
<unknown>:0: error: could not build Objective-C module 'Foundation' 

Il semble qu'il y ait une dépendance entre Swift et Xcode, et Xcode 9 n'est plus compatible avec Swift 3.1.1 (ou plus tôt) instantanés. Je crois que c'est peut-être parce que mon projet utilise Foundation, et Foundation sur Mac est fourni avec Xcode, alors que Linux fait partie de l'instantané Swift (via swift-corelibs-foundation).

Répondre

0

Je n'ai trouvé une solution à ce problème: (. Par exemple dans /Applications/Xcode8.3.3.app) Si je garde une copie de Xcode 8.3.3 autour alors je peux utiliser sudo xcode-select -s /Applications/Xcode<version>.app/Contents/Developer pour sélectionner celui qui convient avant la construction avec SPM, et je peut alors construire les deux projets Swift 3.1.1 et 4.0 sur le même système.

Cependant, cela semble un peu maladroit. Chaque fois que je construis un projet avec l'autre version de Swift, je dois m'assurer que je cours xcode-select, sinon la construction échouera. Avoir plusieurs versions de Xcode est la bonne solution dans ce cas, ou est-ce que je manque un tour avec Xcode 9?