Maybaygiare.org

Blog Network

Tutorial de CocoaPods para Swift: Introducción

Nota de actualización: Rony Rozen actualizó este tutorial para Xcode 11 y Swift 5. Joshua Greene escribió el original.

CocoaPods es un popular gestor de dependencias para proyectos de cacao Swift y Objective-C. Miles de bibliotecas y millones de aplicaciones lo utilizan, según el sitio web de CocoaPods. Pero, ¿qué es un administrador de dependencias y por qué lo necesita?

Un administrador de dependencias facilita la adición, eliminación, actualización y administración de las dependencias de terceros que utiliza tu aplicación.

Por ejemplo, en lugar de reinventar su propia biblioteca de redes, puede extraer fácilmente Alamofire utilizando un administrador de dependencias. Puede especificar la versión exacta a utilizar o un rango de versiones aceptables.

Esto significa que, incluso si Alamofire recibe una actualización con cambios que no son compatibles con versiones anteriores, tu aplicación puede seguir usando la versión anterior hasta que estés listo para actualizarla.

En este tutorial, aprenderás a usar CocoaPods con Swift. Específicamente, usted:

  • Instalará CocoaPods.
  • Trabaja con una aplicación de demostración funcional que te haga pensar en los helados.
  • Utilice CocoaPods para agregar redes.
  • Aprenda sobre el control de versiones semánticas.
  • Agregue otra biblioteca utilizando una versión flexible.
Nota: Este tutorial de CocoaPods requiere familiaridad básica con iOS y desarrollo rápido. Si es completamente nuevo en iOS y/o Swift, consulte algunos de los otros tutoriales escritos y / o en video en este sitio antes de hacer este tutorial. O, sumérgete en nuestro libro, Aprendiz de iOS.

Este tutorial también incluye clases que utilizan gráficos Básicos. Si bien el conocimiento de los gráficos básicos es beneficioso, no es necesario. Si desea obtener más información, lea nuestra serie de Gráficos Básicos modernos con Swift.

Introducción

Descargue el proyecto inicial haciendo clic en el botón Descargar materiales en la parte superior o inferior del tutorial.

A lo largo de este tutorial, trabajarás con una aplicación llamada Ice Cream Shop, Inc. Usarás CocoaPods para agregar dependencias a la aplicación de la manera más fácil, en lugar de escribir las tuyas propias.

Antes de que pueda continuar con este tutorial, debe instalar CocoaPods. Afortunadamente, CocoaPods usa Ruby, que viene con todas las versiones de macOS X desde la versión 10.7.

Abra el terminal e introduzca el siguiente comando:

sudo gem install cocoapods

Introduzca su contraseña cuando se le solicite. La salida del terminal mostrará varias salidas relacionadas con la obtención, instalación y documentación, concluyendo con «XX gems instalados».

Nota: Debe usar sudo para instalar CocoaPods, pero una vez que esté instalado, no necesitará volver a usarlo en este tutorial.

Finalmente, ingrese este comando en Terminal para completar la configuración:

pod setup --verbose

Este proceso tarda unos minutos porque clona el repositorio de especificaciones Maestras de CocoaPods en~/.cocoapods/ en su computadora.

La opción verbose registra el progreso a medida que se ejecuta el proceso, lo que le permite ver el proceso en lugar de ver una pantalla aparentemente «congelada».

¡Increíble, ahora estás configurado para usar CocoaPods!

Ice Cream Shop, Inc.

Su cliente principal es Ice Cream Shop, Inc. Su helado es tan popular que no puede seguir el ritmo de los pedidos de los clientes en el mostrador. Te han reclutado para crear una elegante aplicación para iOS que permite a los clientes pedir helados directamente desde sus iPhones.

Has empezado a desarrollar la aplicación y está saliendo bien. Echa un vistazo a tu progreso abriendo IceCreamShop.xcodeproj, luego construyendo y funcionando. Verás un delicioso cono de helado de vainilla:

Ice Cream Shop, Inc.página de inicio's start page

El usuario debería poder elegir un sabor de helado en esta pantalla, pero eso aún no es posible. Su primer paso es terminar de implementar esta funcionalidad.

Abrir Principal.guion gráfico desde las Vistas/Guiones gráficos & Grupo Nibs para ver el diseño de la aplicación. He aquí un resumen rápido del corazón de la aplicación, Elija Su Sabor escena:

Componentes de Elegir Su Sabor escena

  • PickFlavorViewController es el controlador de vista para esta escena. Maneja la interacción del usuario y proporciona los datos para la vista de colección que muestra los diferentes sabores de helado.
  • IceCreamView es una vista personalizada que muestra un cono de helado basado en el respaldo modo, Flavor.
  • ScoopCelles una celda de vista de colección personalizada que contiene un ScoopView, que obtiene colores de un modelo Flavor.

Mientras que cada Heladería, Inc. la ubicación tiene sabores distintivos en común, cada uno tiene sus propios sabores locales también. Por esta razón, un servicio web debe proporcionar los datos para los Flavor s.

Sin embargo, esto todavía no explica por qué los usuarios no pueden seleccionar sus sabores de helado.

Abra PickFlavorViewController.swift, que se encuentra en el grupo de Controladores, y verá un método de relleno:

private func loadFlavors() { // TO-DO: Implement this}

Aha, ¡no hay sabores! ¡Necesita implementar la función!

Mientras que puedes usar URLSession y escribir tus propias clases de redes, hay una manera más fácil: ¡Usa Alamofire!

Puede sentirse tentado a descargar esta biblioteca y arrastrar los archivos de origen directamente a su proyecto. Sin embargo, eso sería hacerlo de la manera difícil. CocoaPods proporciona una solución mucho más elegante y ágil.

Instalando su Primera Dependencia

Su primer paso es cerrar Xcode. Sí, has leído bien.

Es hora de crear el Podfile, donde definirás las dependencias de tu proyecto.

Abra Terminal y vaya al directorio que contiene su proyecto IceCreamShop utilizando el comando cd:

cd ~/Path/To/Folder/Containing/IceCreamShop

A continuación, ingrese el siguiente comando:

pod init

Esto crea un Podfile para su proyecto.

Finalmente, escriba el siguiente comando para abrir el Podfile usando Xcode para editar:

open -a Xcode Podfile
Nota: No use TextEdit para editar el Podfile porque reemplaza las comillas estándar con comillas tipográficas más atractivas gráficamente. Esto puede causar que los cocoápodos se confundan y produzcan errores. En su lugar, usa Xcode u otro editor de texto de programación para editar tu Podfile.

El Podfile predeterminado se ve así:

# Uncomment the next line to define a global platform for your project# platform :ios, '9.0'target 'IceCreamShop' do # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! # Pods for IceCreamShopend

Eliminar el # y el espacio antes de platform, a continuación, elimine las otras líneas que comienzan con #.

Su Podfile ahora debería tener este aspecto:

platform :ios, '9.0'target 'IceCreamShop' do use_frameworks!end

Esto indica a CocoaPods que su proyecto se dirige a iOS 9.0 y utilizará marcos de trabajo en lugar de bibliotecas estáticas. Aunque Swift y CocoaPods admiten enlaces estáticos, no todas las bibliotecas que incluye lo hacen. Una de ellas que usarás en este proyecto no lo hace.

Si solo ha programado en Swift, esto puede parecer un poco extraño. Esto se debe a que el Podfile está escrito en Ruby. No necesita saber Ruby para usar CocoaPods, pero debe tener en cuenta que incluso errores de texto menores harán que los CocoaPods generen errores.

Una palabra Sobre Bibliotecas

Verá que el término biblioteca se usa a menudo como un término general que en realidad significa biblioteca o marco de trabajo. Este tutorial también es culpable de mezclar casualmente estas palabras.

Puede que te estés preguntando sobre las diferencias entre una biblioteca, un framework y un CocoaPod. ¡Está bien si encuentras la terminología un poco confusa!

Un CocoaPod, o pod para abreviar, es un término general para una biblioteca o marco que se agrega a su proyecto utilizando CocoaPods.

iOS 8 introdujo marcos dinámicos, que le permiten agrupar código, imágenes y otros activos juntos. Antes de iOS 8, creabas CocoaPods como bibliotecas estáticas «gordas». «Fat» significa que contenían varios conjuntos de instrucciones de código, como i386 para el simulador, armv7 para dispositivos, etc. Sin embargo, Swift no permite que las bibliotecas estáticas contengan recursos como imágenes o activos.

Volver a Instalar Tu Primera Dependencia

Finalmente es hora de agregar tu primera dependencia usando CocoaPods. Agregue lo siguiente a su Podfile, justo después de use_frameworks!:

pod 'Alamofire', '4.9.1'

Esto indica a CocoaPods que desea incluir Alamofire versión 4.9.1 como dependencia para su proyecto.

Guardar y cerrar el Podfile.

Ahora necesita decirle a CocoaPods que instale las dependencias para su proyecto.

Ingrese el siguiente comando en Terminal, después de asegurarse de que todavía está en el directorio que contiene el proyecto IceCreamShop y el Podfile:

pod install

Debería ver una salida como esta:

Analyzing dependenciesAdding spec repo `trunk` with CDN `https://cdn.cocoapods.org/`Downloading dependenciesInstalling Alamofire (4.9.1)Generating Pods projectIntegrating client project Please close any current Xcode sessions and use `IceCreamShop.xcworkspace` for this project from now on.Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

Abra la carpeta del proyecto usando Finder y verá que CocoaPods creó una nueva tienda de helados.archivo xcworkspace y una carpeta Pods para almacenar todas las dependencias del proyecto.

Nota: A partir de ahora, como se menciona en la advertencia de la línea de comandos, siempre debe abrir el proyecto con el .archivo xcworkspace y no el .xcodeproj. De lo contrario, encontrará errores de compilación.

Excelente! ¡Acabas de añadir tu primera dependencia usando CocoaPods!

Usando Pods instalados

Ahora, usarás tu nueva dependencia, Alamofire.

Si el proyecto Xcode está abierto, ciérralo ahora y abre IceCreamShop.xcworkspace.

Abra PickFlavorViewController.swift y agregue lo siguiente justo debajo de la importación existente:

import Alamofire

Compilar y ejecutar. No verá ningún cambio todavía, pero tenga la seguridad de que Alamofire ya está disponible.

Primera compilación después de integrar la dependencia Alamofire

A continuación, reemplace loadFlavors() por lo siguiente:

 private func loadFlavors() { // 1 Alamofire.request( "https://www.raywenderlich.com/downloads/Flavors.plist", method: .get, encoding: PropertyListEncoding(format: .xml, options: 0)) .responsePropertyList { response in // 2 guard let self = self else { return } // 3 guard response.result.isSuccess, let dictionaryArray = response.result.value as? ] else { return } // 4 self.flavors = self.flavorFactory.flavors(from: dictionaryArray) // 5 self.collectionView.reloadData() self.selectFirstFlavor() } }

Aquí está el juego por juego de lo que está sucediendo en este código:

  1. Utiliza Alamofire para crear una solicitud GET y descargar una lista que contiene sabores de helado.
  2. Para romper un ciclo de referencia fuerte, utilice una referencia débil a self en el bloque de finalización de respuesta. Una vez que el bloque se ejecuta, inmediatamente obtiene una referencia fuerte a self para que pueda establecer propiedades en él más adelante.
  3. A continuación, verifique que response.result muestre éxito y que response.result.value sea una matriz de diccionarios.
  4. Ahora, establezca self.flavors un array de Flavor objetos FlavorFactory crea. Esta es una clase que un» colega » escribió para ti (¡de nada!), que toma una matriz de diccionarios y los usa para crear instancias de Flavor.
  5. Finalmente, vuelve a cargar la vista de colección y selecciona el primer tipo.

Compilar y ejecutar. ¡Ahora puedes elegir un sabor a helado!

Elige Sabor

Ahora para un sabroso relleno

La aplicación se ve bien, pero aún puedes mejorarla.

¿Notaste que la aplicación tarda un segundo en descargar el archivo de sabores? Si tienes una conexión a Internet rápida, es posible que no notes el retraso, pero tus clientes no siempre tendrán tanta suerte.

El siguiente paso es mostrar un indicador de carga en la aplicación, para ayudar a los clientes a comprender los datos de carga de la aplicación y no solo sus bibliotecas. MBProgressHUD es un indicador muy bueno que funcionará bien aquí. Y es compatible con CocoaPods; qué casualidad! :]

Para usar este pod, necesitas agregarlo a tu Podfile. En lugar de abrir el Podfile desde la línea de comandos, ahora puede encontrarlo en el destino de Pods en el espacio de trabajo:

Pods en el espacio de trabajo

Abra el Podfile y agregue lo siguiente, justo después de la línea Alamofire:

pod 'MBProgressHUD', '~> 1.0'

Guarde el archivo e instale las dependencias a través de pod install en Terminal como lo hiciste antes.

¿Notaste algo diferente esta vez? Sí, especificó el número de versión como ~> 1.0. ¿Pero por qué?

CocoaPods recomienda que todos los pods utilicen Versiones semánticas. Tómese un momento para entender qué es eso.

Control de versiones semánticas

Muchas veces, verás una versión escrita como esta: 1.0.0. Esos tres números son números mayores, menores y de versión de parche.

Por ejemplo, para el número de versión 1.0.0, 1 es el número mayor, el primero 0 es el número menor y el segundo 0 es el número de parche.

Ejemplo de versionado semántico

Si el número mayor aumenta, indica que la versión contiene cambios no compatibles con versiones anteriores. Al actualizar un pod a la siguiente versión principal, es posible que deba corregir errores de compilación o el pod puede comportarse de manera diferente a como lo hacía antes.

Si el número menor aumenta, indica que la versión contiene una nueva funcionalidad compatible con versiones anteriores. Cuando decida actualizar, es posible que necesite o no la nueva funcionalidad, pero no debería causar errores de compilación ni cambiar el comportamiento existente.

Si el número de parches aumenta, significa que la nueva versión contiene correcciones de errores, pero no cambios de funcionalidad o comportamiento nuevos. En general, siempre desea actualizar las versiones de parche lo antes posible para tener la versión más reciente y estable del pod.

Finalmente, cuando aumente el número de orden más alto-mayor, luego menor y luego parche-de acuerdo con las reglas anteriores, debe restablecer cualquier número de orden inferior a cero.

Este es un ejemplo:

Considere un pod que tiene un número de versión actual de 1.2.3.

Si realiza cambios que no son compatibles con versiones anteriores, no tiene nuevas funciones, pero corrige errores existentes, le daría la versión 2.0.0.

Tiempo de desafío

Si un pod tiene una versión actual de 2.4.6 y realiza cambios que corrigen errores y agregan funcionalidad compatible con versiones anteriores, ¿cuál debería ser el nuevo número de versión?

Respuesta: 2.5.0
Explicación: Si realiza cambios que incluyen una nueva funcionalidad compatible con versiones anteriores, aumenta el número menor y restablece el parche a cero.

Si un pod tiene una versión actual de 3.5.8 y realiza cambios en la funcionalidad existente que no son compatibles con versiones anteriores, ¿cuál debería ser el nuevo número de versión?

Respuesta: 4.0.0
Explicación: Si los cambios modifican el comportamiento existente y no son compatibles con versiones anteriores, debe aumentar el número mayor y restablecer los números menor y de parche a cero.

Si un pod tiene una versión actual de 10.20.30 y solo corrige errores, ¿cuál debería ser el nuevo número de versión?

Respuesta: 10.20.31
Explicación: Si solo corrige errores, solo aumenta el número de parches.

Habiendo dicho todo esto, hay una excepción a estas reglas:

Si el número de versión de un pod es menor que 1.0.0, se considera una versión beta. Los aumentos de números menores pueden incluir cambios que no son compatibles con versiones anteriores.

Así que de vuelta a MBProgressHUB: Usar ~> 1.0 significa que debe instalar la versión más reciente que sea mayor o igual a 1.0 pero menor que 2.0.

Esto garantiza que obtenga las últimas correcciones de errores y funciones cuando instale este pod, pero no obtendrá accidentalmente cambios incompatibles con versiones anteriores.

Hay varios otros operadores que también puede usar. Para obtener una lista completa, consulte la Referencia de sintaxis de Podfile.

Ahora que ha aprendido cómo funcionan los operadores con sus CocoaPods, es hora de terminar su aplicación.

Mostrando el progreso

Si recuerda, estaba creando un indicador de progreso para mostrar a los usuarios cuándo se cargan sabores en la aplicación.

Para finalizar esta función, vuelva a PickFlavorViewController.swift y agregue lo siguiente justo después de las otras importaciones:

import MBProgressHUD

A continuación, agregue los siguientes métodos auxiliares después de loadFlavors():

private func showLoadingHUD() { let hud = MBProgressHUD.showAdded(to: contentView, animated: true) hud.label.text = "Loading..."}private func hideLoadingHUD() { MBProgressHUD.hide(for: contentView, animated: true)}

Ahora, en loadFlavors(), agregue las dos líneas siguientes (como se indica):

 private func loadFlavors() { showLoadingHUD() // <-- Add this line Alamofire.request( "https://www.raywenderlich.com/downloads/Flavors.plist", method: .get, encoding: PropertyListEncoding(format: .xml, options: 0)) .responsePropertyList { response in guard let self = self else { return } self.hideLoadingHUD() // <-- Add this line // ...

Como indican los nombres de los métodos, showLoadingHUD()muestra una instancia de MBProgressHUD mientras se descarga la solicitud GET. hideLoadingHUD() oculta el HUD cuando finaliza la solicitud. Dado que showLoadingHUD() está fuera del cierre, no necesita el prefijo self.

Compilar y ejecutar. Ahora verá un indicador de carga mientras se cargan los sabores. Si su conexión a Internet es demasiado rápida para esto, puede agregar una instrucción sleep(_:) justo antes de hideLoadingHUD() para que pueda experimentar la bondad de MBProgressHUD. :]

Aplicación con símbolo de carga

¡Gran trabajo! Los clientes ahora pueden seleccionar su sabor de helado favorito y ven un indicador de carga mientras se descargan los sabores.

¿A Dónde Ir Desde Aquí?

Puede descargar el proyecto completado utilizando el botón Descargar materiales en la parte superior o inferior de esta página.

¡Felicitaciones! Ahora conoce los conceptos básicos del uso de CocoaPods, incluida la creación y modificación de dependencias y la comprensión del control de versiones semánticas. ¡Ya está listo para comenzar a usarlos en sus propios proyectos!

Hay mucho más que puedes hacer con los CocoaPods. Puedes buscar pods existentes en el sitio web oficial de CocoaPods. También, consulte las Guías de CocoaPods para aprender los detalles más finos de esta excelente herramienta. Pero tenga cuidado, una vez que comience a usarlo, se preguntará cómo se las arregló sin él. :]

Espero que hayan disfrutado leyendo este tutorial de CocoaPods tanto como yo lo escribí. ¿Cuáles son algunos de tus CocoaPods favoritos? ¿En cuáles confías más para proyectos cotidianos? ¡Siéntase libre de compartir, o de hacer cualquier pregunta, en los comentarios a continuación!

raywenderlich.com Semanal

El raywenderlich.com el boletín de noticias es la forma más fácil de mantenerse al día sobre todo lo que necesita saber como desarrollador móvil.

Obtenga un resumen semanal de nuestros tutoriales y cursos, y reciba un curso gratuito en profundidad por correo electrónico como bono!

puntuación Media

4.8/5

Añadir una clasificación para este contenido

iniciar sesión para añadir una clasificación

33 calificaciones

Deja una respuesta

Tu dirección de correo electrónico no será publicada.