我的公司正在开发一个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
}
答案 0 :(得分:1)
CallKit。 Xcode 7仅支持iOS 9。如果您需要使用此框架,则需要更新到支持iOS 10的最新Xcode(显然是Xcode8)。
因此,只有iOS 10的用户才能使用此功能,而不能使用iOS 9.