0
我的公司正在開發一個iOS SDK,它使用新的CallKit API。 SDK(.framework)使用XCode 8/SDK 10.0進行編譯。 不過,一些從客戶仍在使用的XCode 7 - 當我嘗試我們的SDK中的XCode 7項目下的整合,我得到了以下錯誤:在XCode 7編譯框架中使用新的iOS 10 API
ld: framework not found CallKit for architecture arm64
不過,我把一些宏觀指導到SDK代碼,提供一個CoreTelephony後備,但事件與此技巧,該項目的目標不會與上述消息編譯。
這裏是指令例子:
#ifdef __IPHONE_10_0
@import CallKit;
#endif
你有一招用與iOS API 10下XCode的7個工作編制了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
}
我知道最新的Xcode(顯然Xcode8)那也許我很難解釋這個問題。該框架已經在XCode 8下編譯(靜態庫.a)。但是,我們的客戶誰集成了我們的SDK(仍然編譯在XCode 8下)正在使用XCode 7.第一種解決方案是編譯2個框架,一個用於iOS 10,一個用於iOS 9。但這並不理想,我想知道在構建我們的SDK之前是否可以放置一些宏.--以避免生成兩個靜態庫。 – SlumTheSlug