Как разрабатывать приложения для iPhone, использующее акселерометр, мы уже знаем. Теперь осталось научиться тестировать его в симуляторе.
Такая необходимость может возникнуть по нескольким причинам: нет iPhone, либо вы еще не присоединились к iPhone Developer Program, поэтому нет возможности запустить его на реальном устройстве.
Для использования акселерометра в симуляторе нам понадобятся:
Для начала, необходимо собрать Unimotion. C sourceforge.net скачиваем и распаковываем архив с программой. Переходим в распакованую папку и выполняем
Из Accelerometer Simulator берем
Запускаем приложение в симуляторе, и эмулируем акселеромер iPhone, наклоняя Mac влево-вправо :).
—
Вольный перевод Use the Mac's accelerometer in the iPhone Simulator.
Для примера можно взять игру Tweejump и поиграть в нее прямо на Mac-е. Она была найдена на просторах GitHub и выбрана только потому, что в ней используется акселерометр для управления игроком.
Такая необходимость может возникнуть по нескольким причинам: нет iPhone, либо вы еще не присоединились к iPhone Developer Program, поэтому нет возможности запустить его на реальном устройстве.
Для использования акселерометра в симуляторе нам понадобятся:
- Mac cо встроенным акселерометром (MacBook, MacBook Pro, MacBook Air), показания которого и будем передавать в симулятор
- Unimotion — программа, снимающая показания со встроенного в Mac акселерометра
- Accelerometer Simulator — приложения, которое посылает показания с настоящего акселерометра iPhone на Mac. (Состоит из 2х частей: приложения, устанавливающегося на iPhone; и класса, подключаемого к тестируемому приложению.)
- Скрипт
sendaccsim.py
, который конвертирует показания от Unimotion для использования в Accelerometer Simulator:
import sys, socket, time, traceback
kCFAbsoluteTimeIntervalSince1970 = 978307200.0 #from CFDate.c
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('',0))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
while 1:
try:
line = sys.stdin.readline()[:-1] # read line and strip EOL
fields = line.split() # split around space character
floatfields = map(float, fields) # convert to floats
# transform coordinate system, from Sudden Motion Sensor to UIAcceleration format
x, y, z = map(lambda x: -1 * x, floatfields)
# change epoch to be compatible with CFAbsoluteTimeGetCurrent()
currentTime = time.time() - kCFAbsoluteTimeIntervalSince1970
accdata = ','.join(map(str,('ACC: 0',currentTime,x,y,z)))
sock.sendto(accdata, ('<broadcast>', 10552))
except (ValueError, KeyboardInterrupt):
sock.close()
sys.exit(-1)
except:
traceback.print_exc()
Для начала, необходимо собрать Unimotion. C sourceforge.net скачиваем и распаковываем архив с программой. Переходим в распакованую папку и выполняем
make
, после чего у нас появляется папка bin
, содержащая motion
и libUniMotion.dylib
. Туда же копируем sendaccsim.py
и запустим его:$ ./motion -f 17 | python sendaccsim.py
Из Accelerometer Simulator берем
AccelerometerSimulation.h
и AccelerometerSimulation.m
и подключем к нашему проекту в AppDelegate.h
:#import "AccelerometerSimulation.h"
Запускаем приложение в симуляторе, и эмулируем акселеромер iPhone, наклоняя Mac влево-вправо :).
—
Вольный перевод Use the Mac's accelerometer in the iPhone Simulator.
Для примера можно взять игру Tweejump и поиграть в нее прямо на Mac-е. Она была найдена на просторах GitHub и выбрана только потому, что в ней используется акселерометр для управления игроком.