设置 Base SDK 和 iOS Deployment Target

来源:互联网 发布:matlab 定义矩阵函数 编辑:程序博客网 时间:2024/06/06 13:12
在iPhone 开发中,时常被版本所困扰, 苹果公司总会定期发布 iPhone 开发包,不是仅仅发布一个 patch, 而是整个 开发包完全更新,况且,还不支持断电续传,iOS 4.3 以后的版本, 已达 4 G 之多, 下载工作量 可想而知。 正是因为更新频繁, 我们需要搞清楚  XCcode 版本 和  iOS SDK 版本。 如何查看这两个版本号呢?

在开发iphone 之前,首先需要从 苹果 iphone  开发网站上,下载所需的 SDK。 这个开发包 本身就带有 版本信息。 比如:下载 苹果最新发布的:   xcode_3.2.6_and_ios_sdk_4.3  。 这个开发包表明: Xcode的版本号是: 3.2.6, 而 iOS SDK 的版本号 是 4.3.

Xcode 中 iOS SDK 和  iOS Deployment Target 的设置:
Base SDK 指的是,当前编译所用的SDK 版本; OS Deployment Target  指的是,编译后的 app 可在 终端的哪个 版本上运行。

需对 Project 和 Target 分别设置:
1. Project 设置方法:
(1)从 Xcode  Menu, 逐级进入  Project -> Edit Project Settings -> Build ->  Base SDK
(2)以同样方式进入  iOS  Deployment Target
2. Target 设置方法:
(1)从 Xcode  Menu, 逐级进入  Project -> Edit Active  Target  -> Build ->  Base SDK
(2)以同样方式进入  iOS  Deployment Target  



注意: 确保 Project  和 Target 的设置 保持一致。

这里 以 Flex Radio (一款 网络电台)设置为例。

  Base SDK 设置为:  iOS  4.1

  iOS  Deployment Target   设置为:3.2 。
通过这个设置, 编译出来的 ipa 文件 便可在 iphone 3.2 以上版本 安装。

有时会发生一个怪异的现象: 若你的 iPhone 版本为 4.3, 而开发 SDK 为 4.1 ,  在 XCode  Build &Go 时,会提示错误: iphone 版本太低,无法下载。 而且 在 XCode  windows-> Organizer 下 该 iphone 图标显示为 黄色, 而只有 绿色 才能正确下载。

怎么办呢?  这里给出一个小窍门:

在你的 Mac OS 上 安装 SDK 4.3 。 打开 SDK 4.3 版本的XCode, 并将 你手头的iphone (比如: 4.3 版本) 与 mac book 相连。 黄灯会变为 绿灯。 这时,再切换到到 4.1 版本的XCode,   便可正常下载到 4.3 版本的 iphone 上。


IOS SDK兼容性引导
转自: http://mobile.51cto.com/iphone-284052.htm


IOS SDK兼容性引导是本文要介绍的内容,主要是基于IOS SDK基础的开发介绍说明如何应用于XCode工程的基于IOS SDK开发的技术。来看详细内容讲解。

1、用(weakly linked)弱连接类、方法和函数来支持在不同版本之间的程序运行

2、弱连接整个框架(framework)

3、为不同的IOS SDK选择不同的编译条件

4、在代码中找出过时API的使用

5、确定在运行时操作系统和框架(framework)的版本

一 、在IOS中使用弱连接类

在工程中使用类的弱连接的时候必须确保这些类在运行时的可用性,要不会引起动态连接的错误。

在IOS4.2以后的版本都是使用NSObject class的方法来检测弱连接在运行时态的可用性,这种简单高效的机制使用了NS_CLASS_AVAILABLE的可用性宏。

检测最近release的framework还不支持NS_CLASS_AVAILABLE的宏

在支持NS_CLASS_AVAILABLE的宏framework的条件编译中,可以如下的使用

if ([UIPrintInteractionController class]) {   
    // Create an instance of the class and use it.   
} else {   
    // Alternate code path to follow when the   
    // class is not available.   

如果你在不确保是否已经可以使用类方法的时候你可以使用NSClassFromString 方法来判断,使用方法如下:

Class cls = NSClassFromString (@"NSRegularExpression");   
if (cls) {   
    // Create an instance of the class and use it.   
} else {   
    // Alternate code path to follow when the   
    // class is not available.   

二、在方法,函数和符号中使用弱连接

和使用类的弱连接一样,在使用它之前要确保方法函数和符号在运行时的可用性,要不在编译的时候会报错动态连接错误,假设你想使用新版本IOS 
SDK的特性但是又想能够运行在低版本的SDK中,那么就要对早期的版本设置相应的开发target,在Object-c中 
instancesRespondToSelector: 
方法告诉我们所给的方法是否可用,例如:使用availableCaptureModesForCameraDevice:这个方法(在4.0以后才是可
用的),我们可以这样使用它。

1、检查一个Object-c方法的可用性

if ([UIImagePickerController instancesRespondToSelector:   
              @selector (availableCaptureModesForCameraDevice:)]) {   
    // Method is available for use.   
    // Your code can check if video capture is available and,   
    // if it is, offer that option.   
} else {   
    // Method is not available.   
    // Alternate code to use only still image capture.   

判断一个弱连接的C函数是否可用,只要判断函数的地址是否返回为NULL,以CGColorCreateGenericCMYK 函数为例,我们可以像以下那样使用。

2、检查C方法的可用性

if (CGColorCreateGenericCMYK != NULL) {   
    CGColorCreateGenericCMYK (0.1,0.5.0.0,1.0,0.1);   
} else {   
    // Function is not available.   
    // Alternate code to create a color object with earlier technology   
}  
要检测一个C方法是否可用,比较明确的为地址是否为NULL或零。你不能使用反运算符(!)来否定一个函数的可用性

检测一个 external(extern)常量或一个通知的名字应当比较它的地址(address)--而不是符号的名称, 判断是否为NULL or nil

三、弱连接整个Framework

比如一个在高版本中才出现的Framework,想在低版本使用他的特性。那你就必须弱连接那个使用的Framework,详见官方的图解---(其实就是在添加进去的Framework的 required 改成 optional)

http://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/XcodeProjectManagement/
130-Files_in_Projects/project_files.html#//apple_ref/doc/uid/TP40002666-SW4 
四、条件编译for不同的SDK

如果你不止基于一个IOS SDK编译,你就可能需要为base 
sdk使用条件化,可以使用在Availability.h中的定义。这个.h文件存在于系统的文件夹/usr/include的文件夹下,例如想在
Mac OS X v10.5(而不是IOS)中使用函数 CGColorCreateGenericCMYK

使用预处理指令for条件编译

#ifdef __MAC_OS_X_VERSION_MAX_ALLOWED   
    // code only compiled when targeting Mac OS X and not iOS   
    // note use of 1050 instead of __MAC_10_5   
#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1050   
    if (CGColorCreateGenericCMYK != NULL) {   
        CGColorCreateGenericCMYK(0.1,0.5.0.0,1.0,0.1);   
    } else {   
#endif   
    // code to create a color object with earlier technology   
#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1050   
    }   
#endif   
#endif   

五、寻找出在程序中使用的以过时的实例

在IOS或Mac 
OS中有时候API会过时,但是过时不代表着那些就从Library或framework中删除,但是在使用的过程中会报出warning,并且在不远的
将来可能会被Apple从中移除。例如我们在code中使用了过时的函数 HPurge那么就会报出如下

'HPurge' is deprecated (declared at /Users/steve/MyProject/main.c:51) 
所以我们应当在工程中查找出如下的警告并且修改。

                  以上内容转自:http://www.cnpetweb.com/a/wangzhanjianshezixun/2012/0111/32164.html
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq号显示手机号怎么办 运动鞋大了怎么办妙招 鞋买小了挤脚怎么办 鞋子买太大了怎么办 买了nike betrue怎么办 手表蹭花了怎么办 迅雷登录太频繁怎么办 糖果手机声音小怎么办 产品出现了问题怎么办 插头螺丝太紧怎么办 宜家儿童乐园怎么办卡 泰国旅游有蚊子怎么办 啦泰国旅游拉肚子怎么办 电动车上不了牌怎么办 电动车电压低了怎么办 电车显示器不亮怎么办 电动车故障显示m怎么办 电动车上面出现m怎么办 佰仟乐购额度没有了怎么办 交易密码忘记了怎么办? 电脑打开没网怎么办 网络配适器无法运行怎么办 电脑dns没有响应怎么办 win7系统没有网上邻居怎么办 win10网络重置了怎么办 win7桌面没有网上邻居怎么办 win7电脑没有网上邻居怎么办 无线网连接受限怎么办 win7账户被锁定怎么办 贷款sdk授权失败怎么办 京东保价发票怎么办 淘宝购物出现质量问题怎么办 淘宝购物降价了怎么办 淘宝购物物流慢怎么办 在淘宝购物退货怎么办 淘宝购物未付款怎么办 淘宝购物余额不足怎么办 淘宝购物漏发货怎么办 京东618无货怎么办 iis默认文档无效怎么办? 购物卡没有磁性怎么办