2014-03-12 9 views
7

Я работаю над UIAutomation. Мне нужно изменить местоположение, когда приложение находится в фоновом режиме. Я попытался следующий код:UIAutomation: изменить местоположение, когда приложение находится в фоновом режиме

var target = UIATarget.localTarget(); 
UIATarget.localTarget().deactivateAppForDuration(30); 
target.setLocation({longitude:77.50, latitude:12.50}); 

но target.setLocation не вызывалось, пока приложение не появляется на передний план.

Может ли кто-нибудь рассказать мне, как я могу изменить местоположение, когда приложение находится в фоновом режиме.

+0

Вы пытались добавить местоположение к ключу UIBackgroundModes в файле info.plist ..? – Bharath

+0

@Bharath Я не добавлял, но даже если я попытаюсь войти в систему с помощью UIALogger, эта строка будет выполнена после того, как приложение перейдет на передний план. –

+0

@Bharath Я попытался добавить место в UIBackgroundModes, но по-прежнему не помогал. –

ответ

5

К сожалению, UIAutomation может только автоматизировать приложение, к которому он присоединен. Когда приложение не является «активным», ему не с чем поговорить. Используя lockForDuration, deactivateAppForDuration и т. Д. Блокирует, пока он отказывается от управления системой, делая ваше приложение неактивным. Пока приложение находится в этом состоянии, UIAutomation не может отправлять ему больше сообщений. Я бы порекомендовал подачу радара с просьбой установить местоположение, пока приложение неактивно.

Когда я сталкивался с подобной проблемой в прошлом, мне пришлось использовать AppleScript для изменения местоположения симулятора, чтобы получить необходимый мне эффект.

С тех пор вы обновили свои комментарии, указав, что вы тестируете навигационное приложение. Что ж! Это немного по-другому. Если вы НЕ НАСТОЯТЕЛЬНО требуете UIAutomation и пытаетесь использовать его только как способ установки местоположения:

Xcode позволяет вам моделировать маршрут с использованием файлов GPX, и это МОЖЕТ использоваться с инструментами.

  1. Найдите подходящий файл GPX, предпочтительно тот, который является дорожкой.
  2. Перейдите к схеме вашего проекта. В действии «Запуск» перейдите на вкладку «Параметры». Установите флажок «Разрешить определение местоположения» и используйте раскрывающийся список, чтобы добавить GPX.
  3. Запустите приложение из Xcode.
  4. ...
  5. Прибыль!
+0

Можете ли вы поделиться некоторыми своими AppleScript, чтобы сделать это? Кроме того, смогли ли вы имитировать скорость? – Calvin

+0

Я не пытался имитировать движение, а AppleScript - это взлом, который использует System Events (сам iOS Simulator не имеет скриптового словаря). Для того, что вы пытаетесь сделать, я бы на самом деле посмотрел на изменение приложения для чтения файла GPX для маршрута и отправку этих мест в ваш основной делегат местоположения. – quellish

+0

Я пытался использовать Инструменты с UIAutomation, чтобы я мог установить lat/lng, заголовок, скорость и т. Д. – Calvin

1

Я думаю, вы можете использовать часть обновления в фоновом режиме в качестве сервиса. Хотя я новичок в этом мире. Вы можете попробовать это. Спасибо

+0

Можете ли вы рассказать о том, как именно СО должно это сделать? Этот ответ не очень помогает (т. Е. Вообще). – HAS

1

Обратитесь к разделу выборки фона в этом link. Надеюсь, это вам поможет

1

Если вы хотите, чтобы ваше приложение выполняло методы в фоновом режиме, вам нужно включить «фоновый режим» на вкладке возможностей вашего приложения. вам нужно выбрать режим, например «обновления местоположения». но будьте осторожны: у яблока есть ограничения того, какие приложения разрешены для запуска в фоновом режиме. режим «обновления местоположений» разрешен только для приложений, таких как приложения для навигации. подробнее см. в руководствах магазина приложений.

Если вы не настроили «фоновый режим» на «да», ваше приложение имеет 5 секунд, чтобы завершить выполнение задач после поворота на задний план, а затем все задачи будут остановлены и никогда не будут вызываться до тех пор, пока вы снова не перейдете на передний план.

+0

Это действительно приложение для навигации, которое нужно запустить в фоновом режиме. Чтобы правильно протестировать приложение без фактического выхода в реальный мир, я хочу, чтобы смоделировать изменения в местоположении в фоновом режиме, но похоже, что UIAutomation не позволит нам делать это, если приложение не находится на переднем плане , – Calvin

+0

Обратитесь в службу технической поддержки разработчика и объясните, что вы пытаетесь сделать. У них может быть решение для вас, которое будет работать. – quellish

1

Обратитесь к http://code.tutsplus.com/tutorials/ios-7-sdk-working-with-background-fetch--mobile-20520 за фоновым снимком. Я надеюсь, это поможет вам.

+0

Ссылка на потенциальное решение всегда приветствуется, но, пожалуйста, [добавить контекст вокруг ссылки] (http://meta.stackoverflow.com/a/8259/169503), поэтому ваши друзья-пользователи будут иметь представление о том, что это такое и почему оно есть. Всегда указывайте наиболее значимую часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме. Примите во внимание, что быть более чем ссылкой на внешний сайт_ является возможной причиной [Почему и как удаляются некоторые ответы?] (Http://stackoverflow.com/help/deleted-answers). –

Смежные вопросы