2016-03-28 4 views
1

私はcocoapodsで提供されています、そしてcocoapodsを使用したくない人のためのマニュアルのダウンロードなどのiOS SDKを構築しているためにビルド設定をお読みください。 cocoapods経由でSDKをインストールすると、自動的にビルド設定に "-ObjC"値が追加されます。その他のリンカフラグ。は、プログラムのXcodeプロジェクト

私は(それは素晴らしいことだので、私が間違っている場合は、私を修正してくださいが)、プログラムのビルド設定に書き込みする方法がないことをかなり確信しています。しかし、プログラムでビルドの設定を読み込む方法があるのだろうかと思います。

私はそうするためにそれらを伝えるエラーメッセージを提示し、ユーザーが追加していません、その後場合は、「-ObjC」他のリンカのフラグで、私のSDK内のビルド設定から読みたいです。

私は既に、SDKドキュメントの「その他のリンカフラグ」に「-ObjC」を追加する必要があると指定しましたが、このセクションを逃したユーザーがいくつかありました。そのため、 Xcode。

+0

ランタイムはおそらくありますが、あなたをチェックしますできます、例えばあなたが決して呼び出さないオブジェクトファイルにいくつかのランダムメソッドを持っていて、それを動的にロードしようとします。それが失敗すると、おそらく-objcを忘れてしまい、あなたはアサートしたり、ログしたりすることができます。 –

+0

ここで私の答えを確認することができます:http://stackoverflow.com/a/39853547/5165668。プログラムでビルドの設定を読み込む方法があれば、それはあなたの答えです。ただし、実行スクリプトを使用する必要がありますし、スタティックライブラリ内から実行スクリプトをいくつかのプロジェクトに追加できるかどうかはわかりません(方法を知っていれば返信してください)。 – OlDor

答えて

1

私はあなたが設定ファイルを読み込むことができるとは思いませんが、巧妙なトリックがあります:

あなたがクラスに分類する方法を追加し、それが存在するかどうかを確認することができます。その理由は、未使用のカテゴリメソッドがObj-Cフラグなしではリンクされないためです。

ですから、ただそこに空のセレクタを取得するために

@interface NSString (ObjCFlagTesting) 
-(void) myLibName_TestLinkerFlag; 
@end 

@implementation NSString (ObjCFlagTesting) 
-(void) myLibName_TestLinkerFlag {} 
@end 

ような何かをして、それがどこか他の実行時に利用できるかどうかを確認することができます

-(BOOL) isObjCFlagSet 
{ 
    return [[NSString alloc] init] respondsToSelector: @selector(myLibName_TestLinkerFlag)]; 
} 
+0

うわー、これは素晴らしい、ありがとう!私はSDKの初期化段階でこれを行うつもりです。 NSErrorをログに記録し、Xcodeが例外をスローするのを待つか、それとも私自身の例外を先に投げるべきかをお勧めしますか?私はXcodeの方がカテゴリメソッドを見つけることができないと言っているだけで、問題を解決する方法については何も言わないので、自分自身を投げることに傾いています。 – RDSpinz

+1

までお電話ください。個人的には、おそらく最悪の結果かもしれないホストアプリケーションをクラッシュさせる可能性があるので、私はSDKに例外をスローしません。あなたはいつでもエラーをログに記録し、その後は何もしないでください。 – mszaro

関連する問題