6

我们的 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 上,我通过从 Xcode 4.6.3 dmg 复制它来安装 ios 6.1 sdk,如本文所述,并在构建设置上将 Base SDK 更新到 ios 6.1,但是在 ios 7 模拟器上运行应用程序时,用户界面不会回退到 ios 6.1。但是,如果应用程序针对运行 ios 7 的物理 iphone 进行测试,它确实会退回到 ios 6.1。

在运行 ios6-sdk 编译的应用程序时,如何使 ios 7 模拟器回退用户界面,以便我们可以在模拟器上重现错误?

4

4 回答 4

4

如果我正确理解您的问题...我的应用程序遇到了同样的问题,需要保留 iOS6.1 界面,内置于 Xcode 5 并在 iOS7 中运行。我们的界面也很混乱,没有对齐,工具栏缺少按钮。我们将在 7 后修复它,但现在没有时间,但需要它在 iOS7 上运行并仍然在 Xcode 5 中构建。

所以这就是我所做的:(我想发布一些屏幕截图,但我的 Mac 手边没有,如果需要,稍后会得到)

  • 我将 Xcode 4.6.3 与 Xcode 5 一起安装。
  • 我将 6.1 SDK 中的符号链接添加到 Xcode 5 安装中。(我发现了一个 SO question,会找到一个链接)或者你可以像你一样安装它。

(可能不需要接下来的 2 个选项,但我们最终在测试中使用了它们,并且它可以工作,甚至是新的 5S 64 位手机)

  • 在构建设置中,我选择了构建架构以使用标准的非 64 位 armv7 选项,不要选择“包括 64 位”选项。

  • 同一个地方,Build Active Architecture Only 为 Yes

然后...

  • 同样在 Build Settings 中,将 Base SDK 设置为 iOS 6.1。(我相信这是让它发挥作用的关键)

  • 应用程序目标的常规选项卡,将部署目标设置为 6.1(我们目前仍在 5.1 上)

  • 在我们的 Storyboards 中,选择 File Inspector,在我选择的 Interface builder 部分中,在 Xcode 4.6 中打开,并为 iOS 5.1 和更高版本构建,并查看为 iOS 6.1 和更早版本。(我的自动布局未选中,我们不使用它)

关于“打开”的最后一个选项的警告。如果您选择“在 Xcode 4.6 中打开”,您将失去 iOS7 的 Storyboard 编辑功能。就我而言,我现在不在乎,因为无论如何我都希望它保持在 4.6 视图中。要时刻铭记在心。我认为您可以将其切换回来,但尚未测试。

链接/安装 6.1 SDK 后,您应该能够在应用程序中运行时选择所需的 iOS 版本以在模拟器中使用。您将在顶部工具栏中的 Active Schema 下拉菜单中看到它。就我而言,例如,我可以选择 iPhone Retina(4 英寸),然后选择 iOS7 或 6.1。对我来说有趣的部分是,通过上面的设置,我可以在模拟器中运行我的应用程序,即使我选择 iOS7 作为模拟器活动模式,它看起来也像 iOS6。它甚至可以在 64 位模拟器中工作,在我的设置中,它只会显示 iOS7 选择。

至少这样我可以在 Xcode 5 中构建和工作,为 iOS7 用户临时分发应用程序,但保持 iOS6 样式、位置和按钮不变。现在我可以花更多时间过渡到 iOS7 样式,但仍然可以修复错误并更新应用程序,就像它是 iOS6.1 一样。

我希望这是有道理的,我希望它回答了你的问题。我希望我记得我所做的一切!如果我想到了什么,我会添加更多。

于 2013-09-25T08:21:21.957 回答
4

感谢大家的帮助,但到目前为止,让我重现该错误的最佳解决方法是继续使用 xcode 4.6.3 并将 ios 7 模拟器安装到 xcode 4.6.3 中。

我通过并排安装 xcode 5 和 4.6.3 来做到这一点(将 xcode.app 复制到 xcode4.6.3.app 然后从应用商店安装 xcode 5(将覆盖 xcode.app)),然后符号链接

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk

/Applications/Xcode4.6.3.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk

确保执行此操作时未打开 xcode。如果您已经将 4.6.3 覆盖到 5,您可以从https://developer.apple.com/downloads下载 4.6.3 的 dmg 。

然后我放:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iOS Simulator.app

(即:模拟器应用程序的 xcode 5 版本)在我的码头上

测试应用程序时,我必须先从扩展坞手动启动模拟器并选择相应的设备版本(转到硬件 -> 设备 -> 选择 iphone 3.5"/4" - ios6/7),因为 xcode 4.6.3 不是能够自动执行此操作(可能是因为版本差异/因为我没有将 xcode 5 模拟器应用程序符号链接到 4.6.3)

启动时,确保在 xcode 4.6.3 Scheme 上选择了“iPhone 7.0 Simulator”。ios6.1-sdk 编译的应用程序在 ios 7 上运行时会退回到 ios 6.1 UI,我可以重现我的错误。

于 2013-09-30T23:06:13.030 回答
0

恐怕您描述的外观可能是 iOS 7 的正确行为。例如,表格视图内容大小的计算方式不同(这将改变许多元素的位置)以及许多其他变化。

如果您希望保留您的 iOS 6 外观,您需要在 Xcode 4.6 下编译,而不是 5。您仍然可以在 iOS 7 下运行它,实际上您可以通过在 Xcode 中授权来让 iOS 7 设备显示用于开发5,然后切换回 Xcode 4.6。

我建议您也阅读 Apple 的iOS 7 过渡指南,以获取有关设计与 iOS 7 兼容的 UI 的建议。

于 2013-09-24T15:34:06.480 回答
0

在模拟器中尝试“重置内容和设置”,并确保在构建和运行时为 XCode 中的方案使用正确的模拟器和 SDK。如果您按照描述安装 iOS 6.1 SDK,您应该会看到乍一看在您的目标方案可用的模拟器列表中出现重复的内容 - 其中一个将为您提供所需的行为(很可能是“iOS 7.0 | iOS 7.0 SDK”,但似乎并非总是如此)。确保您的部署目标也设置为 6.1 或更早版本,并且您的基础 SDK 设置为 6.1(如您所描述)

于 2013-09-24T17:43:51.960 回答