iPhone设备与iPhone模拟器

时间:2008-12-19 03:55:19

标签: iphone

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

25 个答案:

答案 0 :(得分:30)

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

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

答案 1 :(得分:14)

如果您的应用程序是图形密集型的,比如说游戏,则模拟器的性能与硬件的性能完全不同。您的应用程序可能会很平滑并且在模拟器上运行良好,但在硬件上它可能会爬行,除非您知道自己在做什么。您可以轻松地在模拟器和硬件之间从60fps到3fps。

答案 2 :(得分:11)

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

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

//simulator: 0.994144439697
//device:    0.994144380093

答案 3 :(得分:9)

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

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

答案 4 :(得分:4)

我知道设备和模拟器之间的OpenGL ES实现存在一些差异。据我所知,这主要是因为iPhone(PowerVR MBX)上的图形芯片具有与其他mac机器截然不同的功能。许多硬件限制没有在模拟器中强制执行,因此完全有可能在模拟器中运行一些在设备上完全崩溃的东西。

iPhone硬件也支持一些模拟器不支持的OpenGL ES扩展。我相信主要的是PowerVR纹理压缩(PVRTC)。

另一个问题区域可能是内存占用。有趣的是,我还没有看到模拟器自动强制执行设备的内存限制。因此,有可能在模拟器中运行一些正常的东西,快乐地消耗大量的RAM,并且在设备上运行时,在这种行为的短暂持续之后,从不打扰任何它只是快速终止。

答案 5 :(得分:4)

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

答案 6 :(得分:3)

我在运行相对简单的1/30秒计时器时遇到问题,无法为游戏做更新。它在模拟器中运行良好,并冻结设备上的输入。

答案 7 :(得分:3)

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

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

答案 8 :(得分:3)

有些代码无法在模拟器上运行(例如,使用iPhone Keychain),但对于几乎所有应用程序,模拟器的工作方式与iPhone完全相同。

也就是说,在真实设备上进行测试绝对没有替代品。

答案 9 :(得分:2)

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

iPhone模拟器中的Quartz图形调用比同一台计算机上的Java2D调用速度快 - 邪恶快。

答案 10 :(得分:2)

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

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

答案 11 :(得分:2)

我在需要大量内存的应用程序中遇到了问题,模拟器可以正常工作(因为它会假设iPhone / iPod Touch的内存全部都是你玩的),而设备会崩溃(因为其他应用程序已经泄露)并且Apple后台服务占用了一些内存)我没有实现适当的内存管理或对didReceiveMemoryWarning选择器的响应。

答案 12 :(得分:2)

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

在更基础的层面上,模拟器就是这样,它使用Mac OS X模拟iPhone OS X.模拟器上的文件系统可能不区分大小写,但在手机上它将是。更巧妙的是,它不会模拟硬件,因此像位置这样的东西将不会起作用,3D将会有很大不同 - 特别是如果你使用的是Metal。

您应该始终在真实硬件上进行测试。

答案 13 :(得分:1)

是啊....

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

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

答案 14 :(得分:1)

我已经看到对象的定位,比如工具栏在模拟器上的不同,而不是在手机上。非常烦人。

答案 15 :(得分:1)

从模拟器移动到设备时,我遇到了很多库和框架的问题。尤其是它们似乎有不同的架构!

答案 16 :(得分:1)

电影文件(m4v类型),因为我的经验是第一次正常播放

但是第二次闪烁的模拟器屏幕......

而在iPhone设备中,它可以起作用...

答案 17 :(得分:1)

如果隐藏了应用程序的状态栏,如果是模拟器,它仍会消耗触摸事件。但在设备中它表现得非常完美。

答案 18 :(得分:1)

是的 - 前几天发生在我身上。我是iphone的新用户,因此删除了MainWindow.xib,认为它未被使用。该应用程序在模拟器上运行良好 - 但在手机上安装时崩溃了。

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

答案 19 :(得分:1)

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

答案 20 :(得分:1)

  

无法访问iphone视频库   在模拟器中,但代码工作正常   实际设备

答案 21 :(得分:1)

我有一些声音效果在模拟器中播放得很好,但在设备上没有。我不得不将格式更改为设备可以处理的内容。

答案 22 :(得分:1)

在没有考虑两者之间的性能差异的情况下,曾经存在一些模拟器没有正确执行的事情 - 即在某些情况下它会弄乱音频(参见this question)。但是,自2.2 SDK以来,这个问题已得到解决,声音似乎在模拟器中很好。这并不是说潜伏在那里的其他不兼容性! (只是我没遇到过)

答案 23 :(得分:0)

模拟器中的资源加载比设备中的加载速度快很多。例如,加载和显示一系列全屏UIImages(如基本视频)在模拟器中看起来非常流畅,并且在设备上显得不稳定。

事实上,请记住不同设备之间存在巨大的速度差异。最初的iPhone和iPhone 3G比iPod touch第二代慢,后者也比iPhone 3GS慢得多,等等。

答案 24 :(得分:0)

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