iOS 7 模拟器无法为针对 iOS 6.1 SDK 编译的应用程序提供回退用户界面。

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上,我安装了ios 6.1 sdk 通过从Xcode 4.6.3 dmg中复制它,如此帖子所述,并在构建设置中将基本SDK更新为ios 6.1,但是在ios 7模拟器上运行应用程序时,用户界面不会回退到ios 6.1。但是,如果针对运行ios 7的物理iPhone测试应用程序,则确实会回退到ios 6.1。
如何让 iOS 7 模拟器在运行 iOS 6 SDK 编译的应用时回退用户界面,以便我们可以在模拟器上重现错误?

我不认为模拟器的目的是模仿那个功能。我理解你的想法,我也曾上过当,真希望在着手整理我的代码之前就知道iOS 7已经有了这个回退功能。但我认为,如果你的应用程序还没有准备好适配iOS 7,就不要使用iOS 7模拟器,而应该使用旧版模拟器(6.1)。毕竟,模拟器只是一个模拟器,并非仿真iOS 7操作系统。 - Dandré
4个回答

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版本的模拟器应用程序)放在我的dock栏上。
测试应用程序时,我必须手动从dock栏启动模拟器并选择相应的设备版本(转到Hardware->Device->选择iphone 3.5"/4" - ios6/7),因为xcode 4.6.3无法自动执行此操作(可能是因为版本差异/因为我没有将xcode 5模拟器应用程序符号链接到4.6.3)。
启动时,请确保在xcode 4.6.3方案中选择“iPhone 7.0 Simulator”。ios6.1-sdk编译的应用程序在iOS 7上运行时会回退到iOS 6.1 UI,这样我就可以重现我的错误。

4
如果我正确理解您的问题......我们的应用程序也遇到了同样的问题,需要保留iOS6.1界面,在Xcode 5中构建并在iOS7上运行。我们的界面也出现了问题,错位和工具栏缺少按钮。我们将稍后为7修复它,但现在没有时间,但需要在iOS7上运行并仍然在Xcode 5中构建。
所以这是我做的: (我想发布一些屏幕截图,但手头没有我的mac,如果需要的话,稍后会拿到)
- 我保留了Xcode 4.6.3并安装了Xcode 5。 - 我从6.1 SDK添加了符号链接到Xcode 5安装中。(我在SO网站上找到了一个问题,将找到一个链接)或者您可以像您一样安装它。
(这两个选项可能不需要,但我们最终在测试中使用了它们,并且它们有效,甚至适用于新的5S 64位手机)
- 在Build Settings中,我选择了使用标准的非64位armv7选项来构建架构,不要选择“包括64位”选项。 - 同样的地方,将Build Active Architecture Only设置为Yes
然后......
- 同样在Build Settings中,将Base SDK设置为iOS 6.1。(我认为这是使其工作的关键) - 应用程序目标的General选项卡,将部署目标设置为6.1(我们仍然在5.1上) - 在我们的Storyboard中,选择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一样修复错误并更新应用程序。希望这样说得清楚,也希望回答了你的问题。如果我想到了其他事情,我会添加更多内容。

这似乎对我没有起作用...我唯一做的不同之处就是复制了6.1 SDK而不是符号链接。你还能想到其他做法吗? - steve
目前没有想到其他事情,但我会花一些时间处理另一个项目,该项目尚未在Xcode 5中运行。也许在这个过程中我会发现其他问题。我会尝试获取屏幕截图。不过可能需要几天才能完成。 哦,还有一件事可能并不重要,但是在我的某个视图控制器上,我手动调整了几个控件的大小。由于IOS7的尺寸变化,它破坏了我原有的代码。我将所有这些都删除了,并在IB属性中进行了更好的调整,然后那个特定的视图就正常工作了。 - gregthegeek

0

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

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

我建议您阅读苹果公司的iOS 7过渡指南,以获取有关设计iOS 7兼容UI的建议。


是的,我的问题不在于外观看起来仍然很老旧,而是物理设备的行为与模拟器不同。在物理设备上编译的应用程序会回退到旧的外观,而在模拟器中则显示为新的外观和感觉。 - gerrytan
据我所知,这是XCode 5的一个属性。如果你想要旧的外观,你必须使用旧的工具进行开发 - 如果你想要新的工具,你就被迫升级。抱歉,可能不是你想要的答案 - 但这是唯一的答案,没有疯狂的符号链接黑客攻击。编辑:我看到有人详细介绍了! - tooluser

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

谢谢,我已经做了所有的事情,但我仍然无法让iOS 7模拟器回退到iOS 6的外观和感觉。 - gerrytan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接