尼尔,
是的,正如您所指出的,iOS 模拟器不是 100% 准确复制实际 iOS 设备中的操作环境——某些类型的交互依赖于专门的硬件(相机、陀螺仪、磁力计、硬件——基于加密技术等)在模拟环境中自然是不支持的。在模拟器上也禁止其他看似“纯软件”类型的交互(推送通知、iCloud 等)——这可归因于以下几件事:
- 与物理设备不同,您无需配置 iOS 模拟器。由于 Provisioning Profiles 包含这些 Apple 服务的权利,因此 Simulator 没有(当前)方法来了解如何连接到这些服务的特定应用程序部分。
- 模拟器没有唯一的硬件标识符,因此来自您的模拟器的连接与任何其他开发者模拟器上的连接无法区分。
最后,有一类交互不符合上述任何一个排除项,只能归因于 Apple 做出的设计决策。例如,密码锁可以由具有安全意识的 iOS 设备用户简单地启用......或者它可以由 IT 部门通过移动设备配置策略(通过 ActiveSync、MDM 服务器等)强制执行。非 IT 强制版本的密码锁定会导致模拟器内功能奇偶校验,因为仅支持最通用的密码锁定行为,从而使 MDM 用户处于冷战状态。为避免这种情况,Apple 必须赋予 Simulator 支持 .mobile 配置文件的知识,连接并定期检查 MDM 服务器(因此需要唯一的硬件标识符),并最终包含邮件。
正如你所看到的,这个相对简单的功能很快就会扩展到许多其他也需要模拟的 iOS 元素。考虑到最不可能、最极端的情况,Simulator 将成为一款功能完备的纯软件 iPhone,您可以在其中直接从 OS X 上的 iPhone 形界面接听电话和短信、查看电子邮件等……不是 Apple 的体验即使这些用户是他们的第 3 方开发人员,也希望用户拥有。
尽管有一些交互我们可以很容易地推断出它们从模拟器中省略的理由,但只有 Apple真正知道他们为什么选择从模拟器中排除其他交互。
所以,回到你的问题:
这是模拟器特定的限制吗?
是的,从 Xcode 4.6.2 开始,iOS 模拟器目前不支持此功能。
我能克服吗?
据我所知,没有。
但是,我确实认为您关于在模拟器中安装证书的潜在问题是您可以做的事情 - 事实上,我在我的模拟器中安装了一个自签名证书颁发机构,以进行一些基于 2 个月前的安全测试在很大程度上归功于Charles Web 代理的开发人员提供的一些工作。
如果您下载他们的 shell 脚本,您可以看到他们如何将自签名证书注入 Simulator 密钥库——假设您的最终目标是安装证书,您可以将类似的过程应用于您自己的证书。
请务必备份默认密钥库;很容易意外地破坏该文件中的二进制数据并使您的模拟器对所有 SSL 连接都无用。
正如可能默认的那样,这不是 iOS 模拟器中受支持的操作——调整模拟器需要您自担风险。
祝你好运,如果一切都失败了,请将您的应用程序推送到您绝对可以安装证书的设备。