2016-10-20 5 views
0

Mon entreprise développe un SDK iOS, qui utilise les nouvelles API CallKit. Le SDK (.framework) est compilé avec XCode 8/SDK 10.0. Cependant, certains sur les clients utilisent encore XCode 7 - Lorsque je tente d'intégrer notre SDK dans un projet XCode 7, je suis l'erreur suivante:Utilisation de la nouvelle API iOS 10 dans un framework compilé sous XCode 7

ld: framework not found CallKit for architecture arm64 

Cependant, je mets une directive macro dans le code SDK , pour fournir un repli CoreTéléphonie, mais l'événement avec cette astuce, la cible du projet ne compile pas avec le message ci-dessus.

Voici l'exemple directive:

#ifdef __IPHONE_10_0 
@import CallKit; 
#endif 

Avez-vous une astuce pour utiliser un SDK compilé avec l'API iOS 10 travaillant sous XCode 7?

EDIT

trouver un moyen de gérer cela. L'idée est de charger paresseux CallKit (runtime). J'ai dû appeler performSelector au lieu d'appeler directement des méthodes.

Voici un code:

// 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 
    } 

Répondre

1

CallKit est disponible à partir de iOS 10 et versions ultérieures. Prise en charge de Xcode 7 jusqu'à iOS 9 uniquement. Si vous avez besoin d'utiliser ce cadre, vous devez mettre à jour à la dernière Xcode (évidemment Xcode8) qui supporte iOS 10.

Ainsi, les utilisateurs qui ont iOS 10 ne peuvent utiliser cette fonctionnalité et non iOS 9.

+0

Je sais cela, peut-être que j'ai mal expliqué le problème. Le framework est déjà compilé, sous XCode 8 (static library .a). Mais nos clients qui intègrent notre SDK (encore compilé sous XCode 8) utilisent XCode 7. La première solution serait de compiler 2 frameworks, un pour iOS 10, et un pour iOS 9. Mais ce n'est pas idéal, je voudrais savoir si je peux mettre des macros avant de construire notre SDK.- pour éviter de générer deux librairies statiques. – SlumTheSlug