Tengo el mismo deseo. Quiero poder guardar capturas de pantalla de algunas pantallas en mi aplicación sin todo el trabajo manual. Todavía no he llegado, pero he comenzado.
La idea es rastrear /var/log/system.log, donde va la salida de las declaraciones NSLog. Canalizo la salida a un programa python. El programa python lee todas las líneas de stdin y cuando la línea coincide con un patrón específico, llama a captura de pantalla.
NSLog(@"screenshot mainmenu.png");
que provocará una captura de pantalla llamado "XX. Mainmenu YY.png" que se crea cada vez que se llama. XX es el número de la captura de pantalla desde que comenzó el programa. YY es el número de la captura de pantalla "mainmenu".
Incluso me han añadido algunas características innecesarias:
NSLog(@"screenshot -once mainmenu.png");
Esto sólo ahorrará "XX mainmenu.png." Una vez.
NSLog(@"screenshot -T 4 mainmenu.png");
Esto hará que la captura de pantalla después de un retraso de 4 segundos.
Después de ejecutar una aplicación con el registro correcto, si lo hubieran creado capturas de pantalla con los siguientes nombres:
00. SplashScreen.png
01. MainMenu 01.png
03. StartLevel 01.png
04. GameOver 01.png
05. MainMenu 02.png
darle una oportunidad:
Añadir algunas declaraciones NSLog a su código
$ tail -f -n0 /var/log/system.log | ./grab.py
Comience su aplicación para el iPhone en el simulador
jugar con su aplicación
echar un vistazo a las capturas de pantalla que muestran hasta donde se inició el programa grab.py
agarrar.PY:
#!/usr/bin/python
import re
import os
from collections import defaultdict
def screenshot(filename, select_window=False, delay_s=0):
flags = []
if select_window:
flags.append('-w')
if delay_s:
flags.append('-T %d' % delay_s)
command_line = 'screencapture %s "%s"' % (' '.join(flags), filename)
#print command_line
os.system(command_line)
def handle_line(line, count=defaultdict(int)):
params = parse_line(line)
if params:
filebase, fileextension, once, delay_s = params
if once and count[filebase] == 1:
print 'Skipping taking %s screenshot, already done once' % filebase
else:
count[filebase] += 1
number = count[filebase]
count[None] += 1
global_count = count[None]
file_count_string = (' %02d' % number) if not once else ''
filename = '%02d. %s%s.%s' % (global_count, filebase, file_count_string, fileextension)
print 'Taking screenshot: %s%s' % (filename, '' if delay_s == 0 else (' in %d seconds' % delay_s))
screenshot(filename, select_window=False, delay_s=delay_s)
def parse_line(line):
expression = r'.*screenshot\s*(?P<once>-once)?\s*(-delay\s*(?P<delay_s>\d+))?\s*(?P<filebase>\w+)?.?(?P<fileextension>\w+)?'
m = re.match(expression, line)
if m:
params = m.groupdict()
#print params
filebase = params['filebase'] or 'screenshot'
fileextension = params['fileextension'] or 'png'
once = params['once'] is not None
delay_s = int(params['delay_s'] or 0)
return filebase, fileextension, once, delay_s
else:
#print 'Ignore: %s' % line
return None
def main():
try:
while True:
handle_line(raw_input())
except (EOFError, KeyboardInterrupt):
pass
if __name__ == '__main__':
main()
Problemas con esta versión:
Si usted quiere tomar una captura de pantalla de la ventana única simulador de iPhone, usted tiene que hacer clic en el simulador de iPhone ventana para cada pantalla. screencapture se niega a capturar ventanas individuales a menos que esté dispuesto a interactuar con ella, una decisión de diseño extraña para una herramienta de línea de comandos.
Actualización: Ahora iPhone simulator cropper (en http://www.curioustimes.de/iphonesimulatorcropper/index.html) funciona desde la línea de comandos. Entonces, en lugar de usar la captura de pantalla integrada, descárgala y úsala en su lugar. Entonces, ahora el proceso es completamente automático.
Me gustaría escuchar una respuesta para hacer esto desde el dispositivo también. –