Использование акселерометра в 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 и выбрана только потому, что в ней используется акселерометр для управления игроком.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 14
    • 0
      Справедливости ради стоит отметить, что существуют способы работы с реальным [джейлбрейкнутым] устройством еще до оплаты $99. :)
      • +3
        А лучше просто оплатить и не парить мозги раз начали заниматься такими делами…
        • 0
          Пруфлинк? =)
            • 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
              Если есть желание — пишите. Думаю, заинтересованным людям пригодится. Тем более, для тестирования можно будет использовать компьютер без акселерометра.

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