25 июля 2009 в 18:53

Использование акселерометра в iPhone симуляторе

Как разрабатывать приложения для iPhone, использующее акселерометр, мы уже знаем. Теперь осталось научиться тестировать его в симуляторе.

Такая необходимость может возникнуть по нескольким причинам: нет iPhone, либо вы еще не присоединились к iPhone Developer Program, поэтому нет возможности запустить его на реальном устройстве.

Для использования акселерометра в симуляторе нам понадобятся:
  1. Mac cо встроенным акселерометром (MacBook, MacBook Pro, MacBook Air), показания которого и будем передавать в симулятор
  2. Unimotion  — программа, снимающая показания со встроенного в Mac акселерометра
  3. Accelerometer Simulator  — приложения, которое посылает показания с настоящего акселерометра iPhone на Mac. (Состоит из 2х частей: приложения, устанавливающегося на iPhone; и класса, подключаемого к тестируемому приложению.)
  4. Скрипт 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 и выбрана только потому, что в ней используется акселерометр для управления игроком.
Дмитрий Родионцев @DimaRad
карма
23,2
рейтинг 0,0
Самое читаемое Разработка

Комментарии (14)

  • 0
    Справедливости ради стоит отметить, что существуют способы работы с реальным [джейлбрейкнутым] устройством еще до оплаты $99. :)
    • +3
      А лучше просто оплатить и не парить мозги раз начали заниматься такими делами…
    • 0
      Пруфлинк? =)
      • +1
        • 0
          Где-же ты был мил человек два дня назад? ))
          Хотя,… не жалуюсь. С оф. сертификатом удобнее и гимора меньше.
  • 0
    Я вчера искал способ, как записать демонстрацию своего приложения для iPhone, и во время этих поисков наткнулся на ссылку: http://code.google.com/p/accelerometer-simulator/
    Если я правильно понял, это приложения для iPhone, позволяющее использовать его акселерометр совместно с iPhone Simulator. Использует UDP. А еще позволяет использовать акселерометр в простых программах.
  • 0
    Интересно, а есть игрухи для макбуков с использованием акселерометров? Ну типа шарик по полю прокатить как на iPhone… :) Понимаю что баловство… Но так, чисто поржать, может быть… :) Для демонстрации возможностей, так сказать… :)
  • 0
    Интересно, что для Android такая штука под Mac-и появилась практически одновременно с выходом SDK. А для iPhone впервые вижу, хотя даже feature request в Apple постил в свое время :)
  • 0
    Тоже занимался решением вопроса эмуляции акселерометра. Нашел полностью софтварное решение.
    Если интересно, могу написать подробно.
    • 0
      Если есть желание — пишите. Думаю, заинтересованным людям пригодится. Тем более, для тестирования можно будет использовать компьютер без акселерометра.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Интересные публикации