2012-04-18 67 views
5

由于iOS模拟器是一个模拟器,为什么我需要为它专门构建?模拟器不是它在某种虚拟机/沙箱中运行真实代码的关键吗?iOS设备和模拟器的建筑实际上有何不同?

那么设备/模拟器的工作方式和生成的应用程序有何不同,实际的区别是什么?

回答

6

在iOS设备上本地运行的应用程序是一个ARM程序。 但是,在iOS模拟器中运行的应用程序是普通的32位(i386架构)Mac OS X程序。换句话说,模拟器不会将iOS设备模拟到硬件级别。 它提供了一个忠实的iOS环境副本,重新实现为在Mac上本地运行的 。

+0

所以它是从字面上编译为一个不同的体系结构。在那种情况下,我使用的某些库将模拟器/设备二进制文件放在同一个名称相同的位置是很奇怪的 - 所以每次构建模拟器时都会丢失设备版本,反之亦然?在模拟器和设备上如何运行带有预建依赖库(.a文件)的应用程序? – 2012-04-18 09:09:07

+0

@john您可以使用xcode附带的lipo工具来制作胖(适用于设备和模拟器)二进制文件。 – Vignesh 2012-04-18 09:10:41

+0

#创建一个新的输出文件夹 的mkdir -p $ {} PROJECT_DIR /建筑/ $ {} BUILD_STYLE -iphoneos/DTUtilities #结合各种平台的lib文件合并成一个 脂 - 创建“$ {} PROJECT_DIR /建筑/ $ {BUILD_STYLE} -iphoneos/libDTUtilities.a“”$ {PROJECT_DIR}/build/$ {BUILD_STYLE} -iphonesimulator/libDTUtilities.a“-output”$ {PROJECT_DIR}/build/$ {BUILD_STYLE} -iphoneos/DTUtilities/libDTUtilities- $ {} BUILD_STYLE .A” – Vignesh 2012-04-18 09:12:01

6

模拟器构建使用i386指令集,因为这是你的mac使用的。

当您为iOS设备构建时,您正在构建armv6或armv7指令集。

模拟器的要点是,您可以在Mac上做一些快速测试,而无需使用设备。

要了解更多有关指令集:http://en.wikipedia.org/wiki/Instruction_set

+0

模拟器从不给内存警告。但不同的设备有不同的内存,所以要创建一个好的应用程序,我们必须在模拟器和设备上进行测试。检查出相同的问题[链接](http://stackoverflow.com/questions/380062/iphone-device-vs-iphone-simulator) – 2012-04-18 08:59:07

1

模拟器和设备应该运行相同的代码,但有几个问题需要注意。

  1. 模拟器不能运行,这设备可以运行所有功能,例如模拟器不与相机相互作用,GPS数据不存在(但可以设置从选项的固定位置),和除此之外还有其他几件事情。

  2. 模拟器可用于检查您的代码和功能,比开发时在设备上转储代码要快得多,但模拟器正在使用计算机的内存和CPU,这意味着它不能反映真实的性能设备,速度和内存明智。

好的做法是测试和大多发展在模拟器上,当你的代码,稳定和工作刨 - 这是时间来测试其设备本身的性能和其他问题是指特定设备上。

我可以详细说明这个话题,但我对你的问题很快回答。

相关问题