Cómo migrar a XCode 8 sin problemas

Tuve tantos malditos errores con mis cocoapods moviéndose de 2.2 -> 2.3 / Xcode8 que pensé que de alguna manera los había corrompido permanentemente. Había descargado las versiones correctas de cocoapod, había agregado las versiones correctas y el script de 2.3 script ruby ​​Podfile que se compartió en otras respuestas aquí.

FYI mi podfile se ve así:

plataforma: ios, ’10 .0 ‘

use_frameworks!

objetivo ‘Flickr Images’ hacer
pod ‘SwiftyJSON’,: git => ‘https://github.com/SwiftyJSON/SwiftyJSON.git’
fin

post_install hacer | instalador |
installer.pods_project.targets.each do | target |
target.build_configurations.each do | config |
config.build_settings [‘SWIFT_VERSION’] = ‘2.3’
fin
fin
fin

Sin embargo, aún tenía más de 100 errores de compilación en un Cocoapod y no pude encontrar la manera de solucionarlo por HORAS … ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡

Básicamente, parece que cada vez que intenta ajustar la versión del pod o cambiar un pod y luego cuando ejecuta ‘pod install’ nuevamente, la configuración de compilación del proyecto Pod se restablece, por lo que pierde el indicador Use Legacy Swift allí, lo que significa que su los cocoapods se están compilando como si fueran Swift 3 code == muchos errores.

Es posible que deba corregirlo manualmente nuevamente después de cada actualización de pod. Para mí fue el restablecimiento de la configuración “Usar Legacy Swift” de Pods, más de 150–500 errores en mis archivos Pod.

Entonces, el enlace lo explica bien, pero básicamente cada vez que ha cambiado / actualizado / instalado pods, vaya a la configuración de compilación del proyecto Pod (haga clic en el nombre del proyecto cuando esté en la vista de proyecto / plist y hay un menú desplegable y puedes cambiar a Pods). Luego, asegúrese de configurar Usar código heredado en los pods … no solo en su proyecto / objetivo principal.

Aquí hay imágenes para aclarar cómo puede encontrar la configuración de los pods frente a la configuración de construcción de su proyecto principal:

Un par de cosas que debe tener en cuenta al pasar a Xcode 8:

i) Compatibilidad de terceros para Swift3: Almofire, Firebase, swiftJson

ii) Configuración incorporada de Xcode-8

iii) Objetivo de implementación

iv) Nuevo marco de notificaciones

v) OpenURL en desuso para iOS-10

Si está utilizando cocopods: verifique la versión actual y actualice a la última.

// Ejecute las líneas 2 y 3 en la terminal, espere hasta que terminen.
pod –version
sudo gem instalar cocoapods –pre

En tu Podfile:
Asegúrese de que su objetivo sea la versión correcta de iOS

// Agregue las siguientes líneas al final del Podfile y cambie la Versión Swift para que sea ‘3’ o ‘2.3’ según su proyecto. Ayuda a elegir la versión particular de un pod para su dispositivo.

post_install hacer | instalador |
installer.pods_project.targets.each do | target |
target.build_configurations.each do | config |
config.build_settings [‘SWIFT_VERSION’] = ‘2.3’
fin
fin
fin

Como dijo Glyn Williams, Establecer legacy swift Language Version = Yes si desea migrar con swift 2.3. Si alguien quiere crear un nuevo proyecto o migrar a Swift-3.0, configure No.

Swift 2.3 y Swift 3 : [matemáticas] Precaución [/ matemáticas] al tomar la última actualización de cocopods. Piénselo dos veces antes de Pod Update Compruebe la versión en Podfile y actualice

// Por encima de Almofire funciona bien pod ‘Alamofire’, ‘~> 3.4.1’

// Tome la rama adecuada para compatible con Swift-3
pod ‘SwiftyJSON’,: git => ‘ https ://github.com/appsailor/SwiftyJSON.git',: branch =>’ swift3 ‘

// Utilice cuidadosamente la actualización de pod y vuelva a verificar la versión de la biblioteca de terceros y la compatibilidad en github.
** actualización de pod **

La última versión de Almofire-4 es compatible con Deployment Target 10.0 y swift-3.

Habilite las capacidades de Keychain para xcode-8 para el problema de memoria de Firebase.

Configuración para Xcode-8 para detener el inicio de sesión en el simulador.

Por último, pero no menos importante, actualiza el perfil de aprovisionamiento y la firma &

Y

Problema de Xcode 8 Beta 3 Use Legacy Swift

También tengo el mismo problema, desafortunadamente no hay nada que podamos hacer con las bibliotecas de terceros. El desarrollador tiene que actualizar sus bibliotecas para que XCode 8 compile. Incluso si tiene la suerte de corregir esos errores, no se compilará correctamente porque algunos de los métodos han quedado en desuso. Esto empeoró si tienes un puente entre el Objetivo C y Swift. De hecho, tengo que desglosar mis códigos para descubrir qué puedo usar en su lugar.

no debe convertir su código a swift 3 directamente porque hay mucha sintaxis y otros cambios … cambie su código a swift 2.3 en lugar de swift 3, entonces solo habrá cambios menores. Puede seguir esto

Usando Swift 2.3 en Xcode 8

La falla del segmento se produce cuando el compilador está confundido sobre el código … y no puede interpretar parte del archivo … Avíseme si ni siquiera puede encontrar el motivo …

Hasta ahora acabo de actualizar una de mis aplicaciones con Swift3. El migrador se ocupó de la mayoría de las diferencias con Swift2, pero tuve que hacer algunas correcciones manuales.
Eso no fue muy difícil, ya que mis aplicaciones son bastante sencillas.
Los problemas que tuve (mensajes de error), los puse en Google y stackoverflow.com
Eso me dio las pistas que necesitaba.

Acabo de terminar una migración inicial de Swift 2 a Swift 3, la aplicación ahora puede ejecutarse después de corregir manualmente unos 100 errores uno por uno.

Y todavía tengo algunos bloques aquí y allá que están comentados y los migraré más tarde porque quería ver la aplicación que se ejecuta en XCode 8 primero para tener un mejor estado de ánimo 🙂

La migración es mucho más difícil de lo que pensaba originalmente. También debe tener todos los SDK de terceros para admitir Swift 3. Si alguno de ellos no lo tiene, debe descartarlo, reemplazarlo, esperarlo, molestar al proveedor del SDK o debe hacerlo usted mismo.

La mayoría de las modificaciones son menores, pero solo hay muchas. Por ejemplo, modifiqué mucho las solicitudes de recuperación de Core Data y las restricciones de AutoLayout (uso el diseño automático mediante programación). Y algunas modificaciones no son tan sencillas, solo tiene que buscar las respuestas en la red.

Si desea que su código existente funcione, debe asegurarse de que el proyecto esté configurado para usar Swift heredado.

Si no se especifica esta configuración, su proyecto se compilará con Swift 3. Luego verá muchos errores de compilación.

Swift 3 tiene bastantes cambios, y aunque el migrador es útil, no capturará todo.

Algunos proyectos pequeños migran muy bien. Los proyectos más grandes pueden tomar algo de trabajo. Mi proyecto de juego tardó unas horas en migrar.

Hubo cambios en los diccionarios, en la asignación de memoria sin formato utilizando NSData,