【问题标题】:How does building for iOS device and simulator actually differ?iOS 设备和模拟器的构建实际上有何不同?
【发布时间】:2012-04-18 08:29:33
【问题描述】:

iOS模拟器既然是模拟器,那我为什么要专门为它构建呢?模拟器的意义不在于它在某种虚拟机/沙盒中运行真实代码吗?

那么,在构建设备/模拟器的工作方式以及最终构建的应用程序方面有何实际差异?

【问题讨论】:

    标签: ios xcode ios-simulator


    【解决方案1】:

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

    【讨论】:

    • 所以它实际上是为不同的架构编译的。在那种情况下,我正在使用的某些库将模拟器/设备二进制文件放在同一个位置并具有相同的名称,这很奇怪 - 所以每次我构建模拟器时,我都会丢失设备版本,反之亦然?带有预构建依赖库(.a 文件)的应用程序如何在模拟器和设备上运行?
    • @john 您可以使用 xcode 附带的 lipo 工具来制作 fat(适用于设备和模拟器)二进制文件。
    • # 新建一个输出文件夹 mkdir -p ${PROJECT_DIR}/build/${BUILD_STYLE}-iphoneos/DTUtilities # 将各种平台的lib文件合并为一个 lipo -create "${PROJECT_DIR}/ build/${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"
    【解决方案2】:

    模拟器版本使用 i386 指令集,因为这是您的 mac 使用的。

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

    模拟器的目的是让您可以在您的 Mac 上进行一些快速测试,而无需使用设备。

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

    【讨论】:

    • 模拟器从不发出内存警告。但是不同的设备有不同的内存,所以要创建一个好的应用程序,我们必须在模拟器和设备上测试它。查看同样的问题link
    【解决方案3】:

    模拟器和设备应该运行相同的代码,但应该注意的问题很少。

    1. 模拟器无法运行设备可以运行的所有功能,例如模拟器不与相机交互,不存在 GPS 数据(但您可以从选项中设置固定位置),并且几乎没有其他类似的东西。

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

    好的做法是主要在模拟器上进行测试和开发,当您的代码稳定并按计划工作时 - 是时候在设备本身上测试它的性能和其他特定于设备的问题了。

    我可以详细说明该主题,但这是对您问题的快速回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      相关资源
      最近更新 更多