Xcode 10.2, macOS Mojave 10.14.4, iOS 12.1 y otras versiones beta



Se han lanzado las nuevas apuestas beta de Xcode, macOS Mojave e iOS, y estos son los puntos principales que aprendí.

Swift 5 para Xcode 10.2 beta


Veloz


En primer lugar, la última versión beta de Xcode viene incluida con la nueva versión de Swift:

Apple Swift 5.0 (swiftlang-1001.0.45.7 clang-1001.0.37.7)
Target: x86_64-apple-darwin18.2.0
ABI version: 0.6


Comencemos con las noticias más emocionantes:
Las aplicaciones Swift ya no incluyen archivos DLL para la biblioteca estándar Swift y la superposición del SDK Swift en versiones para dispositivos iOS 12.2, watchOS 5.2 y tvOS 12.2. Como resultado, las aplicaciones Swift se reducen de tamaño cuando se implementan para probar en TestFlight o al comprimir un archivo para una distribución.
ABI finalmente se estabilizará, y esta es una gran noticia. En mi opinión, hoy este es uno de los problemas clave de Swift, no por los efectos secundarios, sino por las promesas incumplidas. Algunos de mis amigos incluso reescriben extensiones para Apple Watch en Objective-C para reducir el tamaño del archivo binario (de aproximadamente 15 MB a 1 MB). Puede obtener más información sobre el estado de ABI en los enlaces: Panel de control de Swift ABI y Manifiesto de estabilidad de Swift ABI .

El atributo @dynamicCallable le permite llamar a tipos con nombre al igual que funciones con azúcar sintáctico simple. El objetivo principal es garantizar la compatibilidad con lenguajes dinámicos. ( SE-0216 )

Un ejemplo:

 @dynamicCallable struct ToyCallable {   func dynamicallyCall(withArguments: [Int]) {}   func dynamicallyCall(withKeywordArguments: KeyValuePairs<String, Int>) {} } let x = ToyCallable() x(1, 2, 3) // Desugars to `x.dynamicallyCall(withArguments: [1, 2, 3])` x(label: 1, 2) // Desugars to `x.dynamicallyCall(withKeywordArguments: ["label": 1, "": 2]) 

Este tema es bastante extenso, y la innovación me produce sentimientos encontrados. Paul Hudson pudo hablar sobre esto desde una perspectiva neutral en el artículo " What's New in Swift 5.0 ".
El modo de compatibilidad Swift 3 está excluido. Los valores admitidos para el -swift-version son 4, 4.2 y 5.

La era se va: la compatibilidad a nivel de fuente con Swift 3 ya no existe. Se esperaba este paso, se anunció en la Hoja de ruta de Swift 5, y aún. Le recomiendo actualizar su memoria leyendo el Proceso de lanzamiento de Swift 5.0 . Swift 5 está aquí, prepárate.
En el modo Swift 5, las declaraciones de cambio en las enumeraciones declaradas en Objective-C o que provienen de marcos del sistema deben procesar valores desconocidos, es decir, aquellos que se pueden agregar en el futuro o que se pueden definir por separado en el archivo de implementación de Objective-C.

Formalmente, Objective-C le permite incluir cualquier valor en la enumeración si coincide con el tipo base. Estos casos desconocidos pueden ser manejados por el nuevo caso @unknown default @ @unknown default , que aún da una advertencia si se pierden los casos conocidos en el switch. También se pueden controlar utilizando el default habitual. Si especificó una enumeración en Objective-C y no desea que los clientes tengan que procesar valores desconocidos, use la macro NS_CLOSED_ENUM lugar de NS_ENUM . El compilador Swift lo reconoce y no requiere especificar el default en la instrucción de cambio.

En los modos Swift 4 y 4.2, también puedes usar @unknown default . Si esto no se hace y se pierde un valor desconocido en el interruptor, el programa se interrumpirá, tal como sucedió en Swift 4.2 y Xcode 10.1 ( SE-0192 )

Este es un problema de larga data que todavía causa inconvenientes, especialmente si prefiere no configurar default interruptores default en los interruptores. Recuerdo cuánto tormento recibí de la opción .provisional apareció en iOS 12 en el tipo UNAuthorizationOptions . Ahora, con la introducción de un caso unknown , lidiar con tales situaciones se ha vuelto mucho más fácil.

Administrador de paquetes Swift


Ahora los paquetes pueden elegir la versión mínima requerida para la plataforma Apple (macOS, iOS) al usar el archivo de configuración Package.swift de Swift 5. El ensamblaje del paquete no es posible si al menos una de las dependencias tiene una versión mínima de la plataforma mayor que la versión especificada para el paquete en sí. ( SE-0236 )

En mi opinión, esta es la noticia más importante sobre SPM. De hecho, esta característica puede resolver muchos problemas que impiden que SPM se vuelva útil en el mundo de iOS. En mi último artículo, traté de analizar el estado actual de SPM en el contexto del desarrollo de iOS. Parece que ahora tengo que revisar las conclusiones hechas.

Pero hay problemas:

  • algunos proyectos muestran una regresión del tiempo de compilación en comparación con versiones anteriores;
  • proyectos para el bloqueo de la línea de comando al inicio, dyld: Library not loaded error dyld: Library not loaded
    (biblioteca no cargada). Muleta: SWIFT_FORCE_STATIC_LINK_STDLIB=YES compilación de ensamblaje personalizado SWIFT_FORCE_STATIC_LINK_STDLIB=YES .

El registro de cambios enumera una serie de errores corregidos y otra información sobre Swift 5 que puede ser importante para su industria. Compruébelos: puede decidir utilizar inicializadores heredados y designados con un número variable de argumentos. O tal vez se enfrenta a un problema de punto muerto debido a las complejas definiciones de tipo recursivo con clases y genéricos. O los alias genéricos en el método @objc le @objc inconvenientes.

Xcode 10.2 beta


Compilador de Clang


Hay muchas alertas nuevas para el compilador de Clang, y la mayoría de ellas están relacionadas con marcos y módulos. Este hecho es bastante interesante porque ( presumiblemente ) habla sobre la integración de Swift Package Manager como una herramienta de gestión de dependencias. Aquí, en mi opinión, los puntos más importantes:
  • Los nuevos diagnósticos identifican encabezados de marco que usan comillas en lugar de inclusiones de estilo de marco. De manera predeterminada, la notificación está desactivada, pero puede habilitarla pasando la opción de -Wquoted-include-in-framework-header ;
  • los encabezados abiertos del marco pueden ejecutar erróneamente #import o #include encabezados cerrados, lo que conduce a una interrupción estructural y, a veces, a la importación cíclica de módulos. Dichas violaciones serán reportadas por un nuevo diagnóstico. Está deshabilitado por defecto en clang y está controlado por el -Wframework-include-private-from-public ;
  • El uso de @import en los encabezados del framework @import que se usen sin módulos. Los nuevos diagnósticos buscan @import en los encabezados al pasar el indicador —fmodules . Por defecto, está deshabilitado y controlado por el -Watimport-in-framework-header ;
  • Anteriormente, la pérdida de la palabra clave del framework al declarar un módulo para el marco no interfería con la compilación, pero silenciosamente conducía al resultado incorrecto. Nuevos diagnósticos -Wincomplete-framework-module-declaration y una nueva solución le ofrecerá agregar la clave deseada. Esta advertencia se activa automáticamente cuando clang —fmodules indicador —fmodules .


En primer lugar: ¿cómo activarlos? Vaya al menú Configuración de compilación para su proyecto, seleccione el elemento Apple Clang - Banderas personalizadas del compilador y configure la bandera deseada en Otras banderas C.



Intenté construir una aplicación antigua de Objective-C y encontré muchos problemas con los encabezados privados en los encabezados abiertos del marco:



También hubo problemas con las comillas para importar dentro del marco:



Le aconsejo que realice un diagnóstico similar, o al menos tome nota para el futuro. Una vez que estos problemas pueden causar muchos problemas.

Sistema de construcción


También hay una buena actualización del sistema de compilación de código.
La búsqueda de dependencias implícitas ahora funciona en la sección "otros indicadores de enlazador" de marcos y bibliotecas relacionados marcados con -framework, -weak_framework, -reexport_framework, -lazy_framework, -weak-l, -reexport-l, -lazy-l —l.

Esta innovación también es muy intrigante. En esencia, significa que ahora puede definir dependencias implícitas con la .xcconfig o incluso xcodebuild , evitando las etapas Link / Embed en Xcode.

Depuración


Innovaciones de depurador:
UIStackView propiedades de UIStackView ahora se muestran en el inspector del depurador visual. El depurador visual tiene un aspecto tridimensional más compacto.




Ahora, en caso de un error debido a la falta de memoria, Xcode puede crear automáticamente un gráfico de uso de memoria. Puede habilitar la creación de gráficos en la ventana de diagnóstico en la configuración para la ejecución del esquema.

Al acercarse al límite de uso de memoria en iOS y watchOS, Xcode muestra el límite en el informe de uso de memoria.




¿Ves la línea roja? Cuando se alcanza, Watchdog recibirá una applicationDidReceiveMemoryWarning notificaciónDidReceiveMemoryWarning. Pensé que la actualización sería más útil, pero por ahora es solo una pequeña ventaja.

Depurador LLDB


Nuevos bollos aparecieron en LLDB:
  • Ahora puede usar $ 0, $ 1 y otras abreviaturas al evaluar expresiones dentro de cierres.
  • LLDB ahora tiene un nuevo alias v para el comando de variable de cuadro, que se utiliza para mostrar variables en la pila de cuadros actual. Como esto no implica la herramienta para evaluar expresiones, v puede ser mucho más rápido que po o po , y por lo tanto es preferible.


No encontré una mejora en el rendimiento, sin embargo, en algunos casos, v proporciona una mejor salida, pero no es un reemplazo directo para po y solo funciona con la pila de cuadros actual con ciertas limitaciones. Ejemplos:



Parques infantiles


¡Mi sección favorita! Comencemos con los errores:
Es posible que la aplicación Playgrounds no se inicie

Desafortunadamente, no hubo otras noticias sobre Playgrounds en la nueva versión beta.

Simulador


Algunas palabras sobre el simulador:
Siri no funciona en los simuladores watchOS e iOS.

La sincronización de cartón entre macOS y dispositivos iOS simulados se ha vuelto más confiable.


Espero que esto sea cierto.

La solicitud de acceso al micrófono en todos los dispositivos simulados no se repetirá.


Estas son buenas noticias porque muchas personas tuvieron dificultades con CI y los agentes de compilación debido a este problema. Ahora puede construir una muleta, o al menos complementar sus guías para trabajar con agentes de ensamblaje al incluir la opción "Ejecutar el simulador una vez".

Prueba


  • xccov admite combinar varios informes de cobertura de código (y archivos relacionados) en un informe y archivo común. El informe resultante puede contener imprecisiones, porque entre los momentos de creación de informes, pueden ocurrir cambios en los archivos de origen. Si no se han producido cambios, el informe será correcto.
  • xccov ahora refleja la diferencia entre los diversos informes de cobertura de Xcode, que se pueden usar para calcular los cambios de cobertura. Por ejemplo, para resaltar la diferencia entre before.xccovreport y after.xccovreport , llame al comando xccov siguiente manera: xccov diff --json before.xccovreport after.xccovreport .
  • La biblioteca estática y los objetivos del marco ahora aparecen en el informe de cobertura en forma de entradas de nivel superior: se recopilan gráficos de los indicadores de cobertura para todos los objetivos que incluyen una biblioteca o un marco estático. Esto también resuelve el problema cuando los archivos de origen de una biblioteca estática o un objetivo de marco se ingresan en el informe, incluso si el objetivo en sí se elimina de la cobertura del código en el diagrama.


Grandes noticias para la integración continua, especialmente una demostración de la diferencia. Dile a tus ingenieros de lanzamiento o a aquellos que hacen cosas similares.

Sin embargo, existen varias limitaciones con respecto a la paralelización de las pruebas:

  • la grabación en clones no funciona cuando la paralelización está habilitada;
  • La creación de perfiles de proyecto desde Xcode se comporta incorrectamente con la paralelización de prueba habilitada.


El resto está contento con la corrección de algunos errores:
Si la prueba falla debido al bloqueo del corredor de prueba al inicio, Xcode intentará generar un mensaje detallado que describa el error. Puede examinar este error en el registro de prueba, y si usa xcodebuild , también aparecerá en stdout . También está contenido en los registros estructurados del paquete resultante.

A menudo tenemos problemas similares, y estamos perdidos por lo que sucedió. A veces el asunto es el diseño incorrecto, a veces la sobrecarga del sistema. Ahora, la confiabilidad de la aplicación aumentará.
En los informes de fallos recopilados durante las pruebas, ya no se pierden secciones importantes como el motivo del bloqueo o la descripción.

No hay comentarios aquí, pura delicia.
Las últimas noticias, útiles para muchos desarrolladores: Xcode ahora es compatible con el servicio de almacenamiento en caché de contenido macOS . Esto significa que puede crear un servidor de almacenamiento en caché en la red local, lo que ahorrará tiempo y dinero al descargar versiones nuevas y antiguas de Xcode en la red local.

Los problemas


En esta beta, me encontré con varios problemas. Se referían principalmente a herramientas de desarrolladores externos. Por ejemplo, carthage genera el error "No se encontraron simuladores disponibles para iOS".

Revisé el simulador disponible y parece que el error beta es el culpable. Además, la descarga de otros tiempos de ejecución de Xcode no está disponible; la lista de simuladores disponibles está vacía:

 $ xcrun simctl list devices --json | grep -A16 12.1   "com.apple.CoreSimulator.SimRuntime.iOS-12-1" : [     {       "availability" : "(unavailable, runtime profile not found)",       "state" : "Shutdown",       "isAvailable" : false,       "name" : "iPhone 5s",       "udid" : "DDD36346-A76F-42E8-80F4-6F11E1EE4BEB",       "availabilityError" : "runtime profile not found"     },     {       "availability" : "(unavailable, runtime profile not found)",       "state" : "Shutdown",       "isAvailable" : false,       "name" : "iPhone 6",       "udid" : "21794717-BC89-45E4-9F57-8CF9D14A87D1",       "availabilityError" : "runtime profile not found"     }, -- 

Pero esto es solo beta, y la lista de cambios es enorme. Seremos pacientes. Cartago ya está estudiando la situación, todas las conjeturas se describen en este error .

iOS 12.2 beta


Más o menos. Parece que Apple está ocupada puliendo deudas técnicas y aplicando parches de seguridad, así que no hay noticias serias, pero hay dos problemas:
  • existe la posibilidad de que no pueda autenticarse con Wallet después de elegir una tarjeta;
  • existe la posibilidad de que no pueda comprar un plan de tarifa prepaga utilizando la red móvil.


Y Apple News ya está disponible en Canadá.

No cambies.

macOS Mojave 10.14.4 beta


La única actualización aquí es un posible problema con Safari 12.1 después de actualizar desde Safari 10.1.2.
Después de actualizar a Safari 12.1 desde Safari 10.1.2, es posible que las páginas web no se muestren correctamente. (47335741)

Solución alternativa: los defaults delete com.apple.Safari tipo defaults delete com.apple.Safari en el terminal. Tenga en cuenta que con esto, perderá todas las configuraciones anteriores de Safari.

En conclusión


El artículo salió mucho más grande de lo que esperaba. Encontrarás todos mis hallazgos arriba. Y en resumen: ¡Swift 5 ha llegado!

Gracias por su atencion

Source: https://habr.com/ru/post/437814/


All Articles