2016-12-23 4 views
-1

私はcocoapodsを介して私たちによって構築された私的な依存型ポッドプロジェクトを持っています。このようなポッドプロジェクトの一部のソースコードを無効にするADHOC、Objective-C:ポッド依存からソースコードを無効にするマクロを定義するには?

#if ADHOC 
    // for ad hoc build. 
#else 
    // for app store build. 
#endif 

ポッドプロジェクトに依存していると、彼らは異なる要件を持つ2つのハイレベルのプロジェクト、アドホックビルド(PROJECTA)ごとに1つ、別のがあります。 App Storeビルド(projectB)用

Podfileに依存関係を構築した後、私はプロジェクトヘッダーファイルをインポートする前にprojectAでADHOCマクロを定義しようとしましたが、ADHOCステートメント内にソースコードを構築しません。プロジェクトの接頭辞ヘッダーファイル。

私はMasonryでMAS_SHORTHANDマクロの使用法を知っています。これらは、メインプロジェクトにコンパイルするときにショートカットメソッドをフルバージョンにあらかじめコンパイルするという2つの方法の実装を定義しています。

私の場合、メインプロジェクトのマクロ定義がポッドプロジェクトに影響する可能性があります。私はモジュールのコンパイル順を知っています。メインプロジェクトのみに焦点を当てることは不可能かもしれないので、ココアポッドはコンパイルする前にポッドプロジェクトにマクロを注入するように動作します。

Podfile(.podspecファイルではない)の設定値がある場合は、教えてください、ありがとう!

+0

私は考えをさらに更新しました。これをdownvoteすれば簡単なメモを残してください、ありがとう! :) – Itachi

答えて

0

それでした! Podfileにpost_installフックをビルドして、カスタムプリプロセッサマクロを定義しました。ここにあります。

# Inject the target macro. 
# http://stackoverflow.com/a/27138078/1677041 
post_install do |installer| 
    installer.pods_project.targets.each do |target| 
     if target.name == "foo_target_name" 
      target.build_configurations.each do |config| 
       config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)'] 
       config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'ADHOC=1' 
      end 
      puts "\n\e[3m\e[32mInject a macro ADHOC to target!\e[0m\e[23m\n\n" 
     end 
    end 
end 
+0

lee-fastenauの共有に感謝します。 http://stackoverflow.com/a/27138078/1677041 – Itachi

0

あなたがしようとしていることは良い考えではなく、不可能に近いかもしれません。

Pod-projectはプロジェクトAとプロジェクトBの依存関係です。つまり、プロジェクトAとプロジェクトBをビルドする前にpodプロジェクトがビルドされています。

あなたの提案は、プロジェクト-Aおよび/またはプロジェクト-Bに依存するpod-projectを持つことにより、依存関係を元に戻します。この問題を回避する


通常の方法では、ポッドプロジェクトが(別の名前のクラスやメソッドで)アドホックおよびApp Storeの行動の両方でビルドしています。これは、プロジェクト-AのADHOCマクロを使用して、アプリケーションストアの動作ではなくアドホックな動作を選択する場合です。

#if defined(ADHOC) 
#define MyClass MyClassAdHoc 
#else 
#define MyClass MyClassAppStore 
#endif 

… 

MyClass *instance = [[MyClass] alloc] init]; 
+0

次のコードは、ポッドライブラリの2つのクラスシンボルを定義し、私の予想されるソリューションは、ロジックコードを分割することです、彼らは異なっています。私はすぐに期待された解決策を働いて、[私の答え](http://stackoverflow.com/a/41303026/1677041)をチェックしてください。お返事をありがとうございます! :) – Itachi

+0

@Itachiは、サブクラス化による分割ロジックをカプセル化することをお勧めします。あなたのソリューションには幸運があります。 –

+0

ちょうどあなたが意味する、サブクラス化を得る。ありがとう! – Itachi

関連する問題