Problema de Xcode 8 Beta 3 Use Legacy Swift

201

Tengo un proyecto Objective-C en Xcode 8 Beta 3. Desde la actualización, cada vez que intento compilar recibo el siguiente error:

Se requiere que "Usar la versión de lenguaje Swift heredado" (SWIFT_VERSION) esté configurado correctamente para los objetivos que usan Swift. Use el menú [Editar> Convertir> A sintaxis Swift actual ...] para elegir una versión Swift o use el editor de configuración de compilación para configurar la configuración de compilación directamente.

¿Alguien ha encontrado esto? Dado que es un proyecto Objective-C, no hay configuración de compilación para configurar Swift. También me he asegurado de que ninguna de las dependencias del proyecto o CocoaPods estén usando Swift. La única solución que tengo es usar Beta 2. ¿Alguna idea de cómo podría solucionar este problema?

También debo mencionar que estoy ejecutando OSX 10.12 Beta 2.

Bryan
fuente
También estoy teniendo este problema ...
rockdaswift

Respuestas:

364

Si está utilizando CocoaPods y desea que se repare automáticamente cada vez que está haciendo un pod install, entonces puede agregar estas líneas al final de su Podfile:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.0'
        end
    end
end

EDITAR: Este problema ahora se soluciona si usa CocoaPods v1.1.1 o posterior. No olvide eliminar la ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESconfiguración de los objetivos principales de su proyecto.

Tulleb
fuente
24
Si está intentando usar 2.3 en su base de código por el momento, ¡use en 2.3lugar de 3.0 Gran solución! Esto efectivamente hace el "Use Legacy Swift Language Version"to No (o si lo cambia a 2.3él Yes). ¡Sin embargo, el beneficio de esta opción es que cada vez pod installque configura esa configuración automáticamente! Increíble. Veo que también SWIFT_VERSIONse establece en proyectos Obj-C . ¿Asumo que no hay ningún efecto adverso?
Herbal7ea
8
Esto es genial, pero es bastante inquietante que sin un experto de Ruby en StackOverflow, miles y millones de proyectos son SOL. Cambié manualmente la configuración de Xcode SWIFT_VERSION a 2.3 en cada módulo y en el proyecto Pod, usando Build Settings, y no funcionó, pero esto sí. Significado oculto magia perturbadora. Odio eso.
BaseZen
55
Literalmente me
conecté
1
Tengo un proyecto Obj-C con Gráficos (en Swift), AfNetworking y algunos otros pods Obj-C. Usé el script anterior en mi archivo pod. Todos los errores / advertencias relacionados con swift se han ido, pero ahora mi proyecto no puede encontrar el marco de AFNetwoking.
ibnetariq
1
@ Mr.Bista La solución aprobada stackoverflow.com/a/38597681/2854405 hace que funcione desde la configuración de Xcode. Pero es posible que tenga que hacerlo con cada repositorio de Pod que tenga cada vez que esté haciendo un pod install / update. Esta solución agiliza las cosas. También puede actualizar su versión de Cocoapods ahora: también debería solucionar este problema.
Tulleb
119

Acabo de encontrar una manera de arreglarlo.

Vaya a la configuración de compilación del proyecto o biblioteca y establezca el atributo Versión del compilador Swift "Usar versión de lenguaje Swift heredado" de No especificado a Sí o NO.

ingrese la descripción de la imagen aquí

rockdaswift
fuente
13
No veo esta opción en mi proyecto Objective-C
Bryan
¿Tiene alguna biblioteca de proyectos Swift en su proyecto Obj-C?
rockdaswift
2
Si está utilizando swift y cocoapods, el comando anterior en cocoapods efectivamente hace esto. Si no quiere tener que cambiar esto cada vez que pod installle recomiendo usar la respuesta de @Tulleb arriba.
Herbal7ea
Ahora mi error es el error del compilador Swift en una clase propia
Eduardo Oliveros
1
Esta opción ya no está disponible.
Hemang
33

He estado ignorando este problema durante un tiempo y, mientras tanto, solo estaba trabajando en otras cosas, finalmente encontré la solución a mi problema.

Como mi proyecto es Objective-C, pensé que tal vez uno de los Pods que estoy usando estaba usando Swift, verifiqué cada Pod y ninguno de ellos lo estaba.

La solución final fue que mi modelo de Core Data estaba configurado para generar código en Swift a pesar de que los he generado manualmente en el menú Archivo> Nuevo> NSManagedObjectSubclass. Todo lo que tenía que hacer era cambiarlo a Objective-C.

captura de pantalla

Bryan
fuente
1
¿Cómo encontraste esto? Xcode no dice nada sobre esto. Me salvaste.
Ryan
2
De hecho, mi solución y mi salvador. ¡Gracias! Estúpido cómo Apple hace que los modelos Coredata 'Swifty' automáticamente cuando toda la aplicación es objetiva-c ....
Bob de Graaf
18

Este problema también es visible en Xcode-8.1. Cuando agregamos un nuevo Target como Extension o Widget y la biblioteca de terceros se integra en un nuevo target con la ayuda de cocopods. Después de la instalación de Pod . Podemos enfrentar el mismo error que el anterior.

Cambie la versión Use Legacy Swift Language en cada configuración de compilación de la biblioteca a

No se .

ingrese la descripción de la imagen aquí

Shrawan
fuente
En mi caso, configurar Usar versión de lenguaje Swift heredado en Sí resolvió el problema.
Jayprakash Dubey
Asegúrese de que para cada lib que tenga este problema, establezca Sí o No ... en mi caso No funcionó
hanzolo
Esto funcionó para mí. Asegúrese de hacer lo mismo para el objetivo de prueba también
zizutg
@zizutg: - Tenemos que verificar todos los objetivos. Gracias por señalar de nuevo.
Shrawan
9

Si está utilizando Xcode 8 o posterior

  1. Ir a la configuración de compilación
  2. Encuentra el uso de la versión de lenguaje rápido heredado
  3. Sí, Swift 2.3
  4. No - Swift 3.0 ingrese la descripción de la imagen aquí
Mohammad Kamran Usmani
fuente
5

Agregue el siguiente código al final del podfile.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.0'
    end
  end
end
Sunil Aruru
fuente
4

Estoy trabajando en un proyecto que tiene código mixto objetivo-c y swift. Anteriormente utilicé la versión 2.3 de swift y después de actualizar a swift 3 no pude construir el proyecto. Xcode se quejó con el mensaje de error mencionado.

Aparentemente, todavía había alguna versión obsoleta de Swift especificada en mi archivo project.pbxproj. Hubo swift 3.0.1 especificado:

SWIFT_VERSION = 3.0.1;

Mientras que ya tenía 3.0.2 instalado:

$ xcrun swift -version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

Entonces, lo arreglé cambiando la versión de Swift en el archivo project-pbxproj a:

SWIFT_VERSION = 3.0;

Parece que el especificador de versión de nivel de parche era demasiado específico.

leviatán
fuente
4

En mi caso, acabo de hacer lo siguiente

Elija el destino del proyecto => Ir a la configuración de compilación => Busque “Versión de idioma Swift” => proporcione a Value la versión Swift actual

Eso es todo. Ha solucionado mi problema.

Sigue esta imagen

khusboo suhasini
fuente
4

Tengo el mismo error. Intenté buscar "Usar versión de lenguaje Swift heredado", pero no lo encontré. Estoy usando Xcode 8.3.3 Después de navegar demasiado y trabajar, encontré esta solución, y esto funcionó para mí.ingrese la descripción de la imagen aquí

Here are the steps.
1=> select your target from Xcode
2=> go to build setting
3=> search for "Swift Language Version"
4=> change it to swift 3. (or accordingly.)
Aklesh Rathaur
fuente
3

establezca "Usar versión de lenguaje Swift heredado" en "SÍ" si usa una versión anterior de swift en su proyecto o cualquier tercero de swift. "No" si su proyecto se actualiza a la versión rápida actual. Si no configura su versión rápida, después de cada actualización e instalación, el marco de trabajo de pod debe especificar esto.

Mohammad Arifuzzaman
fuente
2

De hecho, tuve que hacer una búsqueda de "Legacy Swift" para poder cambiarlo de no especificado a "Sí". Cuando simplemente me desplacé a la sección descrita anteriormente, no pude cambiarlo. Espero que esto ayude a alguien.

Hombre Montaña
fuente
2

Mi proyecto está escrito en Swift. Tengo ese mismo error con fastlane. Lo que sucedió fue que mi Xcode se actualizó automáticamente, así que tuve que actualizar mi proyecto a Swift 3.0. Tengo un montón de errores. La reparación y la depuración llevaban demasiado tiempo y no valía la pena en ese momento, así que decidí instalar una versión anterior de Xcode. Revertí mi código a 2.3. Entonces fastlane betaya no funcionaba. Resulta que necesitaba configurar la herramienta de línea de comandos en 7.3. ingrese la descripción de la imagen aquí

yoninja
fuente
1

Estaba teniendo este mismo problema y lo resolví haciendo lo siguiente:

En Proyecto> Configuración de compilación:

Always Embed Swift Standard Libraries = $(inherited) Use Legacy Swift Language Version = YES

Luego en mi Podfile:

config.build_settings['SWIFT_VERSION'] = '3.0'

El uso de estas tres configuraciones eliminó todas las advertencias y me permitió compilar correctamente.

Lo más oscuro y lo que realmente progresó en la compilación fue cambiar SWIFT_VERSION en el Podfile de 3 a 3.0 como se sugiere aquí .

Héctor Partidas
fuente
1

A partir de XCode 8, puede usar swift 2.3 a pesar de que XCode 8 usa swift 3.x como versión predeterminada de swift. Para usar swift 2.3, simplemente active la opción Usar versión de lenguaje antiguo de Swift a SÍ desde la configuración de compilación, luego XCode usará Swift 2.3 para ese objetivo de proyecto.

arunjos007
fuente
1

Antes de probar soluciones complicadas, aquí hay una comprobación básica que debe hacer si es nuevo en Cocoapods y tiene este problema.

Es posible que deba:

  • Abre tu Podfile nuevamente
  • Verifique que la línea para la plataforma no esté comentada con un '#'. Finalmente debería verse como algo así:

platform :ios, '10.1' # Put the right version and no #platform here use_frameworks! # For swift pod "MyPod" # Your mean pod :)

  • Guarde su Podfile, cierre Xcode y pod installvuelva a ejecutar
  • Abra su proyecto.xcworkspace

Quizás es solo eso.

Si no, puedes ir arriba ;-)

Diphaze
fuente
1

Tuve este mismo problema después de actualizar a xcode 8.3.2 pero la opción "Usar lenguaje rápido heredado" desapareció. Esta parece ser la opción para cambiar ahora: Swift Lang Version

Usé esta solución con Alamofire y otras bibliotecas y todo funciona bien.

Jorge Irún
fuente
1

Vaya a Configuración de compilación del proyecto para el proyecto y Target haga debajo de dos.

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

Cambiar a la última Swift 3.

Error resuelto

Si se solucionó su corrección de error, por favor dale me gusta.

Kiran
fuente
1

En Xcode 9 beta. Vaya a Configuración del proyecto, Configuración de compilación, busque la Versión de idioma Swift. En Xcode 9 debe especificar si está utilizando Swift 3.2 o Swift 4.

Niall Kehoe
fuente
Tuve un proyecto en 9.0b donde configurar tanto el proyecto como el objetivo en Swift 4 continuó produciendo el error, configurar ambos en Swift 3.2 lo eliminó y configurar ambos nuevamente en Swift 4 ahora está bien, por lo que uno puede hacer todo bien y Todavía recibo un error.
green_knight
1

Si cambia ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESpara que NOtodavía no funcione, es porque el problema de xcode no es su problema. Haciendo los siguientes pasos:

1.Cambie la ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESpropiedad para estar YESen el objetivo de advertencia

2.A continuación, aparecerá una advertencia en la barra izquierda que recomienda cambiar a Swift 3.0

3. Luego cambie de nuevo a NO. Reconstruya el proyecto, ¡el xcode finalmente detectará su cambio NO!

¡Problema resuelto en este caso!

Wangdu Lin
fuente