Подтвердить что ты не робот

Устройство iPhone против симулятора iPhone

Я слышал о том, что приложения не работают должным образом на симуляторе, но правильно работают на самом устройстве iPhone. Кто-нибудь испытал приложение, которое отлично работает в симуляторе, но не на самом устройстве iPhone?

4b9b3361

Ответ 1

Имена файлов чувствительны к регистру на iPhone, но не в симуляторе.

Так, например, если вы попытаетесь загрузить изображение с помощью UIImage *iconImage = [UIImage imageNamed:"MyIcon.png"], но ваш ресурс на самом деле называется "myicon.png", то он будет работать на симуляторе, но не на устройстве.

Ответ 2

Если ваше приложение интенсивно работает с графикой, например, скажем, игра, производительность симулятора НЕ похожа на аппаратное обеспечение. Ваше приложение, вероятно, будет плавным и отлично работает на симуляторе, но на оборудовании оно, скорее всего, будет отображаться при сканировании, если вы не знаете, что делаете. Вы можете легко перейти от 60fps до 3fps между Simulator и аппаратным обеспечением.

Ответ 3

Функции тригонометрии могут возвращать разные результаты:

float a = cosf( 0.108271248639 );   
printf("%.12f", a);

//simulator: 0.994144439697
//device:    0.994144380093

Ответ 4

Порядок, в котором оцениваются параметры функции/конструктора, отличается:

int i = 0;

int f() { return ++i; }

int a, b;

int test(int p1, int p2) {

    a = p1;

    b = p2;

}

test( f(), f() );

//simulator: a = 2, b = 1

//device: a = 1, b = 2

Ответ 5

Я знаю, что есть некоторые отличия в реализации OpenGL ES между устройством и симулятором. Насколько я понимаю, это в основном из-за того, что графический чип на iPhone (PowerVR MBX) имеет значительно другие возможности, чем другие Mac-машины. Многие аппаратные ограничения не применяются в симуляторе, поэтому вполне возможно получить что-то в симуляторе, которое полностью потерпит крах на устройстве.

Существуют также некоторые расширения OpenGL ES, которые поддерживаются оборудованием iPhone, которые не поддерживаются в симуляторе. Я считаю, что основным является сжатие текстур PowerVR (PVRTC).

Другой проблемной областью может быть область памяти. Как ни странно, я не видел, чтобы симулятор автоматически применял ограничения памяти на устройстве. Таким образом, возможно иметь что-то, что работает в симуляторе, прекрасно, с удовольствием потребляя обильное количество ОЗУ и никогда не беспокоясь о том, чтобы освободить любое из них только для быстрого прекращения после короткого продолжения такого поведения при работе на устройстве.

Ответ 6

Есть определенные биты кода, которые не будут работать на симуляторе (например, с помощью Keychain iPhone), но почти для всех приложений симулятор будет работать точно так же, как iPhone.

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

Ответ 7

У меня возникла проблема с относительно простым таймером 1/30 секунды, чтобы делать обновления для игры. Он отлично работает в симуляторе и замораживает ввод данных на устройстве.

Ответ 8

Также обратите внимание, что при сборке для симулятора вы будете компилироваться в отношении фреймворков OS X (где это применимо), чтобы вы могли использовать методы и классы, которые недоступны в версиях фреймворков iPhone.

Один пример, который я могу придумать с головы, - это NSPredicate. Я смог скомпилировать и запустить приложение с использованием NSPredicate в симуляторе, но он не будет компилироваться для устройства, так как этот класс недоступен.

Ответ 9

Фингерпринты больше, чем конечная точка 1 пикселя курсора мыши. Чтобы выполнить правильное, даже минимальное тестирование юзабилити, вы должны развернуть свое приложение на устройстве.

Ответ 10

Существует множество тривиальных примеров. Например, вы можете выделить гораздо больше памяти на симуляторе, чем на реальном телефоне. Вы не можете получать push-уведомление на симуляторе, если у вас нет сетчатки Mac, шаг точки отображения отличается.

На более фундаментальном уровне симулятор просто таков, он имитирует iPhone OS X с использованием Mac OS X. Об этом свидетельствует тот факт, что файловая система на симуляторе может быть не чувствительной к регистру, но по телефону она будет, Более тонко, он не эмулирует аппаратное обеспечение, поэтому такие вещи, как местоположение, не будут работать одинаково, а 3D будет очень различным - особенно если вы используете Metal.

Вы должны всегда тестировать на реальном оборудовании.

Ответ 11

Если вы включите GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS, ваше приложение будет разбиваться по всему месту в симуляторе, но будет работать на iPhone.

Кварцевые графические вызовы в симуляторе iPhone быстрее, чем вызовы Java2D на одном компьютере - злые быстро.

Ответ 12

У меня были проблемы с голографическими приложениями, в которых симулятор работал бы очень хорошо (потому что он предполагал, что память iPhone/iPod Touch была вашей игрой), в то время как устройство выйдет из строя (поскольку другие приложения просочились и фоновые службы Apple съели некоторую память), и я не реализовал правильное управление памятью или ответ на селектор didReceiveMemoryWarning.

Ответ 13

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

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

Ответ 14

Без учета различий в производительности между ними существовали некоторые вещи, которые симулятор не делал правильно - т.е. в некоторых случаях это испортило бы звук (см. этот вопрос). Однако, поскольку версия 2.2 SDK эта проблема была решена, и звук кажется хорошим в симуляторе. Это не значит, что там есть какая-то другая несовместимость! (Только никто, с которым я столкнулся)

Ответ 15

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

Ответ 16

Что касается звуков, у меня была такая же проблема. Проблема заключалась в том, что звуковые кодировки, которые поддерживает Simulator, представляют собой другой набор звуков, чем устройство. Надеюсь, это поможет.

Ответ 17

У меня было много проблем с библиотеками и фреймами при переходе с симулятора на устройство. Не в последнюю очередь, что они, похоже, имеют разные архитектуры!

Ответ 18

Я видел позиционирование объектов, например, на симуляторе разные инструменты, чем на телефоне. Очень раздражает.

Ответ 19

Да....

Приложения, скомпилированные для 2.x, отлично работают на устройстве 3,0, но он сбой на 3.0Simulator

Примечание: 1. Если вы скомпилируете для версии 3.0, приложение будет отлично работать и с 3,0-симулятором...     2. a) Скомпилируйте для 2.x и запустите приложение в симуляторе.        b) Теперь измените iPhone Simulator Hardware на "3.0".        c) Затем запустите приложение, которое мы установили ранее на этапе а).        CRASH!!!!!!!!

Ответ 20

файл фильма (тип m4v), поскольку мой опыт в первый раз правильно воспроизводится

но во второй раз он мерцает экран симулятора...

тогда как в устройстве iPhone он работает fime...

Ответ 21

Если строка состояния приложения скрыта, в случае симулятора она по-прежнему потребляет событие касания. Но в устройстве он ведет себя отлично.

Ответ 22

Да, это случилось со мной на днях. Я новичок в iphone, и поэтому удалил MainWindow.xib, думая, что он не использовался. Приложение отлично работало на симуляторе - но разбилось при установке на телефоне.

Еще одна проблема, с которой мы столкнулись, заключалась в наших трех зависимостях, которые были установлены на ios 3.2 вместо 4.1. Отлично работал в симуляторе, но бомбил на устройстве (поскольку файлы были скомпилированы для неправильной арки).

Ответ 23

Видеокамера iphone недоступна в симуляторе, но код работает нормально фактическое устройство

Ответ 24

Загрузка ресурсов в симуляторе намного быстрее, чем в устройстве. Например, загрузка и отображение последовательности полноэкранного UIImages (например, рудиментарного видео) может выглядеть очень плавно в симуляторе и прерываться на устройстве.

На самом деле помните, что между различными устройствами существует огромная разница в скорости. Оригинальный iPhone и iPhone 3G медленнее, чем iPod второго поколения, который также намного медленнее, чем iPhone 3GS и т.д.

Ответ 25

При попытке получить доступ к UIDevice.currentDevice(), он возвращает iOS Simulator вместо реального устройства, которое вы тестируете. Это отстой, потому что вы не можете делать определенные вещи на симуляторе.