platforms_path="$1/Contents/Developer/Platforms";
if [ -d $platforms_path ]; then
for platform in `ls $platforms_path`
do
sudo ln -sf $platforms_path/$platform/Developer/SDKs/* $(xcode-select --print-path)/Platforms/$platform/Developer/SDKs;
done;
fi;
15 回答
编辑:从2014年2月1日开始,Apple将不再接受iOS7之前的应用程序提交到App Store . 因此,尽管这种技术仍然有效,但它对大多数读者来说并没有用 .
是的,这很好 . 我仍然使用iOS 4.3为一个项目构建(自我们更新以来已经有一段时间了;但他们仍然在iOS 6发布后接受它),而且我目前使用Xcode 5构建了10.5个应用程序 .
有关如何设置的详细信息,请参见How to point Xcode to an old SDK so it can be used as a "Base SDK"? . 每次升级时,您都可以使用我的fix-xcode脚本为您链接所有内容 .
唯一的技巧是获取旧的SDK . 如果你没有它们,你通常需要下载旧版本的Xcode(仍然可以在developer.apple.com上找到),打开安装程序包,然后寻找你需要的SDK .
SDK可以在安装程序包中找到:
当我更新到xcode 5时,我也运行了同样的问题,它删除了旧的sdk . 但我从另一台计算机上获取了旧版SDK的副本,您可以从以下链接下载 .
http://www.4shared.com/zip/NlPgsxz6/iPhoneOS61sdk.html
(www.4shared.com测试帐号test@yopmail.com/test)
有两种方法可以使用 .
1)将此文件夹解压缩并粘贴到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs并重新启动xcode .
但是如果你更新xcode,这可能会被Xcode删除 .
2)另一种方法是解压缩并粘贴到你想要的位置,然后转到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs并在此处创建一个符号链接,这样即使SDK仍然保持相同你更新Xcode .
我做了另一项更改,Build Setting> Architectures> standard(而不是64),因此列出了Deployment Target的所有版本
No need to download the zip if you only wanted to change the deployment target.
这是一些截图 .
是的,我今天刚解决了这个问题 .
在您或您朋友的旧Xcode目录中找到SDK文件,如iPhoneOS6.1.sdk .
复制并将其放入Xcode 5目录:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs .
然后你可以选择如下的SDK:
希望这对你有所帮助 .
查找并下载旧SDK . Older SDKs are found here .
我已将xcode.app目录复制为Xcode_4.6.3.app .
现在,您可以在两个xcode版本中进行测试和调试 . 您必须从相应的文件夹运行它们或在桌面上创建快捷方式 . 从命令行构建时,将参数设置为
iPhoneOS6.1
而不是iPhoneOS7.0
This worked great for me in Xcode5 and iOS.
转到Xcode5的SDK目录 . 它通常位于:
像这样添加旧SDK的符号链接:
或者更准确地从命令行中的任何位置,
您可以下载旧版SDK并将其安装在其中
Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
夹 . 注销登录只是为了确保更改生效,您应该在新的XCode中看到旧的SDK
只需添加,您实际上可以使用Xcode 5本身下载旧版本的模拟器 - 只需转到首选项,您就可以在下载中找到它们:
从Apple开发中心下载Xcode 4.6.x:https://developer.apple.com/downloads/index.action
在Applications文件夹中创建一个名为Xcode4的文件夹,然后将下载的dmg拖放到那里 .
打开终端窗口
由于您在系统文件夹中,因此系统会提示您输入密码
打开Xcode 5,您现在应该看到两个SDK
对我来说最简单的解决方案:
例如,在较旧版本的xcode中找到旧版SDK,例如"iPhoneOS6.1 sdk" . 如果还没有,你可以从这个地址的Apple Developer服务器下载它:https://developer.apple.com/downloads/index.action?name=Xcode当你打开xcode.dmg时,你可以通过打开Xcode.app(右键单击和"show contents")找到它并转到目录/开发人员/平台/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1 sdk
简单复制文件夹iPhoneOS6.X sdk并将其粘贴到xcode.app中
右键单击您的xcode.app在Applications文件夹中 .
转到目录/开发人员/平台/ iPhoneOS.platform / Developer / SDKs /
只需粘贴在这里 .
要在模拟器上测试iOS 6中的应用程序: - 只需在活动的sheme中选择iOS 6.0即可 .
要在iOS 6中构建您的应用程序,因此您的应用程序的设计将是iOS 7上的旧设计: - 在目标中选择iOS6.1 - 基本SDK
请注意:当您更改目标中的基础SDK时,iOS 7.0将不再可用于在模拟器上构建!
Can do this ,但不是真的有必要
如何做到这一点
杰森李得到了答案 . 安装xCode时,我更喜欢保留以前的安装而不是替换它们 . 所以我在我的安装文件夹中有这些
所以
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
包含不同的sdks . (将Xcode.app替换为正确的数字)将以前的sdks复制到/Applications/Xcode 3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
复制之后,这是我的文件夹 .
现在重新启动xCode,您可以将以前版本的sdks设置为基本sdk .
为什么没有必要
参考Apple Documentaion
要将特定SDK用于Xcode项目,请在项目的构建设置中进行两项选择 .
这标识了您的软件可以运行的最早的操作系统版本 .
您的软件可以使用操作系统版本中可用的功能,包括与基本SDK相对应的功能 . 默认情况下,Xcode将此设置为Xcode支持的最新操作系统 .
规则是使用latest作为基本SDK并将部署目标设置为应运行的最低版本应用程序
例如,您可以将iOS 7用作基本sdk,并将iOS 6设置为部署目标 . 在iOS 6模拟器上运行以测试它在iOS 6上的工作方式 . 如果模拟器列表不可用,请安装模拟器 .
另外,您可以无条件地使用iOS 6以上的功能 . 并且有条件地,您可以支持iOS 7的新功能,以支持新版本,同时支持以前的版本 .
这可以使用 Weakly Linked Classes , Weakly Linked Methods , Functions 和 Symbols 完成
https://developer.apple.com/library/ios/documentation/developertools/conceptual/cross_development/Using/using.html#//apple_ref/doc/uid/20002000-SW3
弱链接
假设您在Xcode中将部署目标(最低要求版本)设置为iOS6,将目标SDK(最大允许版本)设置为iOS7 . 在编译期间,编译器会弱连接iOS7中引入的任何接口,同时强烈链接早期接口 . 这将允许您的应用程序继续在iOS6上运行,但仍然可以利用更新的功能 .
这里的其他答案也是正确的,但我发现以下步骤是最简单的:
只需从开头中心链接下载Xcode 4.6.3,该链接显示"Looking for an older version of Xcode?"(当前指向here)并安装dmg .
然后在终端中,将SDK文件复制到:
最后,重新启动Xcode,你就完成了 .
我的应用程序无缝转换到Xcode 5,因为它仍然可以使用您在项目中设置的原始iOS部署目标(在我的情况下为5.1)进行构建 . 如果新的SDK不会导致一些难以解决的问题,那么为什么不使用它来构建呢?当然,引擎盖下有很多改进 .
例如,我更喜欢使用Xcode 5而不是Xcode 4.6.3 . 为什么?我将获得更多的电池寿命,因为Xcode 5中的文本/代码区域的UI滚动不再咀嚼整个CPU线程 .
如其他答案中所述,将6.1 SDK链接到Xcode 5是一步 . 但是,这仍然无法解决在iOS 7上运行新的UI元素,视图控制器是全尺寸等问题 .
如this answer中所述,还需要在iOS 7上将UI切换为传统模式:
注意:这是一个未记录的密钥,不推荐用于App Store版本!
另外,根据我在设备上测试的经验,我发现它只在我第二次启动应用程序时工作,即使我在应用程序启动时很早就运行了代码,在
+[AppDelegate initialize]
. 使用Xcode 4.6构建的版本也存在细微差别 . 例如,透明导航栏的行为不同(导致视图为全尺寸) .但是,由于Xcode 4.6.3在Mavericks上崩溃(至少对我而言,请参阅rdar://15318883),这至少是继续使用Xcode 5进行调试的解决方案 .
我按照其他答案的描述下载了XCode 4并将iOS 6.1 SDK从它带到了XCode 5 . 然后我还安装了iOS 6.1 Simulator(它在首选项中可用) . 我还将Base SDK切换到了iOS6.1在项目设置中 .
在所有这些操作之后,具有6.1 base sdk的项目在iOS 7 Simulator中以comp comp模式运行 .
从2月1日起,Apple将拒绝仅针对iOS6或更低版本构建的应用程序 . 这也是来自Apple的官方communication . 最好开始为iOS7构建 .
澄清我的陈述:如果您为iOS6或更低版本构建,Apple将拒绝您的应用 . 如果你为iOS7构建并降低一切都很好,这意味着:
你必须使用xcode5
你应该至少在iOS7上部署 .
Apple电子邮件的内容非常清楚
我目前安装了Xcode 4.6.3和5.0 . 我使用以下bash脚本将5.0链接到旧版本的SDK:
你只需要为它提供.app的路径: