【发布时间】:2016-10-20 12:05:56
【问题描述】:
我的公司正在开发一个 iOS SDK,它使用新的 CallKit API。 SDK (.framework) 使用 XCode 8 / SDK 10.0 编译。 但是,有些客户仍在使用 XCode 7 - 当我尝试将我们的 SDK 集成到 XCode 7 项目下时,出现以下错误:
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
}
【问题讨论】:
标签: ios xcode compilation compatibility