Xcode 5有一个首选项窗格,允许一个人下载iPhone 6.1模拟器,但我找不到一个地方,它允许下载iOS 6 SDK,因此不可能将活动SDK设置为iOS 6时,用Xcode 5开发。是否存在允许Xcode 5安装iOS 6 SDK的解决方案?
编辑:
既然Xcode 5已经普遍可用,并且允许你下载以前版本的SDK,那么变通方法应该不再是必要的了。
Xcode 5有一个首选项窗格,允许一个人下载iPhone 6.1模拟器,但我找不到一个地方,它允许下载iOS 6 SDK,因此不可能将活动SDK设置为iOS 6时,用Xcode 5开发。是否存在允许Xcode 5安装iOS 6 SDK的解决方案?
编辑:
既然Xcode 5已经普遍可用,并且允许你下载以前版本的SDK,那么变通方法应该不再是必要的了。
当前回答
我目前已经安装了Xcode 4.6.3和5.0。我使用下面的bash脚本将5.0链接到旧版本的sdk:
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;
你只需要为它提供.app的路径:
./xcode.sh /Applications/Xcode-463.app
其他回答
当我更新到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。平台/开发者/ sdk &重新启动xcode。
但如果你更新Xcode,这可能会被Xcode删除。
2)另一种方法是解压并粘贴到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS。平台/开发者/SDK并在这里创建一个符号链接,这样即使你更新了Xcode, SDK也会保持不变。
我做的另一个改变,构建设置>架构>标准(不是64),所以列出部署目标的所有版本
如果只是想更改部署目标,则不需要下载压缩包。
以下是一些截图。
从2月1日起,苹果将拒绝为iOS6或更低版本开发的应用程序。下面是苹果公司的官方信息。最好开始为iOS7开发。
澄清一下我的声明:如果你为iOS6或更低版本开发应用,苹果会拒绝你的应用。 如果你是为iOS7及更低版本开发,那么一切都没问题,这意味着:
您必须使用xcode5 你至少应该在iOS7上进行部署。
我很清楚苹果邮件的内容
“确保你的应用能与创新技术无缝对接 iOS 7。从2月1日开始,新的应用程序和应用程序更新提交到 应用商店必须使用Xcode 5和iOS 7 SDK。”
可以这样做,但是没有必要吗
怎么做呢
杰森·李得到了答案。在安装xCode时,我宁愿保留以前的安装,而不是替换它们。这些都在我的安装文件夹里
所以/应用程序/ xcode /内容/开发/平台/ iPhoneOS。platform/Developer/ sdk包含不同的sdk。(取代Xcode。应用程序与正确的数字)复制以前的SDKS到
/应用程序/ Xcode 3.应用/内容/开发/平台/ iPhoneOS.platform /开发/ sdk
这是我复制后的文件夹。
现在重新启动xCode,你可以将以前版本的sdk设置为基础sdk。
为什么没有必要
引用Apple Documentaion
为了在Xcode项目中使用特定的SDK,在项目的构建设置中做两个选择。
选择一个部署目标。 这标识了软件可以在其上运行的最早的操作系统版本。 选择基础SDK 您的软件可以使用OS版本中提供的功能,包括与基本SDK对应的版本。默认情况下,Xcode将此设置为Xcode支持的最新操作系统。
规则是使用最新的基础SDK,并将部署目标设置为应用程序应该运行的最低版本
例如,你可以使用iOS 7作为基础sdk,并设置iOS 6作为部署目标。在iOS 6模拟器上运行以测试它在iOS 6上的工作方式。安装模拟器,如果模拟器列表不可用。
另外,您可以无条件使用iOS 6以上的功能。有条件地,你可以在支持以前版本的同时,为新更新的设备支持iOS 7的新功能。
这可以使用弱链接类、弱链接方法、函数和符号来实现
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 5,因为它仍然可以使用你在项目中设置的原始iOS部署目标(在我的情况下是5.1)来构建。如果新的SDK不会导致一些不可克服的问题,那么为什么不使用它来构建呢?当然,在引擎盖下有很多改进。
例如,我更喜欢使用Xcode 5而不是Xcode 4.6.3。为什么?我将获得更多的电池寿命,因为Xcode 5中文本/代码区域的UI滚动不再占用整个CPU线程。
将6.1 SDK链接到Xcode 5是第一步。然而,这仍然不能解决在iOS 7上运行的新UI元素,视图控制器是全尺寸的等问题。
正如在这个回答中所描述的,在iOS 7上还需要将UI切换到遗留模式:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"UIUseLegacyUI"];
[[NSUserDefaults standardUserDefaults] synchronize];
注意:这是一个未记录的键,不建议应用程序商店构建!
此外,根据我在设备上测试的经验,我发现它只能在我第二次启动应用时运行,即使我在应用启动的早期运行了代码,在+[AppDelegate initialize]中。此外,它与使用Xcode 4.6构建的版本也有细微的区别。例如,透明导航条的行为不同(导致视图是全尺寸的)。
然而,由于Xcode 4.6.3在Mavericks上崩溃(至少对我来说,见rdar://15318883),这至少是一个继续使用Xcode 5进行调试的解决方案。