ABAddressBook 到 CNContact 应用程序转换
ABAddressBook to CNContact App Transition
我正在开发一款即将发布但使用 ABAddressBook 框架的应用程序。随着 iOS9 中 ABAddressBook 的弃用,我是否需要检查用户的 iOS 版本,并为 iOS9 之前的用户使用 ABAddressBook,为 iOS9 用户使用 CNContact?
其他人是如何处理这件事的?我以前从未遇到过这样的情况。
我也一直在处理和研究这个问题,我选择做的是按照你的建议;检查用户 iOS 版本,执行如下操作:
NSString *version = [[UIDevice currentDevice] systemVersion];
BOOL isVersion8 = [version hasPrefix:@"8."];
BOOL isVersion7 = [version hasPrefix:@"7."];
//...
...根据您决定为您的应用支持的版本继续。
然后我检查是否使用早于 iOS 9 的地址簿框架,以及 iOS 9 及更高版本的联系人框架。
if(isVersion7 || isVersion8){
//Use AddressBook
}
else{
//Use Contacts
}
这是我能想到的处理弃用业务的最佳方式...
弃用并不意味着删除。只需将链接到这两个框架作为可选,然后开始设计可以处理这两个框架的数据工作流。另外请注意 CNContact 是新的并且充满了错误。
一旦您认为您的应用已经重构并且 iOS 进化到 9.1 就给它开绿灯
如何知道系统是否支持功能
1) 检查class是否存在
if(NSClassFromString(@"CNContact")) {
// Do something
}
对于弱链接 classes,直接向 class 发送消息是安全的。值得注意的是,这适用于未明确链接为 "Required" 的框架。对于缺少的 classes,表达式的计算结果为 nil。
2)
#ifned NSFoundationVersionNumber_iOS_9
#def NSFoundationVersionNumber_iOS_9 NUMBER
#endif
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9) {
// Use address book
} else {
// Use contact framework
}
运行模拟器中的应用找到NSFoundationVersionNumber常量
if #available(iOS 9, *)
{
// iOS 9 - CNContact
}
else
{
// iOS 8 - ABAddressBook
}
这才是正确的检查方式
我正在开发一款即将发布但使用 ABAddressBook 框架的应用程序。随着 iOS9 中 ABAddressBook 的弃用,我是否需要检查用户的 iOS 版本,并为 iOS9 之前的用户使用 ABAddressBook,为 iOS9 用户使用 CNContact?
其他人是如何处理这件事的?我以前从未遇到过这样的情况。
我也一直在处理和研究这个问题,我选择做的是按照你的建议;检查用户 iOS 版本,执行如下操作:
NSString *version = [[UIDevice currentDevice] systemVersion];
BOOL isVersion8 = [version hasPrefix:@"8."];
BOOL isVersion7 = [version hasPrefix:@"7."];
//...
...根据您决定为您的应用支持的版本继续。
然后我检查是否使用早于 iOS 9 的地址簿框架,以及 iOS 9 及更高版本的联系人框架。
if(isVersion7 || isVersion8){
//Use AddressBook
}
else{
//Use Contacts
}
这是我能想到的处理弃用业务的最佳方式...
弃用并不意味着删除。只需将链接到这两个框架作为可选,然后开始设计可以处理这两个框架的数据工作流。另外请注意 CNContact 是新的并且充满了错误。
一旦您认为您的应用已经重构并且 iOS 进化到 9.1 就给它开绿灯
如何知道系统是否支持功能
1) 检查class是否存在
if(NSClassFromString(@"CNContact")) {
// Do something
}
对于弱链接 classes,直接向 class 发送消息是安全的。值得注意的是,这适用于未明确链接为 "Required" 的框架。对于缺少的 classes,表达式的计算结果为 nil。
2)
#ifned NSFoundationVersionNumber_iOS_9
#def NSFoundationVersionNumber_iOS_9 NUMBER
#endif
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9) {
// Use address book
} else {
// Use contact framework
}
运行模拟器中的应用找到NSFoundationVersionNumber常量
if #available(iOS 9, *)
{
// iOS 9 - CNContact
}
else
{
// iOS 8 - ABAddressBook
}
这才是正确的检查方式