我听说过有些应用在模拟器上无法正常工作,但在实际的iPhone设备上却可以正常工作。有没有人经历过在模拟器上完美运行但在实际iPhone设备上无法运行的应用呢?
我听说过有些应用在模拟器上无法正常工作,但在实际的iPhone设备上却可以正常工作。有没有人经历过在模拟器上完美运行但在实际iPhone设备上无法运行的应用呢?
在 iPhone 上,文件名区分大小写,但在模拟器上不区分。
例如,如果您尝试使用UIImage *iconImage = [UIImage imageNamed:"MyIcon.png"]
加载图像,但实际资源名称为"myicon.png",那么它将在模拟器上工作,但在设备上无法正常工作。
如果您的应用程序具有图形密集型,比如游戏,那么模拟器的性能完全不像硬件。您的应用程序在模拟器上运行可能会非常流畅,但是在硬件上渲染时可能会变得缓慢,除非您知道自己在做什么。您的应用程序在模拟器和硬件之间可能会轻松从60fps降至3fps。
函数/构造函数参数的求值顺序是不同的:
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
三角函数可能返回不同的结果:
float a = cosf( 0.108271248639 );
printf("%.12f", a);
//simulator: 0.994144439697
//device: 0.994144380093
有一些代码在模拟器上无法工作(例如使用iPhone Keychain),但对于几乎所有应用程序来说,模拟器与iPhone的工作方式完全相同。
尽管如此,在真实设备上进行测试是不可替代的。
请注意,在构建模拟器时,您将编译针对 OS X 框架(如果适用),因此您可能使用的方法和类在 iPhone 版本的框架上不可用。
我能想到的一个例子是 NSPredicate。我能够在模拟器中编译和运行使用 NSPredicate 的应用程序,但它无法为设备编译,因为该类不可用。
我遇到了一个问题,无法在设备上运行相对简单的1/30秒计时器来更新游戏。在模拟器中可以正常运行,但会冻结设备上的输入。
手指触控区域要比鼠标光标的1个像素端点要大。为了进行适当的甚至是最基本的可用性测试,您应该将您的应用部署到设备上。
有一件很重要的事情花了我很长时间才发现,那就是模拟器不支持设备令牌,所以任何涉及到这些的代码都不能在模拟器上运行。
我遇到一个问题,应用在模拟器上能够正常工作,但在设备上运行时会崩溃,因为设备令牌代码中存在一个错误。我花了很长时间也没找出来!