2016-12-21 11 views
0

私はObjective Cを持つXcodeプロジェクトに取り組んでいます。これはオプションのフレームワークを持っています。つまり、プロジェクトにリンクされている/存在する場合にのみ、特定のフレームワークからコードが実行されます。私が使用している現在のフレームワークはPassKitです。どうすればこれを達成できますか?フレームワークがリンクされているかどうかを確認できるマクロがありますか?このような何かが、それは動作しません:Xcodeでフレームワークが追加/リンクされている場合のみヘッダーファイルを含めるには?

また、私は私のターゲットに自動的に NO リンクフレームワークを設定している
#if __has_include("PassKit.h") && __has_include(<PassKit.h>) 
#import <PassKit/PassKit.h> 
#endif 

- (void)viewDidAppear:(BOOL)animated { 
    if ([PKPassLibrary class]) { 
     UIAlertController *alert = [UIAlertController 
           alertControllerWithTitle:@"PassKit Test" 
           message:@"PassKit is linked." 
           preferredStyle:UIAlertControllerStyleAlert]; 

     UIAlertAction* okButton = [UIAlertAction 
           actionWithTitle:@"Ok" 
           style:UIAlertActionStyleDefault 
           handler:^(UIAlertAction * action) { 
            NSLog(@"Ok pressed..."); 
           }]; 

     [alert addAction:okButton]; 

     [self presentViewController:alert animated:YES completion:nil]; 
    }} 

。あなたの答えと助けてくれてありがとう。

+1

正常にインクルードしますが、使用する前にその機能が利用可能かどうかを確認してください。可能であれば、次の複製:http://stackoverflow.com/questions/33038137/xcode-and-optional-frameworks – Sealos

+0

私はこれをどのように使用することができないのですか?この関数の 'weak_import'ですか? MyWeakLinkedFunction()__attribute __((weak_import)); 'フレームワーク名のパラメータ?これをPassKitとどのように接続できますか? – MattCodes

+0

実行時にフレームワークが存在するかどうかわかるものが必要です。フレームワークが存在する場合は、コードが実行されます。 – MattCodes

答えて

0
#if __has_include(<PassKit/PassKit.h>) || __has_include("PassKit.h") 
#define XXXPKTrigger 
#endif 

- (void)viewDidAppear:(BOOL)animated { 
#ifdef XXXPKTrigger 
    UIAlertController *alert = [UIAlertController 
           alertControllerWithTitle:@"PassKit Test" 
           message:@"PassKit is linked." 
           preferredStyle:UIAlertControllerStyleAlert]; 

    UIAlertAction* okButton = [UIAlertAction 
           actionWithTitle:@"Ok" 
           style:UIAlertActionStyleDefault 
           handler:^(UIAlertAction * action) { 
            NSLog(@"Ok pressed..."); 
           }]; 

    [alert addAction:okButton]; 
    [self presentViewController:alert animated:YES completion:nil]; 
#else 
// do another logic 
#endif 
} 
+0

このコードスニペットは解決策であるかもしれませんが、[説明を含む](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – peacetype

関連する問題