本文转载至
最近一直在做app的iOS 6和7的同时适配工作,所以在此介绍一下系统与设备的兼容问题。
一、Base SDK与Deployment Target
一个项目(Project)可以有多个目标(Target),每个目标可以指定不同的设置(例如支持不同的系统版本,引用不同的Framework等)。项目设置会覆盖默认设置,而每个目标的设置则会覆盖项目设置。在Xcode的项目浏览窗口中点击项目,在TARGETS中选择某个目标,即可在右侧的“Build Settings”中看到默认设置、项目设置、所选目标设置与最终的设置值。
其中Base SDK指的是用哪个版本的SDK来编译、链接项目源代码。一般来讲Base SDK选择当前Xcode支持的最高版本的SDK(Latest iOS SDK)来编译链接项目工程,这样就可以获得最新的SDK中提供的新功能。
另一个设置是Deployment Target,它指的是能够支持目标正确运行的最低系统版本。默认情况下,Xcode会将该值设置为Base SDK中指定的值,但可以手动修改该值以支持老的系统和设备。你不可以用低于Deployment Target指定的版本的模拟器或者真机来运行和打包app。
例如,当使用Xcode 5打开某个项目时,Base SDK为7.0,也就是用7.0的SDK来编译链接项目app。如果这个app只想支持iOS 7系统,则Deployment Target可以设置为7.0。如果你的app还想兼容iOS 6或者更早版本,则应把Deployment Target置为要支持的最低的系统版本号。由此可知,Deployment Target一定小于等于Base SDK。
注意,因为此时是用最新的SDK生成app,但却允许在早期版本的系统上运行,所以此时开发者要确认在旧系统上运行app时不能调用那些新的SDK中添加的功能,否则会在运行时出错导致app闪退。下面就介绍一下如何确保app能够在旧的系统上正确运行。
二、适配旧系统时的注意事项
app在旧的系统上运行的过程中,可能会使用系统未提供的常量、变量、C函数、类、类的方法,也可能会调用不存在的Framework中的功能。对于Xcode4.6.3及更早版本,程序可以编译通过,但运行时闪退。Xcode 5则进行了很大改进,如果代码中出现了上述情况,直接给出警告和错误。
未完待续。
- 上一篇: