iPhone设备与iPhone模拟器

39

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


我希望这个URL对您有所帮助:区分iPhone、iPad和模拟器的不同 #if TARGET_IPHONE_SIMULATOR // 仅适用于模拟器的代码 #elif TARGET_OS_IPHONE // 仅适用于iPhone的代码 #elif TARGET_OS_IPAD // 仅适用于iPad的代码 #else // 未知目标 #endif http://cduu.wordpress.com/2010/10/20/differentiate-between-iphone-and-simulator/ - user1564754
25个回答

2

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

在更基本的层面上,模拟器只是模拟iPhone OS X使用Mac OS X。这可以从模拟器上的文件系统不区分大小写而手机上会区分大小写来证明。更微妙的是,它不仿真硬件,所以像位置这样的事情将不起作用,并且3D将非常不同 - 特别是如果您正在使用Metal。

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


问题要求列举出存在差异的实例。不要仅仅说“有很多”,然后只给一个例子,如果您能列出更多的例子,那就太好了。 - fatuhoku
是的先生!也许您可以在评论中添加它们或自己编辑答案。 - Rog

2
如果您启用了 GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS,您的应用程序会在模拟器中随处崩溃,但在 iPhone 上工作正常。
iPhone 模拟器中的 Quartz 图形调用比同一台计算机上的 Java2D 调用更快 - 极快。

2

在一些内存消耗较大的应用程序中,模拟器工作得很好(因为它假设iPhone/iPod Touch的内存都是你可以使用的),而设备可能会崩溃(因为其他应用程序泄漏了内存,而苹果后台服务也占用了部分内存),我没有实施适当的内存管理或对didReceiveMemoryWarning选择器做出响应。


1

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


1

我有一个电影文件(m4v格式),第一次播放正常。

但第二次在模拟器中会闪屏……

然而在iPhone设备上却没有问题……


1
如果应用程序的状态栏被隐藏,模拟器仍会消耗触摸事件。但在设备上它表现得完美无缺。

1
iPhone 视频库在模拟器上不可访问,但代码在实际设备上正常工作。

1

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


1

我有一些在模拟器中播放正常的音效,在设备上却无法播放。我不得不将格式更改为设备可以处理的格式。


1

是的...

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接