我们的 ios6.1-sdk 编译的应用程序在 ios 6.1 iphone 4、4s 和 5 设备上运行良好。在 ios7 iphone 5s 上运行该应用程序时,用户界面仍然看起来像 ios 6(黑色按钮等),但我们对大部分都很好,除了我们发现了一个错误。我猜这是因为 ios7 上的 API 实现发生了变化。
当我们的应用程序在 xcode 5 上针对 ios7-sdk 进行编译时,一切都崩溃了。 UI 对象未对齐,无法读取标签等。因此我们希望针对 ios6.1 sdk 编译我们的代码,但在 ios 7 上运行它。
在 Xcode 5 上我安装了 ios 6.1 sdk by copying it from Xcode 4.6.3 dmg as described on this post并在build设置上将 Base SDK 更新为 ios 6.1,但是在 ios 7 模拟器上运行应用程序时,用户界面不会回退到 ios 6.1。但是,如果针对运行 iOS 7 的物理 iPhone 测试该应用程序,它确实会回退到 iOS 6.1。
如何在运行 ios6-sdk 编译的应用程序时让 ios 7 模拟器回退用户界面,以便我们可以在模拟器上重现错误?
最佳答案
如果我正确理解您的问题... 我一直在使用我们的应用程序遇到同样的问题,需要保留 iOS6.1 界面,内置于 Xcode 5 并在 iOS7 中运行。我们的界面也乱七八糟,错位,工具栏缺少按钮。我们稍后会为 7 修复它,但现在没有时间,但需要它在 iOS7 上运行并仍然在 Xcode 5 中构建。
所以这就是我所做的: (我想发布一些屏幕截图,但我的 Mac 不在手边,如果需要,稍后再获取)
- 我将 Xcode 4.6.3 与 Xcode 5 一起安装。
- 我将 6.1 SDK 中的符号链接(symbolic link)添加到 Xcode 5 安装中。 (我发现了一个 SO 问题,会找到一个链接)或者你可以像以前一样安装它。
(接下来的两个选项可能不需要,但我们最终在测试中使用了它们,并且它有效,即使是新的 5S 64 位手机)
在build设置中,我选择了构建架构以使用标准的非 64 位 armv7 选项,不要选择“包括 64 位”选项。
同一个地方,Build Active Architecture Only to Yes
然后...
同样在build设置中,将 Base SDK 设置为 iOS 6.1。 (我相信这是让它发挥作用的关键)
应用程序目标的常规选项卡,将部署目标设置为 6.1(我们的仍然是 5.1,目前)
在我们的 Storyboards 中,选择 File Inspector,在 Interface builder 部分我选择 opens in Xcode 4.6, Builds for iOS 5.1 and Later,并以 iOS 6.1 及更早版本查看。 (我的自动布局是未选中的,我们不使用它)
关于“打开方式”的最后一个选项的警告。如果选择“在 Xcode 4.6 中打开”,您将失去 iOS7 的 Storyboard 编辑功能。就我而言,我现在不在乎,因为无论如何我都希望它保持在 4.6 View 。要时刻铭记在心。我认为您可以将其切换回来,但尚未测试。
链接/安装 6.1 SDK 后,您应该能够在应用程序中运行时选择要在模拟器中使用的 iOS 版本。您将在顶部工具栏的事件模式下拉列表中看到它。例如,在我的例子中,我可以选择 iPhone Retina(4 英寸),然后我可以选择 iOS7 或 6.1。对我来说有趣的部分是,通过上面的设置,我可以在模拟器中运行我的应用程序,即使我选择 iOS7 作为模拟器事件模式,它看起来也像 iOS6。它甚至可以在 64 位模拟器中运行,在我的设置中,它只会显示 iOS7 选项。
至少这样我可以在 Xcode 5 中构建和工作,为 iOS7 用户临时分发应用程序,但保持 iOS6 样式、位置和按钮不变。现在我可以花更多时间过渡到 iOS7 风格,但仍然可以像 iOS6.1 一样修复错误和更新应用。
我希望这是有道理的,我希望它能回答你的问题。我希望我记得我所做的一切!想到什么我再补充。
关于iphone - ios 7 模拟器不会为针对 ios 6.1 sdk 编译的应用程序回退用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18971919/