Versión de lenguaje Swift de Xcode 9 (SWIFT_VERSION)

115

Recientemente actualicé xcode a la versión 9. Antes de eso, en Xcode 8.x, cada vez que lo hago pod update, me muestra un código de actualización para convertir el código a Swift 3 y, al hacerlo, resuelve los errores. Pero ahora me está dando este error:

La configuración de compilación "Swift Language Version" (SWIFT_VERSION) debe establecerse en un valor admitido para los objetivos que usan Swift. Esta configuración se puede establecer en el editor de configuraciones de compilación.

Para este error, lo intenté Build Settings > Swift Language Versiony fue Swift 3.2 Pero como la llamada de actualización ha reinstalado algunos de los pods como Alamofire y dice que instale Xcode 8.x para convertir el código a Swift 3, entonces necesito instalar un versión adicional con el último Xcode? Si es así, ¿cómo puedo instalar Xcode 8 con Xcode 9?

Chaudhry Talha
fuente
intente limpiar los datos derivados y compile el proyecto en Xcode 9.
iAviator
¿Cuál es tu versión rápida en Xcode 8?
santhoshkumar
fue 8.3.3, creo. fue el último antes de xcode 9.
Chaudhry Talha

Respuestas:

181

Respuesta a su pregunta:
puede descargar Xcode 8.x desde el Portal de descarga de Apple o Descargar Xcode 8.3.3 (o ver: Dónde descargar la versión anterior de Xcode ), si tiene una cuenta de desarrollador premium (id de Apple). Puede instalar y trabajar con Xcode 9 y Xcode 8.x en un sistema único (mac). (Asegúrese de ser Command Line Toolscompatible con ambas versiones de Xcode, para trabajar con el terminal (consulte: Cómo instalar la 'Herramienta de línea de comandos' )


Sugerencia: Cómo migrar su código Versiones Swift compatibles con Xcode 9 (Swift 3.2 o 4)
Xcode 9 permite la conversión / migración de Swift 3.0aSwift 3.2/4.0 solamente. Entonces, si la versión actual del idioma Swift de su proyecto es inferior a 3.0, debe migrar su código en la versión compatible con Swift 3 usando Xcode 8.x.

Este es un mensaje de error común que muestra Xcode 9 si identifica el lenguaje Swift por debajo de 3.0 durante la migración.

ingrese la descripción de la imagen aquí


Swift 3.2 es compatible con Xcode 9 y Xcode 8 tanto.

Proyecto ► (Seleccione el objetivo de su proyecto) ► Configuración de compilación ► (Escriba 'swift' en la barra de búsqueda) Swift Compiler Language ► Swift Language Version ► Haga clic en la lista de idiomas para abrirla.

ingrese la descripción de la imagen aquí



Convierta su código fuente de Swift 2.0 a 3.2 usando Xcode 8 y luego continúe con Xcode 9 (Swift 3.2 o 4).


Para facilitar la migración de su código, siga estos pasos: (le ayudará a convertir a la última versión de swift compatible con su herramienta Xcode)

Xcode: Menús: Editar ▶ Encubierto ▶ A la sintaxis Swift actual

ingrese la descripción de la imagen aquí

Krunal
fuente
9
Si ha venido aquí porque recién ahora (diciembre de 2018) está desempolvando algo de código Swift 2, se sentirá decepcionado al saber que Xcode 8 no se ejecuta en Mojave.
Bugloaf
53

Para los proyectos de Objective C creados con Xcode 8 y que ahora se abren en Xcode 9, muestra el mismo error que se menciona en la pregunta.

Para solucionarlo, presione el botón + en Configuración de compilación y seleccione Agregar configuración definida por el usuario como se muestra en la imagen a continuación

entorno de construcción

Luego, en la nueva fila creada, agregue SWIFT_VERSIONcomo clave y 3.2como valor como se muestra a continuación.

ingrese la descripción de la imagen aquí

Corregirá el error de los proyectos del objetivo c.

R. Mohan
fuente
2
Eso me ayudó. Gracias.
Andreas Kraft
9
Si tiene este problema con CocoaPods, es posible que deba agregar esta configuración de compilación a la sección pods.xcodeproject.
Stewart Macdonald
1
Esto funcionó para mí, también tuve que modificar 'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES' en la configuración de compilación a '$ (heredado)'
F-1
1
Gracias de nuevo 2 meses más tarde
Ene
1
Aprecia la solución.
user366584
4

Recibí esto después de crear un nuevo proyecto de Objective-C en Xcode 10, después de agregar un archivo de modelo de Core Data al proyecto.

Encontré dos formas de solucionar esto:

  1. La forma fácil: abra el Inspector de archivos del modelo de datos básicos ( - 1) y cambie el idioma de Swift a Objective-C

Cambiar el idioma del modelo de datos básicos

  1. Método más largo y peligroso

El modelo contiene un archivo de "contenido" con esta línea:

<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14460.32" systemVersion="17G5019" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">

En hay una sourceLanguage="Swift"entrada. Cámbielo a sourceLanguage="Objective-C"y el error desaparecerá.

Para encontrar el archivo "contenido", haga clic derecho en .xcdatamodelden Xcode y haga "Mostrar en Finder". Haga clic con el botón derecho en el archivo (Finder) real y seleccione "Mostrar contenido del paquete"

Además: cambiar el idioma del modelo evitará que Xcode genere archivos de subclase de objetos administrados en Swift.

rey nevan
fuente
1

Esto puede suceder cuando agregó Core Data a un proyecto existente.
Compruebe el archivo :
<Nombre> / <Nombre> .xcdatamodeld / <Nombre> .xcdatamodel / contenido
.
Este archivo contiene una entrada "sourceLanguage" que (de forma predeterminada) podría haberse configurado como "Swift". Cámbielo a "Objective-C".

demonio digital
fuente
0

Simplemente hago clic en el último botón de conversión rápida y configuro la configuración de compilación de destino de la aplicación-> Versión de idioma Swift: swift 4.0,

Espero que esto ayude.

Atal Singh
fuente
0

Esta solución funciona cuando nada más funciona:

Pasé más de una semana para convertir todo el proyecto y encontré una solución a continuación:

Primero, desintegre la dependencia de los cocopods del proyecto y luego comience a convertir el proyecto a la última versión rápida.

Vaya al Directorio de proyectos en la Terminal y escriba:

pod deintegrate

Esto desintegrará los cocopods del proyecto y no quedarán rastros de CocoaPods en el proyecto. Pero al mismo tiempo, no eliminará el xcworkspace ni los podfiles. Está bien si están presentes.

Ahora tienes que abrir xcodeproj (no xcworkspace) y obtendrás muchos errores porque has llamado a los métodos de dependencia de cocoapods en tus proyectos principales.

Entonces, para eliminar esos errores, tiene dos opciones:

  1. Comente todo el código que ha utilizado de la biblioteca cocoapods.
  2. Cree una clase contenedora que tenga métodos ficticios similares a la biblioteca cocopods y luego llámela.

Una vez que se eliminan todos los errores, puede convertir el código a la última versión rápida.

A veces, si obtiene errores extraños, intente limpiar los datos derivados y vuelva a intentarlo.

Shubham Mishra
fuente
0

tal vez necesite descargar toolchain. Este error ocurre cuando no tiene la versión correcta del compilador rápido.

dalmate
fuente
-3

En mi caso, todas las advertencias desaparecieron después de que cambié directamente la versión rápida de 2.xa 4.0 en la configuración de compilación, excepto dos advertencias.

Estos advertencia relacionada con myprojectnameTestsy myprojectnameUITestscarpeta. No me di cuenta y pensé que estaba relacionado con la inmigración directa de Xcode 7 a Xcode 9 y pensé que no podría resolver este problema y que debería instalar la versión perdida de Xcode 8.

En mi caso, eliminé estas carpetas y todas las advertencias desaparecieron, pero puedes volver a crear esta carpeta y contiene usando esto:

file > new > target > (uitest or unittest extensions)

y use este artículo para crear casos de prueba: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html

iman kazemayni
fuente
y que alguien me diga cual es mi error?
iman kazemayni
2
Personalmente, no rechazaría esto, no hay nada de malo en su respuesta, pero el mejor lugar será para comentar la pregunta del OP. También puede echar un vistazo a stackoverflow.com/help/how-to-answer, que le ayudará a encontrar la forma correcta de responder preguntas.
grassyburrito