在XCode 7下的编译框架中使用新的iOS 10 API

时间:2016-10-20 12:05:57

标签: ios xcode compilation compatibility

我的公司正在开发一个iOS SDK,它使用新的CallKit API。 SDK(.framework)使用XCode 8 / SDK 10.0编译。 但是,一些客户仍在使用XCode 7 - 当我尝试在XCode 7项目下集成我们的SDK时,我收到以下错误:

ld: framework not found CallKit for architecture arm64

但是,我在SDK代码中添加了一些宏指令,以提供CoreTelephony后备,但是有了这个技巧的事件,项目的目标不会与上面的消息一起编译。

这是指令示例:

#ifdef __IPHONE_10_0
@import CallKit;
#endif

您是否有使用在XCode 7下运行的iOS 10 API编译的SDK的技巧?

修改

找到一种方法来管理它。想法是懒惰加载CallKit(运行时)。我不得不调用performSelector而不是直接调用方法。

以下是一些代码:

    // Lazy load CallKit framework to keep compatibility for XCode 7 SDK integration
    if ([[AppKit sharedInstance] systemVersion] >= kIosSystemVersion10) {
        NSBundle *b = [NSBundle bundleWithPath:@"/System/Library/Frameworks/CallKit.framework"];
        _isCallKitFrameworkLoaded = [b load];
    }

    if (_isCallKitFrameworkLoaded) {
        SEL callObserverDelegate = NSSelectorFromString(@"setDelegate:queue:");
        if ([_callObserver respondsToSelector:callObserverDelegate]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
            [_callObserver performSelector:callObserverDelegate withObject:self withObject:(__bridge id)(_callObserverQueue)];
#pragma clang diagnostic pop
        }
    } else {
        // CoreTelephony fallback
    }

1 个答案:

答案 0 :(得分:1)

iOS 10及更高版本中提供了

CallKit。 Xcode 7仅支持iOS 9。如果您需要使用此框架,则需要更新到支持iOS 10的最新Xcode(显然是Xcode8)。

因此,只有iOS 10的用户才能使用此功能,而不能使用iOS 9.