2016-08-17 5 views
-1

Я делаю приложение для будильника. На симуляторе есть две вещи, но не на моем устройстве.(iOS Swift) Некоторые функции работают на симуляторе, но не на устройстве

1) Согласно сайту this, если для UIApplicationExitsOnSuspend установлено значение «ДА», приложение всегда должно работать, даже если устройство заблокировано (при условии, что оно находится на переднем плане). Я использовал эту информацию, чтобы убедиться, что NSTimer работает, даже если устройство заблокировано. На симуляторе, независимо от того, сколько времени проходит (даже 10+ часов), NSTimer всегда работает, и звук всегда срабатывает (даже если я блокирую экран симулятора). Когда я подключаю свое устройство iPhone к компьютеру и запускаю приложение через xcode, он тоже хорошо работает. Но проблема в том, что как только я отключу свой телефон и загружаю сохраненное приложение, иногда работает NSTimer, а иногда нет.

2) Локальные уведомления: на симуляторе местные уведомления работают хорошо, но на устройстве iPhone уведомления запускаются в случайные моменты времени, а иногда даже не срабатывают. Но на симуляторе местные уведомления срабатывают точно. Я тестировал по-разному (например, установив локальное уведомление, чтобы запустить 20 секунд после загрузки приложения, а затем выйти из приложения, чтобы он находился в фоновом режиме), но он не срабатывает в указанное время и, как я уже сказал, иногда даже не срабатывает ,

В таком случае, следует ли доверять симулятору или устройству iPhone? Может ли это быть ошибкой или это то, что я делаю неправильно?

ответ

2

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

Хорошо известно, что вы не должны доверять симулятору за фоновое поведение. Проблема NSTimer - отличный пример. Проблема в том, что симулятор - это ваш компьютер, а не устройство iOS. Таймеры фактически не работают в фоновом режиме; Симулятор вводит вас в заблуждение. (Проблема, когда приложение ведет себя по-разному на устройстве, если запускается из Xcode и работает независимо, немного более удивительно, но в этом случае я полагаю, что не все , что удивительно: вы были очень умны, чтобы думать о тестирование в обоих направлениях.)

И, конечно, есть лотов функций iOS, которые вообще не работают на симуляторе.

+0

Я не думаю, что это проблема Мэтта. В случае NSTimer он хорошо работает на моем устройстве, пока он проходит через xcode. Но когда я не запускаю xcode, то это не так ... –

+0

Также, как и в случае локального уведомления, я получаю его в случайное время .... –

+0

«Я не думаю, что это проблема Мэтт» I не знаю, что вы подразумеваете под этим. Вы спросили, что мне доверять, и я сказал вам ответ. Ваш тест на устройстве, запускающемся с трамплина, является окончательным тестом (и даже более окончательным, если вы делаете сборку выпуска); больше ничего. Вы можете верить мне или не верить мне, но это ответ. – matt

0

Я выяснил, проблема для # 2. Я просто отменил предыдущие уведомления, прежде чем запускать новые.

У меня все еще проблемы с первой проблемой.

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