SlideShare une entreprise Scribd logo
1  sur  64
Télécharger pour lire hors ligne
Dependency Managers
S u b m ó d u l o s G I T
C o c o a p o d s
C a r t h a g e
Soy Angel Morales
iOS Developer @ Deloitte Digital
¡ Hola !
http://medium.com/@angelmoralesk
https://github.com/ctime95
Agenda
¿Qué son los dependency managers?
Submódulos Git
Carthage
Dependencias
Ventajas
¿Por qué no conviene gestionar dependencias manualmente?
Cocoapods
Conceptos
Ejemplo : Agregar framework como submódulo Git
Conceptos
Ejemplo: Integrar Lottie con Carthage
Conclusiones
Conceptos
Ejemplo: Integrar Cocoapods en una librería Cocoa Touch
Gestionando cambios
Comandos adicionales
Semantic Versioning
Un vistazo a Lockfiles
Dependency
Managers
Frameworks proporcionan soluciones a problemas recurrentes.
Comunicación HTTP
Descarga asincrona de imágenes
Nuevas soluciones en base de datos
Animaciones
Nuevas formas de programación… etc
Frameworks de terceros cuentan con gran participación de la comunidad
Constante mantenimiento
Nuevas funcionalidades o libres de bugs
Gestores de dependencia (Dependency Managers)
Dependencia
“Módulo externo e independiente que puede ser tan pequeño como un simple archivo o tan
grande como una colección de directorios y/o archivos organizados en paquetes para cumplir
con una tarea especifica”
Facilitan la integración de librerías de terceros en nuestra aplicación (al igual que su eliminación y
actualización con nuevas versiones)
Provee mecanismos para agregar código adicional y por tanto nuevas funcionalidades
Coordinan la integración con librerías externas o paquetes a la aplicación
Dependency Managers no
es exclusivo en iOS
Código
reutilizable
Agilizamos
desarrollo
Manejo de
versiones
Ventajas
¿Por qué Dependency
Managers si podemos…?
Asociarlos con los
targets
(link to binary)
Agregar linker flags
Importarlos en
nuestro proyecto
Descargar
frameworks,
bundles…
…incorporar el framework manualmente?
….Si hay frameworks dependientes,
repetir el proceso
Es un proceso complejo, propenso a
errores …
No se cuenta una referencia original del código ( ¿ de dónde salió ? )
Actualizaciones no son fáciles de integrar
No se cuenta con información de las versiones
• Estamos usando versión 1.2.3? o 1.4.0?
• ¿Contamos con el fix de la versión XYZ?
Además…
Submódulos
Git
Es una forma de administrar dependencias utilizando git
Crear dependencias
podemos hacer que nuestro proyecto Principal A dependa de proyecto B (framework)
Submódulos Git
Requisito
Tanto el proyecto principal como el framework cuentan con control de versiones Git.
Al agregar un submódulo…
Se genera archivo de configuración oculto: .gitmodules
Se clona el proyecto del framework dentro de un directorio del proyecto principal
El proyecto principal guarda una referencia del commit que apunta el submódulo.
Ejemplo: Agregar framework Circle-Menu como submódulo Git
Ejemplo: Agregar framework Circle-Menu como submódulo Git
1.Dentro del directorio del proyecto principal, creamos un directorio para almacenar los frameworks (submódulos).
Ejemplo: Agregar framework Circle-Menu como submódulo Git
2. Agregamos un submodulo con el siguiente comando:
<<URL>> : del repositorio remoto Circle-Menu
<<DIR_LOCAL>> : es el directorio local dentro de nuestro proyecto,
$git submodule add <<URL>> <<DIR_LOCAL>>
Ejemplo: Agregar framework Circle-Menu como submódulo Git
3. Dentro del directorio principal, se crea .gitmodules que almacena un mapeo entre la URL del proyecto y el directorio
local al que se descargó el submodulo.
Al igual que el archivo .gitignore, el archivo .gitmodules debe monitorearse en Git (subirse o descargarse con el resto
del proyecto).
[submodule "MainProject/Frameworks/Internal"]
path = MainProject/Frameworks/Internal
url = https://github.com/Ramotion/circle-menu.git
4. Para obtener un resumen de los submodulos (e.j. commits modificados) usamos:
$git config --global status.submoduleSummary true
Ejemplo: Agregar framework Circle-Menu como submódulo Git
5. Preparamos un commit agregando los cambios.
Ejemplo: Agregar framework Circle-Menu como submódulo Git
6. Con el Finder, dentro de Frameworks/Internal… ubicamos el proyecto de CircleMenu.xcodeproj y lo arrastramos al
Xcode con nuestro proyecto principal abierto.
Ejemplo: Agregar framework Circle-Menu como submódulo Git
7. Seleccionamos el proyecto principal > target MainProject
8. En la pestaña General en Linked Frameworks
agregamos el CircleMenu.framework.
Ejemplo: Agregar framework Circle-Menu como submódulo Git
9. Preparamos el commit e integramos la librería en nuestro ViewController
Repositorio
MainProject
Repositorio
Circle - menu
MainProject
Circle - menu
Último commit
36abcz
ViewController.swift
Modelo.swift
Commit submodulo 36abcz
GESTIONANDO CAMBIOS DEL SUBMÓDULO
Proyecto
Submódulos
Terminal
GESTIONANDO CAMBIOS DEL SUBMÓDULO
1. Dentro del proyecto del submódulo, hacemos checkout a otro commit o rama
GESTIONANDO CAMBIOS DEL SUBMÓDULO
3. En el proyecto principal cambia la referencia del submódulo.
GESTIONANDO CAMBIOS DEL SUBMÓDULO
3. En el proyecto principal cambia la referencia del submódulo.
GESTIONANDO CAMBIOS DEL SUBMÓDULO
Comandos adicionales
Comando Descripción
$git submodule sync Actualiza la metadata de los submódulos cuando la URL cambió
$git submodule update Actualiza los contenidos de los submódulos. Equivalente a correr ”git
fetch” y “git checkout” en cada submódulo
$git rm PATH_SUBMOD. Se remueve del repositorio local y filesystem
Cocoapods
Dependency manager hecho en Ruby
Instalación de la herramienta
Además de proponer la distribución de librerias de terceros permite su integración automática
Facilmente instalable con el Ruby disponible en el OS X
$sudo gem install cocoapods
Surgió en Agosto – Septiembre del 2011
Cuenta con alrededor de 47 000 librerias y es usado en 3 millones de apps
Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de
usuarios.
Pods GitHubServices
Podfile Podfile.lock
Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de
usuarios.
1.Creamos un Cocoa Touch framework llamado GitHubServices
2. En terminal, dentro del proyecto, ingresamos el comando para generar un archivo de configuración Podfile
$pod init
Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de
usuarios.
3. Llenamos el Podfile con las dependencias que deseamos (indicando la versión , branches o commits)
Semantic Versioning
1.4.7
Patch ó fixes^
Minor release
Nuevo feature^
Mayor
release*
• * - Rompe backwards compatibility
• ^ - Sin romper backward compatibility
= >= < <= ~>
Operadores Soportados
Semantic Versioning
~> 1.4.7Ejemplos:
Ok, actualizar este
númeroActualizar el último
número de versión
1.4.8
1.4.9
1.4.10
~> 3.3 3.3.5
3.4.0
3.7.0
Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de
usuarios.
4. Para instalar las librerías ingresamos el siguiente comando:
$pod install
Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de
usuarios.
5. Cocoapods genera un xcworkspace (una colección de proyectos)
Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de
usuarios.
6. Justo como cualquier otro framework, lo importamos en nuestra clase solicitada.
Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de
usuarios.
7. Probando el framework con clase XCTestCase
Más conceptos sobre Cocoapods…
Podfile.lock Guarda ”snapshot” de las versiones de las dependencias. Es decir,
mantiene/rastrea la versión de cada dependencia.
Podspec Archivo creado por el autor de la librería, indica prerequisitos
como librerías, assets, URLs de repositorios..etc
$pod update Comando para instalar nuevas versiones de librerias o
dependencias
Un vistazo a Podfile.lock
Podfile
‘Libreria’ : 1.3.3
pod ‘Libreria’ ~> 1.3
Si n un Podfi l e.l ock puede
exi sti r una desi ncroni zaci ón de
l as versi ones de dependenci as.
Podfile
‘Libreria’ : 1.3.3
pod ‘Libreria’ ~> 1.3
Instalado : 1.3.3
pod install
Un vistazo a Podfile.lock
Podfile
‘Libreria’ : 1.4.0
pod ‘Libreria’ ~> 1.3
Instalado : 1.3.3
Un vistazo a Podfile.lock
Podfile
Podfile
‘Libreria’ : 1.4.0
pod ‘Libreria’ ~> 1.3
Instalado : 1.3.3
Un vistazo a Podfile.lock
pod ‘Libreria’ ~> 1.3
Podfile
Podfile
‘Libreria’ : 1.4.0
pod ‘Libreria’ ~> 1.3
Instalado : 1.3.3
pod install
Instalado : 1.4.0
Un vistazo a Podfile.lock
pod ‘Libreria’ ~> 1.3
Podfile
Podfile
‘Libreria’ : 1.4.0
pod ‘Libreria’ ~> 1.3
Instalado : 1.3.3 Instalado : 1.4.0
Un vistazo a Podfile.lock
pod ‘Libreria’ ~> 1.3
“Pueden exi sti r confl i ctos con l as dependenci as al
manej ar di ferentes versi ones.”
Podfile.lock Podfile.lock
Podfile
Podfile
‘Libreria’ : 1.4.0
pod ‘Libreria’ ~> 1.3
Instalado : 1.3.3
Librería: 1.3.3 Librería: 1.3.3
Un vistazo a Podfile.lock
Al exi sti r un archi vo
Podfi l e.l ock, se da un
segui mi ento a l as versi ones
Podfile.lock Podfile.lock
Podfile
Podfile
‘Libreria’ : 1.4.0
pod ‘Libreria’ ~> 1.3
Instalado : 1.3.3
Librería: 1.3.3 Librería: 1.3.3
pod install
Instalado : 1.3.3
Un vistazo a Podfile.lock
Podfile.lock Podfile.lock
Podfile
Podfile
‘Libreria’ : 1.4.0
pod ‘Libreria’ ~> 1.3
Instalado : 1.3.3
Librería: 1.3.3 Librería: 1.3.3
pod install
Instalado : 1.3.3
Un vistazo a Podfile.lock
Aunque ej ecuta pod i nstal l l a
versi on que se i nstal a no es l a
1.4.0, si no l a 1.3.3
Podfile.lock Podfile.lock
Podfile
Podfile
‘Libreria’ : 1.4.0
pod ‘Libreria’ ~> 1.3
Instalado : 1.3.3
Librería: 1.3.3 Librería: 1.4.0
pod update
Instalado : 1.4.0
Pero al usar
”pod update…”
Un vistazo a Podfile.lock
Carthage
Carthage genera binarios de los frameworks y el desarrollador los integra
a su proyecto
2 formas de instalación :
Para consultar la versión de Carthage
A diferencia de Cocoapods, Carthage no ”altera” la estructura del proyecto
No requiere de Podspecs o repositorio centralizado para el desarrollo de dependencias.
Instalador .pkg
Homebrew package manager (Homebrew ayuda a instalar herramientas para Mac OS)
$carthage version
Archivo de configuración donde indicamos qué dependencias / librerias deseamos instalar
* Otros elementos opcionales: nombre de rama/ nombre del tag / commit
Consiste de:
github "Alamofire/Alamofire" == 45
Cartfile
Ejemplo:
Origen Nombre Versión (opcional)
Origen de la dependencia puede ser:
Github
Git (la palabra git seguido de git://, http://, ssh:// o path local)
Ejemplo: Integrar Lottie, una librería que parsea animaciones con Adobe After Effects en formato json para renderizarlos
en pantalla.
Ejemplo: Integrando Lottie con Carthage
1. Definimos nuestro Cartfile de la siguiente manera:
2. En terminal ingresamos el siguiente comando para la descarga y generación de frameworks por cada dependencia:
$carthage update
Ejemplo: Integrando Lottie con Carthage
3. A diferencia de Cocoapods, Carthage NO genera un xcworkspace para que podamos trabajar, sino que crea:
Archivo que indica las versiones de
nuestras dependencias.
Ideal subirlo a control de versiones
Contiene los frameworks
construidos por Carthage que se
integrarán manualmente al
proyecto.Directorio para verificar el código
fuente de cada dependencia. Su
contenido puede sobreescribirse.
Ejemplo: Integrando Lottie con Carthage
4. Del directorio Carthage>Build>iOS arrastramos el Lottie.framework a la sección de Linked Frameworks and Libraries.
Ejemplo: Integrando Lottie con Carthage
5. Ahora bien, necesitamos asegurarnos que los frameworks se copien con un Run Script.
• Se selecciona el target y la pestaña Build
Phases
• En la esquina superor izquierda se
presiona “+” para agregar new Run
Script
• Se ingresa el siguiente script
• Para input files
$(SRCROOT)/Carthage/Build/iOS
/Lottie.framework
/usr/local/bin/carthage
copy-frameworks
Ejemplo: Integrando Lottie con Carthage
6. Como paso final, queda incorporar nuestra librería dentro del View Controller adecuado.
Conclusiones
Carthage
El control de versiones debe dar
seguimiento (track) al archivo como
.gitmodules
El proyecto principal guarda una
referencia al commit del
submódulo.
Asegurarse que esa referencia se
suba al repositorio del proyecto
para el resto del equipo.
Submódulos Git
Se cuentan con 2 opciones:
- Recrear el ambiente
* Subir al repositorio remoto
Podfile.lock y Podfile
* Ejecutar pod install y bajar las
dependencias correspondientes.
- Subir al control de versiones
nuestros pods
Cocoapods
Buenas prácticas
Se cuentan con 2 opciones:
- Recrear el ambiente
* Subir al repositorio remoto
Cartfile.resolved y Cartfile
* Ejecutar carthage bootstrap y
bajar las dependencias
correspondientes.
Submódulos Cocoapods Carthage
Requisitos de instalación -
$sudo gem install cocoapods
Homebrew
Instalador .pkg
Proceso de configuración
Clonar repositorio
Incorporar manualmente el framework
Generar archivo de configuración (pod
init)
Instalar las dependencias (pod install)
Trabajar en nueva estructura de
proyecto
Generar archivo de configuración
Instalar dependencias (carthage
update)
Incorporar manualmente los
frameworks
Modifica la estructura del proyecto No Sí No
Archivo de especificación - Podspecs -
Archivo de configuración .gitmodules Podfile Cartfile
Archivo con versiones - Podfile.lock Cartfile.resolved
Modo de actualizar frameworks a
últimas versiones
mediante Git (checkout, pull)
Actualizando Podfile
Ingresar en linea de comando - pod
update
Actualizando Cartfile
Ingresar en linea de comando -
carthage update --platform iOS
Ventajas
Fácil de instalar si contamos con
buenas bases en GIT
Fácil de instalar
Se tiene la opción de recrear el
ambiente ó trabajar con los mismos
pods
Fácil de instalar
Flexible, indicamos diferentes origenes
de las dependencias
Se tiene la opción de recrear el
ambiente ó trabajar con los mismos
binarios
Desventajas
Complejo de gestionar
No contamos con un archivo con las
versiones (Podfile.lock y
Cartfile.resolved)
Mantenimiento del Podspec
Falta mayor flexibilidad al indicar los
origenes de dependencias.
Asegurarse de incorporar los
frameworks manualmente tras instalar
o actualizar
¡Gracias!
http://medium.com/@angelmoralesk
https://github.com/ctime95
Más información
• What are Dependency Managers?
https://medium.com/prodsters/what-are-dependency-managers-26d7d907deb8
• An Introduction to CocoaPods (Route 85)
https://www.youtube.com/watch?v=iEAjvNRdZa0
• CocoaPods and Lockfiles (Route 85)
https://www.youtube.com/watch?v=H-
zK1mEwTe0&index=12&t=0s&list=PLOU2XLYxmsIKGQekfmV0Qk52qLG5LU2jO
• Carthage
https://github.com/Carthage/Carthage#license
• Cómo crear, instalar y utilizar un CocoaPod con storyboards y VCs.
https://medium.com/@angelmoralesk/c%C3%B3mo-crear-instalar-y-utilizar-un-cocoapod-con-sus-
storyboards-y-vcs-e0b791a6e087
Más información
• Dependency Management Using Git Submodules
https://www.raywenderlich.com/155150/dependency-management-using-git-submodules
• Circle Menu
https://github.com/Ramotion/circle-
menu?utm_source=mybridge&utm_medium=blog&utm_campaign=read_more
• Lottie
https://github.com/airbnb/lottie-ios

Contenu connexe

Similaire à Dependency Managers

Presentacion #2 github Aplicaciones Seguras
Presentacion #2 github Aplicaciones SegurasPresentacion #2 github Aplicaciones Seguras
Presentacion #2 github Aplicaciones SegurasJosé Moreno
 
GuiaPrincipiantesGitHubrfuenzalidadev.pptx
GuiaPrincipiantesGitHubrfuenzalidadev.pptxGuiaPrincipiantesGitHubrfuenzalidadev.pptx
GuiaPrincipiantesGitHubrfuenzalidadev.pptxfuenzalidarodrigo
 
Manual para usuarios de Git @patxiredes.pdf
Manual para usuarios de Git @patxiredes.pdfManual para usuarios de Git @patxiredes.pdf
Manual para usuarios de Git @patxiredes.pdfCarlosJurado61
 
Control de versiones utilizando Git
Control de versiones utilizando GitControl de versiones utilizando Git
Control de versiones utilizando GitHugo Gilmar Erazo
 
Git para-principiantes
Git para-principiantesGit para-principiantes
Git para-principiantesnscoder_mad
 
Presentación SUbversion
Presentación SUbversionPresentación SUbversion
Presentación SUbversionrxif914u41
 
Presentacion Subversion
Presentacion SubversionPresentacion Subversion
Presentacion SubversionCesar Yanez
 
Control de versiones con git
Control de versiones con gitControl de versiones con git
Control de versiones con gitEudris Cabrera
 
Primeros pasos con git
Primeros pasos con gitPrimeros pasos con git
Primeros pasos con gitJuan Vladimir
 
Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterandrewzg
 
Introducción a Git
Introducción a GitIntroducción a Git
Introducción a GitManuel Ceron
 
Introducción a GIT
Introducción a GITIntroducción a GIT
Introducción a GITmaxfontana90
 
Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Juan Fede
 

Similaire à Dependency Managers (20)

Presentacion #2 github Aplicaciones Seguras
Presentacion #2 github Aplicaciones SegurasPresentacion #2 github Aplicaciones Seguras
Presentacion #2 github Aplicaciones Seguras
 
GuiaPrincipiantesGitHubrfuenzalidadev.pptx
GuiaPrincipiantesGitHubrfuenzalidadev.pptxGuiaPrincipiantesGitHubrfuenzalidadev.pptx
GuiaPrincipiantesGitHubrfuenzalidadev.pptx
 
Manual para usuarios de Git @patxiredes.pdf
Manual para usuarios de Git @patxiredes.pdfManual para usuarios de Git @patxiredes.pdf
Manual para usuarios de Git @patxiredes.pdf
 
Control de versiones utilizando Git
Control de versiones utilizando GitControl de versiones utilizando Git
Control de versiones utilizando Git
 
Git para-principiantes
Git para-principiantesGit para-principiantes
Git para-principiantes
 
Control de versiones con Git
Control de versiones con GitControl de versiones con Git
Control de versiones con Git
 
Git 01-introduccion
Git 01-introduccionGit 01-introduccion
Git 01-introduccion
 
Presentación SUbversion
Presentación SUbversionPresentación SUbversion
Presentación SUbversion
 
Presentacion Subversion
Presentacion SubversionPresentacion Subversion
Presentacion Subversion
 
Control de versiones con git
Control de versiones con gitControl de versiones con git
Control de versiones con git
 
Taller GitHub
Taller GitHubTaller GitHub
Taller GitHub
 
Primeros pasos con git
Primeros pasos con gitPrimeros pasos con git
Primeros pasos con git
 
Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniter
 
Atix30
Atix30Atix30
Atix30
 
Introducción a Git
Introducción a GitIntroducción a Git
Introducción a Git
 
Git / Guía Básica
Git / Guía BásicaGit / Guía Básica
Git / Guía Básica
 
Introducción a GIT
Introducción a GITIntroducción a GIT
Introducción a GIT
 
Netbeans
NetbeansNetbeans
Netbeans
 
Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7
 
Tutorial codeblocks(2)
Tutorial codeblocks(2)Tutorial codeblocks(2)
Tutorial codeblocks(2)
 

Plus de NSCoder Mexico

Aprendizaje reforzado con swift
Aprendizaje reforzado con swiftAprendizaje reforzado con swift
Aprendizaje reforzado con swiftNSCoder Mexico
 
Programación Orientada a Protocolos
Programación Orientada a ProtocolosProgramación Orientada a Protocolos
Programación Orientada a ProtocolosNSCoder Mexico
 
Interfaces en interface builder y por codigo
Interfaces en interface builder y por codigoInterfaces en interface builder y por codigo
Interfaces en interface builder y por codigoNSCoder Mexico
 
Core ML and Computer Vision
Core ML and Computer VisionCore ML and Computer Vision
Core ML and Computer VisionNSCoder Mexico
 
Intro programacion funcional
Intro programacion funcionalIntro programacion funcional
Intro programacion funcionalNSCoder Mexico
 
Mathematics en la programación
Mathematics en la programaciónMathematics en la programación
Mathematics en la programaciónNSCoder Mexico
 
Video juegos con SpriteKit y Swift
Video juegos con SpriteKit y SwiftVideo juegos con SpriteKit y Swift
Video juegos con SpriteKit y SwiftNSCoder Mexico
 
Introduction a ARToolkit
Introduction a ARToolkitIntroduction a ARToolkit
Introduction a ARToolkitNSCoder Mexico
 
Diseño Agil para Desarrolladores
Diseño Agil para DesarrolladoresDiseño Agil para Desarrolladores
Diseño Agil para DesarrolladoresNSCoder Mexico
 
Simplify your Life with Message Extensions in iOS 10
Simplify your Life with Message Extensions in iOS 10Simplify your Life with Message Extensions in iOS 10
Simplify your Life with Message Extensions in iOS 10NSCoder Mexico
 
Taming the Massive View Controllers
Taming the Massive View ControllersTaming the Massive View Controllers
Taming the Massive View ControllersNSCoder Mexico
 

Plus de NSCoder Mexico (20)

Aprendizaje reforzado con swift
Aprendizaje reforzado con swiftAprendizaje reforzado con swift
Aprendizaje reforzado con swift
 
In app purchase
In app purchaseIn app purchase
In app purchase
 
Ib designables
Ib designablesIb designables
Ib designables
 
Programación Orientada a Protocolos
Programación Orientada a ProtocolosProgramación Orientada a Protocolos
Programación Orientada a Protocolos
 
Interfaces en interface builder y por codigo
Interfaces en interface builder y por codigoInterfaces en interface builder y por codigo
Interfaces en interface builder y por codigo
 
Introduction Swift
Introduction SwiftIntroduction Swift
Introduction Swift
 
Taller PaintCode
Taller PaintCodeTaller PaintCode
Taller PaintCode
 
VIPER
VIPERVIPER
VIPER
 
Core ML and Computer Vision
Core ML and Computer VisionCore ML and Computer Vision
Core ML and Computer Vision
 
Intro programacion funcional
Intro programacion funcionalIntro programacion funcional
Intro programacion funcional
 
DIY Instagram
DIY InstagramDIY Instagram
DIY Instagram
 
Mathematics en la programación
Mathematics en la programaciónMathematics en la programación
Mathematics en la programación
 
Video juegos con SpriteKit y Swift
Video juegos con SpriteKit y SwiftVideo juegos con SpriteKit y Swift
Video juegos con SpriteKit y Swift
 
Unit Testing en iOS
Unit Testing en iOSUnit Testing en iOS
Unit Testing en iOS
 
Bridgefy SDK
Bridgefy SDKBridgefy SDK
Bridgefy SDK
 
Introduction a ARToolkit
Introduction a ARToolkitIntroduction a ARToolkit
Introduction a ARToolkit
 
Diseño Agil para Desarrolladores
Diseño Agil para DesarrolladoresDiseño Agil para Desarrolladores
Diseño Agil para Desarrolladores
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Simplify your Life with Message Extensions in iOS 10
Simplify your Life with Message Extensions in iOS 10Simplify your Life with Message Extensions in iOS 10
Simplify your Life with Message Extensions in iOS 10
 
Taming the Massive View Controllers
Taming the Massive View ControllersTaming the Massive View Controllers
Taming the Massive View Controllers
 

Dernier

tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 

Dernier (20)

tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 

Dependency Managers

  • 1. Dependency Managers S u b m ó d u l o s G I T C o c o a p o d s C a r t h a g e
  • 2. Soy Angel Morales iOS Developer @ Deloitte Digital ¡ Hola ! http://medium.com/@angelmoralesk https://github.com/ctime95
  • 3. Agenda ¿Qué son los dependency managers? Submódulos Git Carthage Dependencias Ventajas ¿Por qué no conviene gestionar dependencias manualmente? Cocoapods Conceptos Ejemplo : Agregar framework como submódulo Git Conceptos Ejemplo: Integrar Lottie con Carthage Conclusiones Conceptos Ejemplo: Integrar Cocoapods en una librería Cocoa Touch Gestionando cambios Comandos adicionales Semantic Versioning Un vistazo a Lockfiles
  • 5. Frameworks proporcionan soluciones a problemas recurrentes. Comunicación HTTP Descarga asincrona de imágenes Nuevas soluciones en base de datos Animaciones Nuevas formas de programación… etc Frameworks de terceros cuentan con gran participación de la comunidad Constante mantenimiento Nuevas funcionalidades o libres de bugs
  • 6. Gestores de dependencia (Dependency Managers) Dependencia “Módulo externo e independiente que puede ser tan pequeño como un simple archivo o tan grande como una colección de directorios y/o archivos organizados en paquetes para cumplir con una tarea especifica” Facilitan la integración de librerías de terceros en nuestra aplicación (al igual que su eliminación y actualización con nuevas versiones) Provee mecanismos para agregar código adicional y por tanto nuevas funcionalidades Coordinan la integración con librerías externas o paquetes a la aplicación
  • 7. Dependency Managers no es exclusivo en iOS
  • 10. Asociarlos con los targets (link to binary) Agregar linker flags Importarlos en nuestro proyecto Descargar frameworks, bundles… …incorporar el framework manualmente? ….Si hay frameworks dependientes, repetir el proceso Es un proceso complejo, propenso a errores …
  • 11. No se cuenta una referencia original del código ( ¿ de dónde salió ? ) Actualizaciones no son fáciles de integrar No se cuenta con información de las versiones • Estamos usando versión 1.2.3? o 1.4.0? • ¿Contamos con el fix de la versión XYZ? Además…
  • 13. Es una forma de administrar dependencias utilizando git Crear dependencias podemos hacer que nuestro proyecto Principal A dependa de proyecto B (framework) Submódulos Git Requisito Tanto el proyecto principal como el framework cuentan con control de versiones Git. Al agregar un submódulo… Se genera archivo de configuración oculto: .gitmodules Se clona el proyecto del framework dentro de un directorio del proyecto principal El proyecto principal guarda una referencia del commit que apunta el submódulo.
  • 14. Ejemplo: Agregar framework Circle-Menu como submódulo Git
  • 15. Ejemplo: Agregar framework Circle-Menu como submódulo Git 1.Dentro del directorio del proyecto principal, creamos un directorio para almacenar los frameworks (submódulos).
  • 16. Ejemplo: Agregar framework Circle-Menu como submódulo Git 2. Agregamos un submodulo con el siguiente comando: <<URL>> : del repositorio remoto Circle-Menu <<DIR_LOCAL>> : es el directorio local dentro de nuestro proyecto, $git submodule add <<URL>> <<DIR_LOCAL>>
  • 17. Ejemplo: Agregar framework Circle-Menu como submódulo Git 3. Dentro del directorio principal, se crea .gitmodules que almacena un mapeo entre la URL del proyecto y el directorio local al que se descargó el submodulo. Al igual que el archivo .gitignore, el archivo .gitmodules debe monitorearse en Git (subirse o descargarse con el resto del proyecto). [submodule "MainProject/Frameworks/Internal"] path = MainProject/Frameworks/Internal url = https://github.com/Ramotion/circle-menu.git 4. Para obtener un resumen de los submodulos (e.j. commits modificados) usamos: $git config --global status.submoduleSummary true
  • 18. Ejemplo: Agregar framework Circle-Menu como submódulo Git 5. Preparamos un commit agregando los cambios.
  • 19. Ejemplo: Agregar framework Circle-Menu como submódulo Git 6. Con el Finder, dentro de Frameworks/Internal… ubicamos el proyecto de CircleMenu.xcodeproj y lo arrastramos al Xcode con nuestro proyecto principal abierto.
  • 20. Ejemplo: Agregar framework Circle-Menu como submódulo Git 7. Seleccionamos el proyecto principal > target MainProject 8. En la pestaña General en Linked Frameworks agregamos el CircleMenu.framework.
  • 21. Ejemplo: Agregar framework Circle-Menu como submódulo Git 9. Preparamos el commit e integramos la librería en nuestro ViewController
  • 22. Repositorio MainProject Repositorio Circle - menu MainProject Circle - menu Último commit 36abcz ViewController.swift Modelo.swift Commit submodulo 36abcz GESTIONANDO CAMBIOS DEL SUBMÓDULO
  • 24. 1. Dentro del proyecto del submódulo, hacemos checkout a otro commit o rama GESTIONANDO CAMBIOS DEL SUBMÓDULO
  • 25. 3. En el proyecto principal cambia la referencia del submódulo. GESTIONANDO CAMBIOS DEL SUBMÓDULO
  • 26. 3. En el proyecto principal cambia la referencia del submódulo. GESTIONANDO CAMBIOS DEL SUBMÓDULO
  • 27. Comandos adicionales Comando Descripción $git submodule sync Actualiza la metadata de los submódulos cuando la URL cambió $git submodule update Actualiza los contenidos de los submódulos. Equivalente a correr ”git fetch” y “git checkout” en cada submódulo $git rm PATH_SUBMOD. Se remueve del repositorio local y filesystem
  • 29. Dependency manager hecho en Ruby Instalación de la herramienta Además de proponer la distribución de librerias de terceros permite su integración automática Facilmente instalable con el Ruby disponible en el OS X $sudo gem install cocoapods Surgió en Agosto – Septiembre del 2011 Cuenta con alrededor de 47 000 librerias y es usado en 3 millones de apps
  • 30. Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de usuarios. Pods GitHubServices Podfile Podfile.lock
  • 31. Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de usuarios. 1.Creamos un Cocoa Touch framework llamado GitHubServices 2. En terminal, dentro del proyecto, ingresamos el comando para generar un archivo de configuración Podfile $pod init
  • 32. Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de usuarios. 3. Llenamos el Podfile con las dependencias que deseamos (indicando la versión , branches o commits)
  • 33. Semantic Versioning 1.4.7 Patch ó fixes^ Minor release Nuevo feature^ Mayor release* • * - Rompe backwards compatibility • ^ - Sin romper backward compatibility = >= < <= ~> Operadores Soportados
  • 34. Semantic Versioning ~> 1.4.7Ejemplos: Ok, actualizar este númeroActualizar el último número de versión 1.4.8 1.4.9 1.4.10 ~> 3.3 3.3.5 3.4.0 3.7.0
  • 35. Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de usuarios. 4. Para instalar las librerías ingresamos el siguiente comando: $pod install
  • 36. Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de usuarios. 5. Cocoapods genera un xcworkspace (una colección de proyectos)
  • 37. Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de usuarios. 6. Justo como cualquier otro framework, lo importamos en nuestra clase solicitada.
  • 38. Ejemplo: Crear una librería (Cocoa Touch framework) que se comunique al API de GitHub para realizar una búsqueda de usuarios. 7. Probando el framework con clase XCTestCase
  • 39. Más conceptos sobre Cocoapods… Podfile.lock Guarda ”snapshot” de las versiones de las dependencias. Es decir, mantiene/rastrea la versión de cada dependencia. Podspec Archivo creado por el autor de la librería, indica prerequisitos como librerías, assets, URLs de repositorios..etc $pod update Comando para instalar nuevas versiones de librerias o dependencias
  • 40. Un vistazo a Podfile.lock Podfile ‘Libreria’ : 1.3.3 pod ‘Libreria’ ~> 1.3 Si n un Podfi l e.l ock puede exi sti r una desi ncroni zaci ón de l as versi ones de dependenci as.
  • 41. Podfile ‘Libreria’ : 1.3.3 pod ‘Libreria’ ~> 1.3 Instalado : 1.3.3 pod install Un vistazo a Podfile.lock
  • 42. Podfile ‘Libreria’ : 1.4.0 pod ‘Libreria’ ~> 1.3 Instalado : 1.3.3 Un vistazo a Podfile.lock
  • 43. Podfile Podfile ‘Libreria’ : 1.4.0 pod ‘Libreria’ ~> 1.3 Instalado : 1.3.3 Un vistazo a Podfile.lock pod ‘Libreria’ ~> 1.3
  • 44. Podfile Podfile ‘Libreria’ : 1.4.0 pod ‘Libreria’ ~> 1.3 Instalado : 1.3.3 pod install Instalado : 1.4.0 Un vistazo a Podfile.lock pod ‘Libreria’ ~> 1.3
  • 45. Podfile Podfile ‘Libreria’ : 1.4.0 pod ‘Libreria’ ~> 1.3 Instalado : 1.3.3 Instalado : 1.4.0 Un vistazo a Podfile.lock pod ‘Libreria’ ~> 1.3 “Pueden exi sti r confl i ctos con l as dependenci as al manej ar di ferentes versi ones.”
  • 46. Podfile.lock Podfile.lock Podfile Podfile ‘Libreria’ : 1.4.0 pod ‘Libreria’ ~> 1.3 Instalado : 1.3.3 Librería: 1.3.3 Librería: 1.3.3 Un vistazo a Podfile.lock Al exi sti r un archi vo Podfi l e.l ock, se da un segui mi ento a l as versi ones
  • 47. Podfile.lock Podfile.lock Podfile Podfile ‘Libreria’ : 1.4.0 pod ‘Libreria’ ~> 1.3 Instalado : 1.3.3 Librería: 1.3.3 Librería: 1.3.3 pod install Instalado : 1.3.3 Un vistazo a Podfile.lock
  • 48. Podfile.lock Podfile.lock Podfile Podfile ‘Libreria’ : 1.4.0 pod ‘Libreria’ ~> 1.3 Instalado : 1.3.3 Librería: 1.3.3 Librería: 1.3.3 pod install Instalado : 1.3.3 Un vistazo a Podfile.lock Aunque ej ecuta pod i nstal l l a versi on que se i nstal a no es l a 1.4.0, si no l a 1.3.3
  • 49. Podfile.lock Podfile.lock Podfile Podfile ‘Libreria’ : 1.4.0 pod ‘Libreria’ ~> 1.3 Instalado : 1.3.3 Librería: 1.3.3 Librería: 1.4.0 pod update Instalado : 1.4.0 Pero al usar ”pod update…” Un vistazo a Podfile.lock
  • 51. Carthage genera binarios de los frameworks y el desarrollador los integra a su proyecto 2 formas de instalación : Para consultar la versión de Carthage A diferencia de Cocoapods, Carthage no ”altera” la estructura del proyecto No requiere de Podspecs o repositorio centralizado para el desarrollo de dependencias. Instalador .pkg Homebrew package manager (Homebrew ayuda a instalar herramientas para Mac OS) $carthage version
  • 52. Archivo de configuración donde indicamos qué dependencias / librerias deseamos instalar * Otros elementos opcionales: nombre de rama/ nombre del tag / commit Consiste de: github "Alamofire/Alamofire" == 45 Cartfile Ejemplo: Origen Nombre Versión (opcional) Origen de la dependencia puede ser: Github Git (la palabra git seguido de git://, http://, ssh:// o path local)
  • 53. Ejemplo: Integrar Lottie, una librería que parsea animaciones con Adobe After Effects en formato json para renderizarlos en pantalla.
  • 54. Ejemplo: Integrando Lottie con Carthage 1. Definimos nuestro Cartfile de la siguiente manera: 2. En terminal ingresamos el siguiente comando para la descarga y generación de frameworks por cada dependencia: $carthage update
  • 55. Ejemplo: Integrando Lottie con Carthage 3. A diferencia de Cocoapods, Carthage NO genera un xcworkspace para que podamos trabajar, sino que crea: Archivo que indica las versiones de nuestras dependencias. Ideal subirlo a control de versiones Contiene los frameworks construidos por Carthage que se integrarán manualmente al proyecto.Directorio para verificar el código fuente de cada dependencia. Su contenido puede sobreescribirse.
  • 56. Ejemplo: Integrando Lottie con Carthage 4. Del directorio Carthage>Build>iOS arrastramos el Lottie.framework a la sección de Linked Frameworks and Libraries.
  • 57. Ejemplo: Integrando Lottie con Carthage 5. Ahora bien, necesitamos asegurarnos que los frameworks se copien con un Run Script. • Se selecciona el target y la pestaña Build Phases • En la esquina superor izquierda se presiona “+” para agregar new Run Script • Se ingresa el siguiente script • Para input files $(SRCROOT)/Carthage/Build/iOS /Lottie.framework /usr/local/bin/carthage copy-frameworks
  • 58. Ejemplo: Integrando Lottie con Carthage 6. Como paso final, queda incorporar nuestra librería dentro del View Controller adecuado.
  • 60. Carthage El control de versiones debe dar seguimiento (track) al archivo como .gitmodules El proyecto principal guarda una referencia al commit del submódulo. Asegurarse que esa referencia se suba al repositorio del proyecto para el resto del equipo. Submódulos Git Se cuentan con 2 opciones: - Recrear el ambiente * Subir al repositorio remoto Podfile.lock y Podfile * Ejecutar pod install y bajar las dependencias correspondientes. - Subir al control de versiones nuestros pods Cocoapods Buenas prácticas Se cuentan con 2 opciones: - Recrear el ambiente * Subir al repositorio remoto Cartfile.resolved y Cartfile * Ejecutar carthage bootstrap y bajar las dependencias correspondientes.
  • 61. Submódulos Cocoapods Carthage Requisitos de instalación - $sudo gem install cocoapods Homebrew Instalador .pkg Proceso de configuración Clonar repositorio Incorporar manualmente el framework Generar archivo de configuración (pod init) Instalar las dependencias (pod install) Trabajar en nueva estructura de proyecto Generar archivo de configuración Instalar dependencias (carthage update) Incorporar manualmente los frameworks Modifica la estructura del proyecto No Sí No Archivo de especificación - Podspecs - Archivo de configuración .gitmodules Podfile Cartfile Archivo con versiones - Podfile.lock Cartfile.resolved Modo de actualizar frameworks a últimas versiones mediante Git (checkout, pull) Actualizando Podfile Ingresar en linea de comando - pod update Actualizando Cartfile Ingresar en linea de comando - carthage update --platform iOS Ventajas Fácil de instalar si contamos con buenas bases en GIT Fácil de instalar Se tiene la opción de recrear el ambiente ó trabajar con los mismos pods Fácil de instalar Flexible, indicamos diferentes origenes de las dependencias Se tiene la opción de recrear el ambiente ó trabajar con los mismos binarios Desventajas Complejo de gestionar No contamos con un archivo con las versiones (Podfile.lock y Cartfile.resolved) Mantenimiento del Podspec Falta mayor flexibilidad al indicar los origenes de dependencias. Asegurarse de incorporar los frameworks manualmente tras instalar o actualizar
  • 63. Más información • What are Dependency Managers? https://medium.com/prodsters/what-are-dependency-managers-26d7d907deb8 • An Introduction to CocoaPods (Route 85) https://www.youtube.com/watch?v=iEAjvNRdZa0 • CocoaPods and Lockfiles (Route 85) https://www.youtube.com/watch?v=H- zK1mEwTe0&index=12&t=0s&list=PLOU2XLYxmsIKGQekfmV0Qk52qLG5LU2jO • Carthage https://github.com/Carthage/Carthage#license • Cómo crear, instalar y utilizar un CocoaPod con storyboards y VCs. https://medium.com/@angelmoralesk/c%C3%B3mo-crear-instalar-y-utilizar-un-cocoapod-con-sus- storyboards-y-vcs-e0b791a6e087
  • 64. Más información • Dependency Management Using Git Submodules https://www.raywenderlich.com/155150/dependency-management-using-git-submodules • Circle Menu https://github.com/Ramotion/circle- menu?utm_source=mybridge&utm_medium=blog&utm_campaign=read_more • Lottie https://github.com/airbnb/lottie-ios