0

私の目標はフレームワークを構築することですが、パブリックヘッダーからいくつかのメソッドとプロパティを非表示にします

重要なのは、フレームワークにはすべてが組み込まれているが、バージョンが異なれば、いくつかのプロパティとメソッドを非表示にする必要があるということです。

ビルドされたヘッダーからいくつかのマークされたプロパティを削除するか、ビルドフェーズ中にそれらが追加されないようにする方法を探しています。

私の考えでは、次のようになります。

@interface MyClass

@property (strong, nonatomic) SomeClass1* instance1;

#AVAILABLE FROM 1.0.2
@property (strong, nonatomic) SomeClass2* instance2;

#AVAILABLE FROM 1.0.3
@property (strong, nonatomic) SomeClass3* instance3;

- (void) method1;

#AVAILABLE FROM 1.0.3
- (void) method2;

@end

したがって、事前定義されたバージョン値またはプロジェクトバージョン値(実際には重要ではありません)を1.0.2
に設定すると、instance1、instance2、およびmethod1がフレームワークヘッダーに
含まれる必要がありますが、instance3およびmethod2はバージョン1.0.3またはより高い

誰かがそれを行う方法を知っていますか?

4

1 に答える 1

1

コンパイル前のステップでそれを行うことができます:

a)すべてのbuildTargetのプロジェクトで、version()のような#def値を作成します#define VERSION 1.0。すべてのbuildTargetには異なるバージョンが必要であり、FWの異なるバージョンを表します。これを行うには、プロジェクトオプション、ビルドターゲットオプション->ビルド設定->PRECOMPILERMACROSに移動します。

b)GREATER THAN:のようなプリコンパイラ関数を作成します #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) v>= VERSION(これは.pchで定義できます)

c)ヘッダーに

  #if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(1.0.2))
  property (strong, nonatomic) SomeClass2* instance2;
  #endif

あなたはそれがあなたの問題を解決すると思いますか?

そうすると、プリコンパイラは自分のバージョンの下にあるコードをジャンプします

于 2012-12-19T16:10:18.763 に答える