ios 7模拟器不会回退针对ios 6.1 sdk编译的应用程序的用户界面

我们的ios6.1-sdk编译的应用程序在ios 6.1 iphone 4,4s&5设备上运行良好。 在ios7 iphone 5s上运行应用程序的用户界面仍然看起来像ios 6(黑色button等),但我们很好,大部分,除了我们发现了一个错误。 我猜这是因为ios7上的API实现的变化。

当我们的应用程序针对xcode 5编译ios7-sdk时,一切都崩溃了。 UI对象是错位的,标签的不能被读取等。因此,我们要编译我们的代码对ios6.1 sdk,但在ios 7上运行它。

在Xcode 5上,我已经安装了ios 6.1 sdk ,从Xcode 4.6.3 dmg复制它,如本文所述 ,更新的Base SDK到构build设置的ios 6.1,但是当在ios 7模拟器上运行应用程序时,用户界面不会回落到ios 6.1。 但是,如果应用程序是针对运行ios 7的物理iphone进行testing的话,它会回退到ios 6.1。

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

如果我正确理解你的问题…我已经遇到了与我们的应用程序相同的问题,需要保持iOS6.1接口,内置在Xcode 5中,并在iOS7中运行。 我们的界面也搞乱了,错位和工具栏丢失了button。 我们稍后将修复它,但是现在没有时间,但是需要它在iOS7上运行并且仍然在Xcode 5中构build。

所以下面是我做的:(我想张贴一些屏幕截图,但是没有我的mac方便,如果需要的话会稍后得到)

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

(接下来的2个选项可能不需要,但我们最终在testing中使用它们,即使是新的5S 64位手机也能正常工作)

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

  • 同样的地方,build立主动架构只有是

然后…

  • 也在Build Settings中,将Base SDK设置为iOS 6.1。 (我相信这是使其工作的关键)

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

  • 在我们的故事板中,select文件检查器,在我select的界面构build器部分打开Xcode 4.6,并为iOS 5.1和更高版本构build,并查看iOS 6.1和更早版本。 (我的自动布局未经检查,我们不使用它)

关于“打开”的最后一个选项的警告。 如果您select“在Xcode 4.6中打开”,您将失去iOS7的Storyboard编辑。 就我而言,我现在不在乎,因为我希望它仍然保持在4.6的意见。 要时刻铭记在心。 我认为你可以切换回去,但还没有testing过。

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

至less我可以在Xcode 5中构build和工作,为iOS7用户专门分发应用程序,但保持iOS6样式,位置和button的完整性。 现在,我可以花更多的时间转换到iOS7风格,但仍然可以修复错误并像iOS6.1一样更新应用程序。

我希望这是有道理的,我希望它回答你的问题。 我希望我记得我所做的一切! 如果我想到一些东西,我会补充更多。

感谢所有的帮助,但迄今为止最好的解决方法,让我重现的错误是继续使用xcode 4.6.3并安装ios 7模拟器到xcode 4.6.3。

我这样做是通过同时安装xcode 5和4.6.3(将xcode.app复制到xcode4.6.3.app中,然后从app store安装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版本)在我的docker上

在testing应用程序时,我不得不从坞中手动启动模拟器,并select相应的设备版本(转到硬件 – >设备 – >selectiphone 3.5“/ 4” – ios6 / 7),因为xcode 4.6.3不是能够自动做到这一点(大概是因为版本差异/因为我没有符号链接xcode 5模拟器应用程序到4.6.3)

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

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

如果你想保留你的iOS 6的外观,你将需要在Xcode 4.6下编译,而不是5.你仍然可以在iOS 7下运行它,事实上你可以通过在Xcode中授权来显示iOS 7设备5,然后切换回Xcode 4.6。

我build议你也阅读苹果公司的iOS 7转换指南 ,以获得有关deviseiOS 7兼容UI的build议。

在模拟器中尝试“重置内容和设置”,并确保在构build和运行时在XCode中为您的scheme使用了正确的模拟器和SDK。 如果您按照您的描述安装了iOS 6.1 SDK,您应该首先看到在您的目标系统中可用的模拟器列表中出现的重复内容 – 其中一个会给出所需的行为(很可能是“iOS 7.0 | iOS 7.0 SDK“,但并不总是如此)。 确保您的部署目标设置为6.1或更低版本,并将基本SDK设置为6.1(如您所描述的那样)