Issue 7 28 Jan 2016 Esta semana nos trajo Xcode 7.3 beta2 la primera versión oficial de Xcode que agrupa Swift 2.2 e incluye contribuciones de la comunidad de código abierto de Swift. org Nunca pensé que vería notas de lanzamiento como esta. Realmente es increíble ver los cambios impulsados por la comunidad en las secciones Whats New con enlaces a GitHub. Claramente, el siguiente gran paso para Apple debe ser de código abierto Xcode. Repositorios Ha notado el nuevo depósito de pruebas de integración rápida en GitHub De acuerdo con la historia parece que este repo ha existido desde el anuncio inicial de código abierto, pero hasta ahora ha sido privado. Como puede suponerse, incluye pruebas. Más específicamente, las pruebas automatizadas para validar las instantáneas Swift generadas se comportan correctamente. Pero espera, theres más Otro nuevo repositorio apareció durante la semana pasada, rápido-interno. Contiene este sitio. De acuerdo con la página de bienvenida, el sitio hospeda la documentación interna para el compilador Swift y la biblioteca estándar, así como la versión de desarrollo de las Guías de API de Swift. . Por desgracia, sólo contiene las directrices de la API en este momento. La documentación para el compilador Swift suena como si fuera ideal para los colaboradores. Además, esto significa que Nate Cook puede apagar SwiftDoc. org. Comienza y solicita peticiones Doug Gregor comenzó y terminó la implementación de la propuesta SE-0021. Nombrar funciones con etiquetas de argumento. Doug Gregor también implementó SE-0022. Referencia al selector Objective-C de un método. (Sí, se aceptó.) No más stringly-typed Objetivo-C selectores Disfruté de la experiencia de Twitter en vivo. Puede comprobar los compromisos aquí: dccf315. 7c0e087. 89834f8. F7407f6. Greg Titus mejoró la calidad de los mensajes de diagnóstico, y ha estado generalmente en un rollo con las solicitudes de tracción. Brian Gesiak presentó una solicitud de extracción que implementa la API de pruebas asíncronas en corelibs-xctest. Refleja la API de Objective-C XCTest, añadiendo los métodos conocidos expecttationWithDescription () y waitForExpectationsWithTimeout (). Nate Cook agregó un tipo de mezcla en el lugar a la biblioteca estándar. De la descripción: Este algoritmo de clasificación es estable y ofrece un aumento significativo de la velocidad (1.5x-10x o más) en muchos escenarios de clasificación comunes. William Dillon agregó soporte para ARMv6 (original Raspberry Pi) y arregló algunos bugs ARMv7. Brian Croom presentó una solicitud de extracción a corelibs-xctest para discutir la compatibilidad entre Darwin XCTest y corelibs-xctest. Proposiciones Erica Sadun ha propuesto Eliminar Swifts Screaming Snake Case Identifiers y por lo tanto decir adiós a otro vestigio de C. gtThis propuesta tiene como objetivo eliminar Swifts screaming snake caso como FILE y FUNCTION y la sustitución de instancias con un común octothorpe prefijo camello inferior Case sourceLocalización de la representación. La propuesta SE-0013. Eliminar la aplicación parcial de los métodos no finales Super. Ha sido rechazado . Se están examinando las tres propuestas siguientes. Estas propuestas están relacionadas y por lo tanto los exámenes se llevan a cabo simultáneamente: SE-0023. Directrices de diseño API SE-0006. Aplicar las directrices de la API a la Biblioteca Estándar SE-0005. Mejor traducción de APIs de Objective-C en listas de correo Swift Nicole Jacque señala que hay un nuevo formato de nomenclatura de instantánea. A partir de ahora, las instantáneas de la versión de desarrollo comenzarán con swift-DEVELOPMENT-SNAPSHOT para distinguir claramente entre instantáneas de liberación. Dmitri Gribenko investigó y redujo considerablemente el tiempo de construcción de StdlibUnittest. StdlibUnittest es una biblioteca interna que se utiliza para escribir pruebas para stdlib, partes del tiempo de ejecución y el compilador. GtBut hay un problema: hoy, StdlibUnittest toma mucho tiempo para construir. Gt gt Estas mediciones de tiempo muestran que el tiempo de construcción del módulo combinado es mayor que la suma de los tiempos de construcción de las piezas, y mucho más cuando se activa la optimización. Podemos hacer una conjetura de que el optimizador no está escalando bien con el tamaño del módulo. Por último Y, finalmente, si usted se siente como Swift está cambiando demasiado rápido o si usted está simplemente interesado en probar algo nuevo, puedo sugerir TrumpScript. Vamos a hacer una gran programación de nuevo. SDK 2.2, iOS 9, Xcode 7 8211 Aventuras en el aprendizaje Bueno, it8217s ha sido de tres años y medio, pero I8217ve finalmente llegó a un punto de escribir una aplicación de iOS. No aguantaría el aliento para obtener una copia, aunque sólo para mi uso privado, para ayudar en el monitoreo y administración del proyecto IES. Después de hacer suficientes tutoriales y ejercicios similares para estar cómodo en la construcción de la aplicación y la interfaz de usuario, me dieron a tratar de llamadas a la infraestructura AWS. Esto resultó un poco más difícil de lo que esperaba, por lo tanto, este ayudante-mmoire. Este isn8217t va a ser útil para los desarrolladores no iOS, y dudo que it8217s va a tener algo nuevo para el desarrollador de iOS más experimentado sólo iOS noobs como yo necesita molestar. Configuración de las bibliotecas Obtenga el SDK. En primer lugar, necesitaba obtener un AWS SDK para iOS. Simplemente sencillo 8211 simplemente lo descargo como se indica en su sitio. Trate de usar el SDK En segundo lugar, he creado una nueva aplicación en blanco de iOS de una sola página para usarla como código de punta. Mi objetivo con esta aplicación es simplemente aprender a integrar el enlace SDS de AWS en la biblioteca y hacer una llamada. Para este pico, no tengo que hacer nada de lujo lista de las regiones AWS es un buen comienzo 1. Pero antes de hacer nada de eso, tengo que ser capaz de crear credenciales 2. Con este fin, abrí el ViewController. swift generado automáticamente. Definir constantes para el acceso AWS y claves secretas y, a continuación, intentar crear mis credenciales. No es sorprendente que esto no funcionara en este momento, he añadido el AWS SDK a mi proyecto. Este proceso resultó ser lo suficientemente molesto como para hacerme perder a Maven. Enlace en la biblioteca (aka 8216Fix los errores del compilador8217) La página SDK de AWS para iOS incluye instrucciones para hacerlo. Pero están desfasados y no trabajan para mí. La forma preferida 8211 de usar CocoaPods 8211 didn8217t trabajo para mí couldn8217t instalarlo. Así que dejó el camino manual. Pero Xcode 7 cambió su configuración lo suficiente como para que no pudiera seguir las instrucciones. Aquí lo que funcionó para mí. Adición de los frameworks 8211 He seleccionado el archivo de proyecto en el navegador de proyecto, lo que me permitió editar la configuración de generación de proyectos y objetivos. Al seleccionar el destino para la aplicación principal, pude seleccionar la página 8216Build Phases8217. Esto incluyó una sección 8220Link binario con bibliotecas8221. A continuación, arrastrar y soltar los marcos AWS en esa sección (todo lo que necesito ahora son los marcos AWSCore y AWSEC2). A continuación, agregó las otras bibliotecas mencionadas en la documentación AWS 8211 libsqlite3.tbd. Libz. tbd y el marco de configuración del sistema. Al parecer, tbd es el nuevo formato de biblioteca dinámica. Tratar de construir todavía da como resultado errores, aunque 8211 Xcode can8217t encuentra los frameworks AWSCore y AWSEC2. Para solucionar esto, necesito cambiar la ruta del enlace. Para ello, seleccioné de nuevo el archivo de proyecto, esta vez seleccionando el proyecto en sí y accediendo a la página 8216Build Settings8217 del proyecto. En esa página, hay un grupo llamado 8220Search Paths8221. Allí, hay una sección 8220Framework Search Paths8221 He añadido el AWS SDK que he descargado aquí. El edificio vuelve a borrar el error 8211 del vinculador, pero Xcode todavía no sabe acerca de las clases AWS. Swift código isn8217t como Java 8211 there8217s no hay ninguna ruta de clases que hace que las clases estén disponibles. Tampoco es exactamente como C o Objective-C, donde se importan los encabezados en cada archivo. Para incluir frameworks basados en Objective-C (como este) en mi proyecto basado en Swift, necesito crear un encabezado de puente. Me tomó un par de intentos conseguir esto abajo 8211 la manera fácil es simplemente agregar un archivo del objetivo C al proyecto (usted puede suprimirlo más adelante) Xcode entonces le pide que agregue el encabezamiento que puentea automáticamente. Una vez que se creó el encabezado de puente, podría importar las bibliotecas necesarias: Comprobación de las credenciales En este punto, podría construir y ejecutar el proyecto en el simulador de iOS. Mente usted, doesn8217t hace exactamente cualquier cosa yet8230 así que el paso siguiente es conseguirlo para hacer la petición de las regiones de la descripción. El código de ejemplo proporcionado con el SDK de AWS no incluye ejemplos de EC2, pero no era fácil determinar qué debería ser el código. Termina algo como esto: A continuación, construir y ejecutar el proyecto, y todo sólo funciona, la derecha me gustaría. Nada es simple. El método viewDidLoad se llama, naturalmente, justo después de que la vista principal de esta aplicación de punta se cargue en el simulador de iOS. Las instrucciones de impresión van a la consola, visible en el IDE. La solicitud Describe Regions se envía muy bien 8211 pero devuelve un error: 8220El error SSL ha ocurrido y no se puede establecer una conexión segura con el servidor8221 Resulta que, en iOS 9, Apple ha ajustado la capa de seguridad de red 8211 todas las llamadas salientes Ahora vaya a través de una capa de seguridad de transporte de aplicaciones. De forma predeterminada, esto significa que todas las conexiones deben cumplir ciertas condiciones que el servicio Web de AWS no (y probablemente no lo harán pronto). Para solucionar esto, necesitamos agregar una excepción a las reglas de seguridad. Y now8230 funciona Cuando abro la aplicación en el simulador, veo las regiones listadas en la consola. Obviamente, necesito hacer más (tal vez, por ejemplo, mostrarlos en una tabla o en un menú desplegable donde el usuario puede seleccionar su región preferida), pero esto soluciona el problema técnico de hablar con AWS. Entonces, cómo puedo probar este material Una prueba thing8230 más. Eventualmente, I8217ll envolverá la comunicación AWS con una fachada específica de dominio. La mayor parte de mi código, cuando lo pruebo, hablará con una fachada simulada. Pero I8217m que va a necesitar poder probar la fachada verdadera 8211 que significa I8217m que va a necesitar hacer estas llamadas en mi código de prueba. Xcode creó una clase de prueba de unidad de espacio reservado para mí, así que muevo el código AWS allí. Pero cuando voy a construir y ejecutar las pruebas, recibo un montón de errores de vinculador Resulta que la fase de construcción de prueba doesn8217t obtener automáticamente las mismas dependencias que la fase principal 8211 por lo que tengo que repetir la adición de los marcos en la fase de construcción de prueba . Ahora la prueba construye y ejecuta 8211 pero termina antes de que la solicitud de Describe Region regrese. Esto se debe a que el AWS SDK para iOS es asíncrono de forma predeterminada el hilo de prueba doesn8217t esperar la solicitud, por lo que termina antes de tiempo. Afortunadamente, uno de los libros que leí mientras aprendía la programación iOS iOS 8 SDK Development cubrió esto perfectamente: envolverlo En este punto, I8217ve logró obtener código en la aplicación principal para hablar con AWS, así como código en los casos de prueba. Este es el principal punto técnico necesario para mi aplicación de administración de back-office en este momento 8211 la mayor parte de lo que tiene que hacer es hacer llamadas AWS y mostrar los resultados. It8217s principalmente va a hablar con SimpleDB y CloudWatch, los cuales tienen iOS APIs disponibles. Yo también podría usar una API de OpsWork, pero una doesn8217t existe (8211 tal vez I8217ll escribir uno si realmente lo necesito). El otro punto técnico que necesito hacer es cómo tomar las llaves de AWS y ponerlas en KeyChain (quizá con TouchID también) 8211 pero that8217s para otro día. En realidad, I8217d prefiere utilizar una llamada a AWS Identity amp Access Management API (IAM) para recuperar, por ejemplo, el nombre de usuario. Pero IAM es una de las muchas API que haven8217t de Amazonas todavía construyó un envoltorio de iOS para. La Región de Describir hace un buen sustituto, sobre todo porque probablemente querré poder seleccionar la región de una lista en algún momento.1608617 Para lo que intento hacer ahora mismo, el establecimiento de un enfoque fácil pero no recomendado De usar el Proveedor de credenciales estáticas, y hardcoding mis claves AWS que I8217m no se muestra. A mediano plazo, voy a entrar en estos a través de la interfaz de usuario y almacenarlos en el llavero a más largo plazo, incluso podría cambiar a la más difícil, pero recomendó el enfoque de la utilización de AWS Cognito service.1608617 Author: Robert Watkins Mi nombre es Robert Watkins . Soy un desarrollador de software y he estado por más de 18 años ahora. Trabajo actualmente para la gente, pero mis opiniones aquí son de ninguna manera endosadas por ellos (que es fresco sus opiniones arent endosadas por mí cualquiera). Mis principales intereses profesionales están en el desarrollo de Java, utilizando métodos Agile, con un enfoque histórico en la construcción de aplicaciones basadas en web. Im también un Mac-fan y amo a mi iPhone, que Im actualmente aprendiendo a codificar. Vivo y trabajo en Brisbane, Australia, pero crecí en el Territorio del Norte, y todavía encuentro Brisbane demasiado frío (después de 16 años aquí). Estoy casado, con dos hijos y un gato. Mi política es socialista en tendencia, mi afiliación religiosa es ateo (aka ninguna de las anteriores), mi actitud es condescendiente y mi posición moral está acostada. Ver todos los mensajes de Robert Watkins Deja un comentario Cancelar respuestaTesting in Swift Transcripción de video a continuación proporcionada por Realm. Realm Swift es un reemplazo para SQLite Core Los datos escritos para Swift Swift nos prometen lo mejor de los idiomas imperativos y funcionales, pero esto afectará la forma en que probamos nuestras aplicaciones. En esta charla, Jan Riehn comparte su experiencia de las pruebas rápidas del mundo real, incluyendo una aplicación Swift de 15.000 líneas con casi 100 pruebas de cobertura, comenzada sólo dos semanas después de que Swift lanzara. Puede ver las pruebas de ejemplo de Jans en GitHub. Escribiendo su primera prueba (0:00) Creo que la prueba es un arte. Te desafía, y tus habilidades. Requiere imaginación, creatividad, y habilidades técnicas realmente sólidas. Prácticamente, te ayuda a escribir un buen código, y creo que el buen código vive en los detalles. Si nunca ha escrito una prueba antes, es bastante fácil. Usted crea una prueba usando Xcode, y allí va Su primera prueba. Para realizar pruebas en Swift, tendrá que importar XCTest. Marco de pruebas de manzanas. Su prueba tendrá que heredar de XCTestCase. Entonces usted hace algunas inicializar para setUp y tearDown. Crear sus burlas, y configurar su prueba: Aquí, tenemos allí un testExample muy, muy simple. Que sólo afirma verdadero. También tiene un mensaje, que puede ayudarle a encontrar un error, especialmente en un entorno automatizado. También puede realizar pruebas de rendimiento Xcode proporciona un cierre, que se puede ver en el measureBlock. Cuenta el tiempo entre las ejecuciones. Una prueba de ejemplo (2:41) Ahora puede comenzar a probar en Swift. Digamos que queremos probar una simple llamada HTTP, tal vez un HTTP GET para swiftsummit. Para esto, utilizo NSURLSession. Puede ver que tenemos datos, una respuesta y un error, y que lo procesamos en el cierre. A continuación, empezaría a escribir una prueba: Así es como lo envolvería en un caso de prueba. Necesita la URL. Apple ofrece una expectativa, que puede utilizar para esperar tareas asíncronas. En el cierre, almacenamos los datos que recibimos en una variable, que se habrá inicializado como una opción de NSData. Después de eso, theres una línea muy importante de código que es waitForExpectationsWithTimeout. Esto esperará exactamente cinco segundos antes de la prueba, la espera se interrumpirá y fallará. También puede realizar un tratamiento de código de error dentro del controlador. Después de eso, puede afirmar que los datos que ha recibido no son nulos. Así es como usted probaría llamadas asincrónicas. Reflexión (4:18) En el primer día de la Cumbre Rápida, tuvimos muchas discusiones muy interesantes sobre la reflexión. Por qué todo el alboroto En mi opinión, para la prueba que va a necesitar algunas cosas importantes: usted necesitará burlas, stubs, y falsificaciones todas las cosas que usted encuentra en un marco burlón, que se basará en la reflexión. Utiliza marcos burlones porque hace que el entorno de prueba sea muy fácil, muy útil y muy legible. Swift ofrece una reflexión muy básica, que no forma parte de la API pública (así que por favor no uses este es tu código de producción). La parte principal de esta API privada es un método reflejo func reflectltTgt (x: T) - gt MirrorType que devuelve un MirrorType. Ambos se basan en la API estándar. Theres también un protocolo llamado Reflectable: Su muy básico, pero le ayuda a obtener el valor de un objeto durante el tiempo de ejecución. Usted puede iterar sobre todas las propiedades, pero no los métodos, y theres solamente un getter, ningún setter. Más allá de eso, tengo que decir que no hay nada nuevo aquí, excepto lo que hemos olvidado, y estamos redescubriendo. Las pruebas son pruebas. Si lo haces en Swift, si lo haces en Objective-C, si lo haces en JavaScript, si lo haces en Java, necesitas tener un buen conocimiento de ciertas cosas, y necesitas tener un cierto entorno. Con Swift, por el momento todo lo que tenemos es XCTest, y sólo la reflexión muy básica, por lo que tenemos que cuidar de nuestros trozos, burlas y falsificaciones por nosotros mismos. Lecciones aprendidas con producción rápida (6:57) A continuación, quiero compartir las lecciones que he aprendido. En nuestro proyecto, empezamos a usar Swift en producción sólo dos semanas después de su lanzamiento. En junio de 2014 Para un cliente, como de hablar tenemos cerca de 15.000 líneas de código de producción, y la misma cantidad de código de prueba que diría que estamos muy cerca de la cobertura de prueba 100. Cómo se siente? Se siente divertido, muy divertido. También puede ser molesto, pero lo que he aprendido es que si hace pruebas pesadas en Swift, se ven obligados a escribir código limpio, por lo que las molestias valen la pena. Es muy fácil para un principiante comenzar a probar. Swift lo hace realmente fácil, porque puedes empezar a escribir tus burlas en línea en los métodos que estás probando. Eso es bastante nuevo, y hace que sea muy fácil probar algo. Ya tuvimos la oportunidad de usar marcos burlones con Objective-C, con marcos como Mockito, adaptado para Objective-C por OCMockito. Podemos usar esto para Swift también. Este es un ejemplo de algo que podría escribir si desea simular una conexión de servidor. Hay algunas limitaciones: las pruebas tienen que escribirse en Objective-C, y los objetos que desea simular tienen que heredar de NSObject. Las referencias y esto es bastante molesto tienen que implementar un protocolo. Y por desgracia, no soy capaz de stub, esperar, o verificar los métodos de clase. Pero con esta configuración muy simple en sus clases Swift, puede crear burlas como esta. Usted no tiene que escribir sus propios trozos, usted no tiene que escribir sus propias burlas. Este código sólo crea stubs. Dice que quiero un stub, el método busca datos, y debe devolver la cadena stubbed. Haciendo esto, puedo tener un controlador donde simplemente enchufar mi simulacro y llamo al método. El simulacro envuelve mi implementación real, y devuelve lo que esperaba. Escribiendo sus propias burlas y falsificaciones (10:12) Si escribes burlas y falsificaciones por tu cuenta, es importante recordar que la configuración de la prueba es la clave del éxito. Usted debe ser capaz de entender la clase de prueba dentro de unos segundos, no debería tomar más tiempo. Usted tendrá un montón de boilerplate, pero eso es por lo que debe ir para reutilizables se burla. Debe separar las clases de prueba para diferentes casos de uso. Vamos a imaginar que usted tiene un cliente HTTP que es bastante grande, con una clase de prueba para los casos de éxito, y una clase de prueba para los casos de falla, sólo para dividirlo. Una cosa muy importante es que usted tiene que separar lo puro de lo impuro y el estado de la vieja lección sobre la separación de la interfaz de usuario del código de negocio. Ir para controladores de vista delgada. No modifique los estados externos, y no produzca efectos secundarios, porque esto hace que la prueba realmente, realmente difícil. Tiempos de compilación (12:13) La otra gran cosa cuando pruebas con Swift es tiempo de compilación, sobre todo si tienes que construir para Swift 1.1. Incluyendo las pruebas, podemos tener 30.000 líneas de código. Nos toma 60 segundos para compilar, que es muy lento. Y especialmente si usted está usando Test Driven Development. Es una gran manera de hacer tiempo para leer sus correos electrónicos, o ir a dar un paseo. Hay dos cosas que puedo recomendarle. En primer lugar, si es posible, construya con Swift 1.2. Apple añadió la capacidad de compilar con versiones incrementales, lo que le da un enorme aumento de rendimiento. En segundo lugar, no agregue su código de producción como miembro de su objetivo de prueba. Si lo hace, el código de producción se compilará dos veces. Que ocuparía un tercio del tiempo de compilación. Marcos (13:27) Me gustaría mencionar Hamcrest para Swift. Tiene algunas declaraciones realmente, realmente increíbles. Muy fácil de usar, especialmente con opciones. Otra cosa que recomiendo es UIAutomation. Especialmente para pruebas funcionales. Definitivamente probarlo como parte de Xcode. Y para terminar, una predicción para el futuro de la prueba de Swift: la reflexión está llegando. Pronto, vamos a recibir muchas mejoras del compilador, y vamos a ver muchas nuevas herramientas. Muchas gracias Puedes ver las pruebas de ejemplo de Jans en GitHub.
No comments:
Post a Comment