아이폰 시뮬레이터 캡쳐 받기 - iOS-Simulator Cropper 포스팅에서 마지막에 스크립트로 자동화 하기가 있었습니다.
사이트에서는 그냥.. 캡쳐만 대체해 주면 잘 된다고 했는데 -_-;
잘 되질 않더군요.
코드도 손 볼 부분도 좀 있고 해서..
나름대로 수정을 했습니다.
먼저 자동화 된 캡쳐를 받기 위해서는 소스코드에 NSLog를 등록 합니다.
형식은 3가지를 지원 합니다.
그냥.. 일반적인 캡쳐
첨부파일 다운로드 :
우선 첨부 파일을 다운로드 받아서, 더블클릭해서 압축을 푸시거나,
쉘이 편하신 분은 터미널에서
이렇게 해서 압축을 푸시면 됩니다.
그리고 해당 경로로 이동 후
이렇게 실행하시면 됩니다.
이미지에서는 바탕화면에 캡쳐 하도록 되어 있습니다.
그리고 시뮬레이터를 실행 시켜 주시면, 해당 타이밍에 착착~ 캡쳐를 받아 줄겁니다.
참 쉽죠?
아래는 코드를 적어 봅니다.
iOSCapture.sh
iOSLogGrab.py
참고 :
사이트에서는 그냥.. 캡쳐만 대체해 주면 잘 된다고 했는데 -_-;
잘 되질 않더군요.
코드도 손 볼 부분도 좀 있고 해서..
나름대로 수정을 했습니다.
먼저 자동화 된 캡쳐를 받기 위해서는 소스코드에 NSLog를 등록 합니다.
형식은 3가지를 지원 합니다.
그냥.. 일반적인 캡쳐
앞 쪽과 뒤쪽은 숫자는 자동으로 증가 합니다.NSLog(@"screenshot mainmenu.png");
NSLog(@"screenshot -once mainmenu.png");-once를 넣어 주시면 딱 한번 만 캡쳐를 받아 줍니다.
NSLog(@"screenshot -delay 4.0 mainmenu.png");-delay를 넣어 주시고 뒤에 숫자를 넣어 주시면, 숫자 만큼 초가 지난후에 캡쳐를 받아 줍니다.
위에서 받은 캡쳐는 4초 후에 캡쳐가 받아 지겠죠?
첨부파일 다운로드 :
우선 첨부 파일을 다운로드 받아서, 더블클릭해서 압축을 푸시거나,
쉘이 편하신 분은 터미널에서
$ tar -zxvf iOS-Simulator-Screenshot.tgz
이렇게 해서 압축을 푸시면 됩니다.
그리고 해당 경로로 이동 후
./iOSCapture.sh [캡쳐 할 경로]
이렇게 실행하시면 됩니다.
이미지에서는 바탕화면에 캡쳐 하도록 되어 있습니다.
그리고 시뮬레이터를 실행 시켜 주시면, 해당 타이밍에 착착~ 캡쳐를 받아 줄겁니다.
참 쉽죠?
아래는 코드를 적어 봅니다.
iOSCapture.sh
#!/bin/bash
# 아이폰 캡쳐 자동화
#
# 사용법
#
# $ iOSCapture.sh [저장 경로]
#
# 예) iOSCapture.sh ~/Desktop
#
#-------------------
# 어플리케이션 추가
#
# * 캡쳐 하기
# NSLog(@"screenshot mainmenu.png");
# * 한번만 캡쳐 하기
# NSLog(@"screenshot -once mainmenu.png");
# * 2초후에 캡쳐 하기
# NSLog(@"screenshot -delay 2.0 mainmenu.png");
#
# 참고 :
# http://stackoverflow.com/questions/1360552/automate-screenshots-on-iphone-simulator/1579182#1579182
# 사용법에 대한 함수.
function usage()
{
echo "`basename $0` [-h] [targetPath]"
echo " -h : 도움말"
echo " targetPath : 저장 할 경로"
}
while getopts :hr: optname ;do
case $optname in
h)
usage; exit 1;;
esac
done
tail -f -n0 /var/log/system.log | ./iOSLogGrab.py $1
iOSLogGrab.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import string
import re
import os
import threading
from collections import defaultdict
captureApplication = "./iOS-Simulator\ Cropper.app/Contents/MacOS/iOS-Simulator\ Cropper"
defaultPath = "."
def screenshotRun(filename):
command_line = captureApplication + " -p 1 -f " + filename
print command_line
os.system(command_line)
def screenshot(filename, select_window=False, delay_s=0):
t = threading.Timer(delay_s, screenshotRun, [defaultPath+"/%s" % filename])
t.start()
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*(\.?\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 = float(params['delay_s'] or 0)
print str(delay_s)
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__':
if len(sys.argv) > 1:
print "default path : " + sys.argv[1]
defaultPath = sys.argv[1]
print defaultPath
main()
참고 :
- http://www.curioustimes.de/iphonesimulatorcropper/index.html
- http://stackoverflow.com/questions/1360552/automate-screenshots-on-iphone-simulator/1579182#1579182
댓글