Instruments: el 3 en 1 de los
desarrolladores
Juan A. Martín
Agenda
• Intro
• Algunos escenarios de uso:
• Memoria
• Gráficos
• UI
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
Intro
• Podemos conocer que sucede en nuestra App a
través de dos herramientas:
• Gauges
• Instruments
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
Intro
• Cuando Gauges no cubre nuestras necesidades
tenemos Instruments
• Instruments es una herramienta complementaria
a Xcode, está incluida en el entorno.
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
• …
Instruments
• Visión rápida de Instruments (ver instruments)
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)
Instruments
Instruments
• Podemos personalizar la herramienta a nuestro
antojo
• Crear plantillas para aplicar en nuestros
proyectos
• Crear nuevos grupos
Instruments
• Grupos Custom nos permiten agrupar los
contadores como mejor se ajusten a nuestras
necesidades
• Demo
Instruments
• Las plantillas custom nos permiten agrupar
varios tipos de instruments bajo el mismo
documento y reutilizar para otros proyectos
• Demo
Instruments
• Captura de datos, podemos obtener de:
• All Processes
• Attach to Process
• Choose Target
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
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
Instruments
• Modos:
• Hay plantillas que directamente no usan UI
mientras capturan
• iprofiler
• $ iprofiler -timeprofiler -activitymonitor -T 10 -
d ~/temporales/
Instruments
!
• DEMOS
memory leaks
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.
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
Memory leaks
Core Animation
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…
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
UI Testing
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
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
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
UI Testing
• var target = UIATarget.localTarget();
!
• target.frontMostApp().tabBar().buttons()["UITest"].tap();
• target.frontMostApp().mainWindow().buttons()["Boton1"].tap();
• target.frontMostApp().mainWindow().buttons()["Boton2"].tap();
• target.frontMostApp().tabBar().buttons()["Animation"].tap();
• target.tap({x:248.00, y:86.50});
• target.tap({x:55.50, y:480.50});
Stress Test Tool
UI Testing
for ( i =0; i <100; i++){
var target = UIATarget.localTarget();
target.frontMostApp().tabBar().buttons()["UITest"].tap();
target.frontMostApp().mainWindow().buttons()["Boton1"].tap();
target.frontMostApp().mainWindow().buttons()["Boton2"].tap();
target.frontMostApp().tabBar().buttons()["Animation"].tap();
target.tap({x:248.00, y:86.50});
target.tap({x:55.50, y:480.50});
}
Análisis de Rendimiento
Bottleneck, CPU, GCD…
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
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
Análisis de Rendimiento
• Un poco menos básicos
• Energia, GPS, Bluetooth
• Sampler, GCD, Connections
{“me”:
{“speaker”:“Juan A. Martin”,
“company”:“CloudOnMobile”,
“contact”: { "mail":"juan.antonio.martin@gmail.com”,
"twitter":"@byjuanamn",
"skype":"by-juanamn"
}
}
}
Muchas Gracias

Instruments 3 en 1

  • 1.
    Instruments: el 3en 1 de los desarrolladores Juan A. Martín
  • 2.
    Agenda • Intro • Algunosescenarios de uso: • Memoria • Gráficos • UI
  • 3.
    Intro • Las Appsson 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 conocerque sucede en nuestra App a través de dos herramientas: • Gauges • Instruments
  • 5.
    Intro • Gauges: integradoen 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
  • 7.
    Intro • Cuando Gaugesno cubre nuestras necesidades tenemos Instruments • Instruments es una herramienta complementaria a Xcode, está incluida en el entorno.
  • 8.
    Instruments • Instruments esuna 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 • …
  • 9.
    Instruments • Visión rápidade Instruments (ver instruments)
  • 11.
    Instruments • Requisitos: podemosutilizar 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)
  • 12.
  • 13.
    Instruments • Podemos personalizarla herramienta a nuestro antojo • Crear plantillas para aplicar en nuestros proyectos • Crear nuevos grupos
  • 14.
    Instruments • Grupos Customnos permiten agrupar los contadores como mejor se ajusten a nuestras necesidades • Demo
  • 15.
    Instruments • Las plantillascustom nos permiten agrupar varios tipos de instruments bajo el mismo documento y reutilizar para otros proyectos • Demo
  • 16.
    Instruments • Captura dedatos, podemos obtener de: • All Processes • Attach to Process • Choose Target
  • 17.
    Instruments • Captura dedatos, 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: • Lacaptura 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: • Hayplantillas que directamente no usan UI mientras capturan • iprofiler • $ iprofiler -timeprofiler -activitymonitor -T 10 - d ~/temporales/
  • 20.
  • 22.
  • 23.
    Memory leaks • Aveces 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 • Instrumentsnos 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
  • 25.
  • 26.
  • 27.
    Core Animation • Estaplantilla 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éntenemos plantillas especificas para OpenGL: • Analizar el uso directo e indirecto de OpenGL • Detectar posibles cuellos de botella en driver de OpenGL
  • 29.
  • 30.
    UI Testing • Unade 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 • Coninstruments 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 • Paraque 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
  • 33.
    UI Testing • vartarget = UIATarget.localTarget(); ! • target.frontMostApp().tabBar().buttons()["UITest"].tap(); • target.frontMostApp().mainWindow().buttons()["Boton1"].tap(); • target.frontMostApp().mainWindow().buttons()["Boton2"].tap(); • target.frontMostApp().tabBar().buttons()["Animation"].tap(); • target.tap({x:248.00, y:86.50}); • target.tap({x:55.50, y:480.50});
  • 34.
  • 35.
    UI Testing for (i =0; i <100; i++){ var target = UIATarget.localTarget(); target.frontMostApp().tabBar().buttons()["UITest"].tap(); target.frontMostApp().mainWindow().buttons()["Boton1"].tap(); target.frontMostApp().mainWindow().buttons()["Boton2"].tap(); target.frontMostApp().tabBar().buttons()["Animation"].tap(); target.tap({x:248.00, y:86.50}); target.tap({x:55.50, y:480.50}); }
  • 36.
  • 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
  • 40.
    {“me”: {“speaker”:“Juan A. Martin”, “company”:“CloudOnMobile”, “contact”:{ "mail":"[email protected]”, "twitter":"@byjuanamn", "skype":"by-juanamn" } } } Muchas Gracias