2016-10-20 60 views
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 
    } 

回答

1

CallKit可從iOS的10及更高版本。 Xcode 7僅支持iOS 9。如果你需要使用這個框架,你需要更新到支持iOS的10

那麼誰是有iOS的10只可使用該功能的用戶,而不是iOS的9

+0

我知道最新的Xcode(顯然Xcode8)那也許我很難解釋這個問題。該框架已經在XCode 8下編譯(靜態庫.a)。但是,我們的客戶誰集成了我們的SDK(仍然編譯在XCode 8下)正在使用XCode 7.第一種解決方案是編譯2個框架,一個用於iOS 10,一個用於iOS 9。但這並不理想,我想知道在構建我們的SDK之前是否可以放置一些宏.--以避免生成兩個靜態庫。 – SlumTheSlug