ios 7 模拟器不会回退针对 ios 6.1 sdk 编译的应用程序的用户界面
Posted
技术标签:
【中文标题】ios 7 模拟器不会回退针对 ios 6.1 sdk 编译的应用程序的用户界面【英文标题】:ios 7 simulator wouldn't fallback user interface for apps compiled against ios 6.1 sdk 【发布时间】:2013-09-24 02:14:37 【问题描述】:我们的 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 并在构建设置上将 Base SDK 更新为 ios 6.1,但是在 ios 7 模拟器上运行应用程序时,用户界面不会回退到 ios 6.1。但是,如果应用程序针对运行 ios 7 的物理 iphone 进行测试,它确实会退回到 ios 6.1。
如何使 ios 7 模拟器在运行 ios6-sdk 编译的应用程序时回退用户界面,以便我们可以在模拟器上重现错误?
【问题讨论】:
我不认为模拟器的目的是模仿该功能。我理解你的思维方式,我也喜欢它,我希望我在去之前就知道 iOS 7 有这个后备功能,然后急于为 iOS 7 整理我的代码。但我想如果你的应用程序还没有准备好 iOS 7 ,不要使用 iOS 7 模拟器,而是使用较旧的模拟器 (6.1)。最后,模拟器是模拟器,而不是模拟器。它模拟您的 iOS 7 应用,但不模拟 iOS 7 操作系统。 【参考方案1】:如果我正确理解您的问题... 我的应用程序也遇到了同样的问题,需要保留 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 to Yes
那么……
同样在 Build Settings 中,将 Base SDK 设置为 iOS 6.1。 (我相信这是让它发挥作用的关键)
应用程序目标的常规选项卡,将部署目标设置为 6.1(我们目前仍在 5.1 上)
在我们的 Storyboards 中,选择 File Inspector,在我选择的 Interface builder 部分中打开 Xcode 4.6 和 Builds for 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 一样修复错误和更新应用程序。
我希望这是有道理的,我希望它回答了你的问题。我希望我记得我所做的一切!想到什么我再补充。
【讨论】:
这似乎对我不起作用......我唯一不同的是复制 6.1 SDK 而不是符号链接。你还能想到你做过的其他事情吗? 暂时没有想到其他任何事情,但我会花一些时间处理另一个尚未在 Xcode 5 中运行的项目。也许我会在这个过程中捕捉到其他东西。我也会尝试获取屏幕截图。不过可能需要我几天时间才能完成。哦,有一件事可能无关紧要,但是......在我的一个视图控制器上,我有几个控件,我在代码中手动调整大小。由于 IOS7 大小的变化,它弄乱了我的代码。我把所有这些都拿出来并在 IB 属性中进行了更好的调整,然后那个特定的视图就可以正常工作了。【参考方案2】:感谢大家的帮助,但到目前为止,让我重现该错误的最佳解决方法是继续使用 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 版本)在我的 Dock 上
在测试应用程序时,我必须先从扩展坞手动启动模拟器并选择相应的设备版本(转到硬件 -> 设备 -> 选择 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,我可以重现我的错误。
【讨论】:
【参考方案3】:恐怕您描述的外观可能是 iOS 7 的正确行为。例如,表格视图内容大小的计算方式不同(这将改变许多元素的位置)以及许多其他变化。
如果您希望保留 iOS 6 的外观,则需要在 Xcode 4.6 下编译,而不是 5。您仍然可以在 iOS 7 下运行它,实际上您可以通过授权使 iOS 7 设备显示用于开发它在 Xcode 5 中,然后切换回 Xcode 4.6。
我建议您也阅读 Apple 的 iOS 7 Transition Guide,以获取有关设计 iOS 7 兼容 UI 的建议。
【讨论】:
是的,我的问题不在于外观看起来仍然很旧,而是物理设备的行为与模拟器不同。在使用 6.1 sdk 编译的物理设备应用程序中恢复到旧外观,而在模拟器中则以新外观显示 这是 XCode 5 AFAIK 的属性。如果您想要旧外观,则必须使用旧工具进行开发 - 如果您想要新工具,则必须升级。抱歉,可能不是您想要的答案 - 但这是唯一没有疯狂符号链接黑客的答案。编辑:我看到有人详细说明了!【参考方案4】:在模拟器中尝试“重置内容和设置”,并确保在构建和运行时为 XCode 中的方案使用正确的模拟器和 SDK。如果按照您的描述安装 iOS 6.1 SDK,您应该会看到乍一看在您的目标方案可用的模拟器列表中出现重复的内容 - 其中一个将为您提供所需的行为(很可能是“iOS 7.0 | iOS 7.0 SDK”,但似乎并非总是如此)。确保您的部署目标也设置为 6.1 或更早版本,并将您的基础 SDK 设置为 6.1(如您所述)
【讨论】:
谢谢我已经完成了所有这些,但我仍然无法让 ios 7 模拟器回退到 ios 6 的外观和感觉以上是关于ios 7 模拟器不会回退针对 ios 6.1 sdk 编译的应用程序的用户界面的主要内容,如果未能解决你的问题,请参考以下文章
在 OS X 10.10 (Yosemite Beta) 中,如何使用 iOS 6.1 模拟器进行测试?
虽然 ios 6.1 作为基础 sdk xcode 5 为 ios 7 构建 ipa
OSX 10.10 Yosemite 上的 iOS 6.1 模拟器