3. Intro
• Las Apps son cada vez más complejas,
expuestas a factores externos, integradas con
otros complementos (soft, hard)
• Necesitamos saber que sucede mientras
nuestras Apps están siendo usadas
• Necesitamos saber por qué no funcionan como
esperábamos
4. Intro
• Podemos conocer que sucede en nuestra App a
través de dos herramientas:
• Gauges
• Instruments
5. Intro
• Gauges: integrado en el propio Xcode, nos
proporciona información básica de CPU y
memoria mientras depuramos
• Info básica pero muy util, p.e. si usamos colas y
les ponemos nombre podemos ver la actividad
del Thread a simple vista
6.
7. Intro
• Cuando Gauges no cubre nuestras necesidades
tenemos Instruments
• Instruments es una herramienta complementaria
a Xcode, está incluida en el entorno.
8. Instruments
• Instruments es una herramienta complementaria a Xcode, está
incluida en el entorno.
• Con Instruments podemos:
• Examinar el comportamiento de uno o varios procesos
• Hacer un análisis de rendimiento
• Automatizar test de UI
• Someter nuestras Apps a Stress
• …
11. Instruments
• Requisitos: podemos utilizar la herramienta
sobre los dispositivos o el simulador, en función
al tipo de plantilla que usemos será necesario
añadir alguna variable de entorno o setting de el
dispositivo.
• Limitaciones: No siempre podemos aplicar las
plantillas sobre los dispositivos (p.e. Core Data)
13. Instruments
• Podemos personalizar la herramienta a nuestro
antojo
• Crear plantillas para aplicar en nuestros
proyectos
• Crear nuevos grupos
14. Instruments
• Grupos Custom nos permiten agrupar los
contadores como mejor se ajusten a nuestras
necesidades
• Demo
15. Instruments
• Las plantillas custom nos permiten agrupar
varios tipos de instruments bajo el mismo
documento y reutilizar para otros proyectos
• Demo
16. Instruments
• Captura de datos, podemos obtener de:
• All Processes
• Attach to Process
• Choose Target
17. Instruments
• Captura de datos, pueden ser:
• Simulador
• Dispositivo conectado
• Sin conectar, ideal para apps deportivas :-)
• Necesitamos configurar la WIFI con Bojour y
multicast -> ON en el AP
18. Instruments
• Modos:
• La captura de datos con Instruments aumenta
la carga y disminuye el rendimiento de la App
analizada
• Es posible usar Instruments de manera
alternativa: Deferred Mode (modo silencioso),
no vemos la interfaz de la herramienta pero
captura y genera un fichero con los datos
recopilados
19. Instruments
• Modos:
• Hay plantillas que directamente no usan UI
mientras capturan
• iprofiler
• $ iprofiler -timeprofiler -activitymonitor -T 10 -
d ~/temporales/
23. Memory leaks
• A veces nuestras Apps no liberan las
referencias de los objetos creados
• Con ARC este problema ha sido casi
erradicado…. pero no exterminado.
• Es posible encontrar memory leaks en
frameworks antiguos no ARC y sobre todo en
APIs C.
24. Memory leaks
• Instruments nos ofrece una plantilla llamada
Leaks, es usada siempre de manera conjunta
con Allocations
• Si la app tiene algún leak, nos muestra el
nombre de la clase del objeto que lo provoca o
el código responsable
27. Core Animation
• Esta plantilla solo está disponible para capturar datos del
dispositivo
• Podemos medir y capturar la actividad de CA en nuestra
App. Los datos los devuelve en fps
• los contadores son:
• Color Blended Layers.
• Color Hits Green and Misses Red
• etc…
28. Core Animation
• También tenemos plantillas especificas para
OpenGL:
• Analizar el uso directo e indirecto de OpenGL
• Detectar posibles cuellos de botella en driver
de OpenGL
30. UI Testing
• Una de las funcionalidades más interesantes, el
desarrollo de Apps el peso de la UI es
importante.
• Hacer Testing de la UI puede ser tan sencillo
como usar tropas de testers “probando” o usar
una herramienta que simule una sesión de un
usuario y la ejecute las veces que sean
necesarias
31. UI Testing
• Con instruments tenemos una plantilla llamada
Automation
• Esta plantilla espera un script JS con la
secuencia de navegación
• Desde esta plantilla tenemos un editor que nos
permite capturar la navegación, traducirla a JS y
ejecutarla
32. UI Testing
• Para que esto funcione tenemos que tocar
nuestro código y establecer la propiedad
Accesibility a ON, además del accesibiltyLabel
de cada uno de los elementos que queremos
capturar
• Cada script es exclusivo de una App, no es
posible reutilizar
37. Análisis de Rendimiento
• Tenemos varias plantillas que van desde una
visión general de los contadores más básicos
(CPU, Memoria) hasta la posibilidad de
establecer PMCs sobre algunos aspectos
específicos del hardware
38. Análisis de Rendimiento
• Básicos
• Time Profiler, nos proporciona info básica del
tipo tiempo de proceso, llamadas, etc…
• Activity Monitor
• System Trace: Es ejecutado en modo
silencioso con el objetivo de no “molestar”,
obtiene datos de Memoria (Allocations), CPU
39. Análisis de Rendimiento
• Un poco menos básicos
• Energia, GPS, Bluetooth
• Sampler, GCD, Connections