iPhone设备与iPhone模拟器

我听说应用程序在模拟器上无法正常工作,但在实际的iPhone设备上正常工作。 有没有人经历过一个在模拟器中完美运行的应用程序,但没有在实际的iPhone设备上运行?

文件名在iPhone上区分大小写,但不在模拟器中。

所以,例如,如果您尝试使用UIImage *iconImage = [UIImage imageNamed:"MyIcon.png"]加载图像,但是您的资源实际上名为“myicon.png”,那么它将在模拟器上工作,但不能在设备上。

如果你的应用程序是graphics密集型的,比如说一个游戏,那么模拟器的性能就不会像硬件那样。 你的应用程序可能会很顺利,而且在模拟器上工作得很好,但是在硬件上它很可能会呈现出来,除非你知道你在做什么。 模拟器和硬件之间可以很容易地从60fps到3fps。

三angular函数可能会返回不同的结果:

 float a = cosf( 0.108271248639 ); printf("%.12f", a); //simulator: 0.994144439697 //device: 0.994144380093 

函数/构造函数参数的评估顺序是不同的:

 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 

我知道在设备和模拟器之间的OpenGL ES实现有一些差异。 据我所知这主要是因为iPhone上的graphics芯片(PowerVR MBX)与其他mac机器有很大不同的能力。 许多硬件限制不在模拟器中强制执行,所以完全有可能在模拟器中运行一些将完全崩溃的设备。

还有一些OpenGL ES扩展function在iPhone模拟器中不被支持。 我认为主要的是PowerVR纹理压缩(PVRTC)。

另一个问题领域可能是内存占用。 有趣的是,我还没有看到模拟器自动执行设备的内存限制。 因此,有可能在模拟器中运行的东西很好,愉快地消耗大量的RAM,并且永远不会打扰任何一个,只有在设备上运行这种短暂的行为之后才能迅速终止。

有一些代码不能在模拟器上工作(例如使用iPhone Keychain),但是对于几乎所有的应用程序来说,模拟器都可以像iPhone一样工作。

也就是说,在真实设备上绝对不能替代testing。

我运行一个相对简单的1/30秒定时器来执行游戏更新时遇到问题。 它在模拟器中运行良好,冻结了设备上的input。

另外请注意,在构build模拟器时,您将针对OS X框架进行编译(在适用的情况下),以便您可以使用框架的iPhone版本上不可用的方法和类。

我能想到的一个例子就是NSPredicate。 我能够在模拟器中使用NSPredicate编译和运行应用程序,但由于该类不可用,所以不能编译该设备。

指尖大于鼠标光标的1个像素端点。 要进行适当的,甚至最小的可用性testing,您应该将您的应用程序部署到设备上。

如果启用GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS,则应用程序将在模拟器中的所有位置崩溃,但在iPhone上工作。

在iPhone模拟器中的Quartzgraphics调用比在同一台计算机上的Java2D调用要快 – 很快速。

我在模拟器工作得很好的内存饥渴的应用程序中遇到了问题(因为它假定iPhone / iPod Touch的内存都是你的玩法),而设备会崩溃(因为其他应用程序泄露了,苹果背景服务已经吃掉了一些内存),我没有实现适当的内存pipe理或对didReceiveMemoryWarningselect器的响应。

我花了一段时间才发现的一件大事情是,模拟器不支持设备令牌,所以涉及这些设备的任何代码都不能在模拟器上运行。

我有一个错误,应用程序可以在模拟器上正常工作,但是当我在设备上运行它时会崩溃,因为设备令牌代码中存在一个错误。 我无法弄清楚最长的时间!

有许多微不足道的例子。 例如,您可以在模拟器上分配比在真实手机上更多的内存。 如果您没有视网膜Mac,则您无法在模拟器上收到推送通知,显示点距不同。

在一个更基本的层面上,模拟器就是这样,它使用Mac OS X来模拟iPhone OS X.这是由模拟器上的文件系统可能不区分大小写的事实certificate的。 更巧妙的是,它不模拟硬件,所以像位置这样的东西将不会工作相同,3D将是非常不同的 – 特别是如果你正在使用金属。

你应该总是testing真正的硬件。

在不考虑两者之间的性能差异的情况下,曾经有一些事情是模拟器不能正确执行的 – 也就是说在某些情况下会混淆audio(请参阅此问题 )。 但是,自从2.2 SDK这个问题已经解决了,模拟器中的声音似乎很好。 这并不是说潜伏在那里有一些其他的不相容性! (只是没有我碰到)

关于声音,我有同样的问题。 问题是模拟器支持的声音编码与设备不同。 我希望有帮助。

从模拟器移动到设备时,我有许多库和框架问题。 不仅如此,他们似乎有不同的架构!

我已经看到了对象的位置,比如工具栏在模拟器上和在手机上的不同。 很烦人。

是啊….

为2.x编译的应用程序将在3.0设备上正常工作,但会在3.0Simulator上崩溃

注意:1.如果您编译为3.0,应用程序将在3.0模拟器上也可以正常工作… 2. a)编译为2.x并在模拟器中启动应用程序。 b)现在将iPhone模拟器硬件更改为“3.0”。 c)然后启动我们之前在步骤a)中安装的应用程序。 破坏!!!!!!!!

电影文件(m4vtypes)作为我的exprience第一次正常播放

但在第二次它闪烁模拟器的屏幕…

而在iPhone设备,它的工作方式…

我有一些音效在模拟器中performance不错,但不是在设备上。 我不得不改变格式到设备将处理的东西。

如果应用程序的状态栏被隐藏,在模拟器的情况下它仍然会消耗触摸事件。 但在设备中,它的performance完美。

是的 – 那天发生在我身上。 我是新来的iPhone,所以删除了MainWindow.xib认为它是未使用的。 该应用程序在模拟器上工作完美 – 但在手机上安装时崩溃。

我们遇到的另一个问题是我们的三个20依赖,它们被设置为3.2而不是4.1。 在模拟器中完美工作,但在设备上轰炸(因为文件编译为错误的拱形)。

iphonevideo库不能在模拟器中访问,但代码在实际设备上工作正常

模拟器中的资源加载比设备中的资源加载要快得多。 例如,在模拟器中加载和显示一系列全屏UIImages (如基本video)可能看起来非常stream畅,并且在设备上会发生波涛汹涌。

事实上,请记住,不同设备之间存在巨大的速度差异。 原来的iPhone和iPhone 3G比iPod touch 2nd Gen要慢,比iPhone 3GS慢得多,等等。

当试图访问UIDevice.currentDevice()时,它会返回iOS模拟器,而不是您正在testing的实际设备。 这很糟糕,因为你不能在模拟器上做某些事情。