为了保持遗留的项目在iOS7下可以继续以iOS6兼容模式下的行为运行,最简单的办法就是停留在Xcode4.6.3进行开发和编译,而不要升级到Xcode5.0。但毕竟Xcode5.0有很多长足的进步,最突出的一点就是:用内置的Git插件不会因为中文而频繁无响应了。鉴于这些原因,还是有理由将Xcode升级到5.0的。但在5.0下iOS7阴魂不散,想编译到iOS6兼容模式还是相当折腾的。
================================ 步骤如下 ================================
-
通过Xcode5.0的首选项下载iOS6.1模拟器,这一步会同时下载并安装模拟器使用的6.1 SDK,但真机使用的6.1 SDK无法通过首选项下载,唯一的办法只能是自己动手下载并拷贝到Xcoede5.0下。 从Apple Developer Center下载Xcode4.6,从/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs目录中将iPhoneOS6.1.sdk复制到Xcode5.0对应的目录中。这样在项目选项的Base SDK设置那里就会出现iOS 6.1的选项(默认只有最新的7.0),我猜测是必须同时在iPhoneOS.platform和iPhoneSimulator.platform下都有6.1.sdk才会使这个选项出现,但没有实践。
-
此时打开Xcode5.0,在模拟器的运行选项中会多出来一部分(竖线右边的部分在之前是没有的)。不用管竖线右边的部分,因为编译的时候使用的SDK版本和这个无关,这里只是选择了模拟器的系统版本(竖线左边部分)。
-
设置Base SDK,选择iOS 6.1,这个选项会决定使用那个版本的SDK进行编译。此时无论是在iOS7的真机还是模拟器下运行应用,该应用都会在iOS6兼容模式下运行:状态栏、键盘显隐动画、UITextView.contentSize的高度等许多使用iOS7编译会有不同行为的控件都会回来iOS6之前的行为。(目前已知UISegmentControl和UIAlertView无法回复,好像是因为这些控件由操作系统直接提供)
-
在提交到AppStore之前需要进行归档,这里需要特别注意的是,如果直接进行归档,Xcode会默认使用iOS 7.0 sdk进行编译并归档,使之前所有的工作都前功尽弃。这里我没找到好办法,但在stack overflow上看到一个老外的回复提醒了我。做法是:关闭Xcode5.0,然后从/iPhoneOS.platform/Developer/SDKs目录下先将iPhoneOS7.0.sdk目录剪切到别的地方。然后重新打开Xcode5.0,这样在Base SDK那里就只剩下iOS6.1了。
-
这样一来,Xcode你再聪明也找不到iOS 7.0 SDK了吧(虽然很好找,我就剪切到上一级目录了)。然后再归档,将归档的ipa安装到iOS7的真机进行测试。ok了,大功告成。记得完工后关闭Xcode5并把iOS 7.0的SDK放回原位。