2012-05-12 10 views
4

私は異なる環境に応じて異なるプロジェクトを持っているので、プロジェクトはまったく同じですが、一部のURLの変更だけです。通常、ダミーのWebサービスにアクセスする作業環境があり、クライアントのWebサービスの使用を開始する必要がある場合は、そのURLをすばやく切り替えるだけです。これを達成するために、私の最初のアイデアは、各Webサービスのエンドポイント(クライアントは複数のURLを持つことができる:プリプロダクション、テスト、プロダクション)に従って異なるplistファイルを持つことでした。したがって:iOSのスキームまたはターゲット

  1. これは私が持っている最良の選択ですか?各Webサービスのエンドポイントごとに異なるplistを持っていますか? (プロジェクトはまったく同じですが、エンドポイントのみが異なります)

  2. 環境ごとに新しいターゲットを作成するのは意味がありますか?あるいは私は同じ の計画でこれを行うことができますか?

答えて

2

変更する必要があるパラメータの数に応じて、マクロなどで変更できます。

#define _DEBUG_MODE 
    NSString endpoiunt = @"foo"; 
#elseif 
    NSString endpoiunt = @"foo"; 
#endif 

次に、あなたが簡単にあなたが別のターゲットになるには心配せずにマクロを宣言したデバッグ手法のためのコンパイラフラグを付けることができます。

.plistファイルを保持したい場合は、簡単に同じ方法を使用できますが、エンドポイントをハードコッティングする代わりにファイル名を変更します。しかし、2つのターゲットを使用していない限り、両方のplistsをコピーすることになります(コピーフェーズでファイルを条件付きでインクルードすることは可能ですが、どうしたらよいか分かりません)

+0

'#define _DEBUG_MODE'ダンスを忘れました、ありがとうございます。ええ、私はplistのアプローチに行くと思います。 – Peres

0

簡単なケースでは、次のアプローチ:

MONAppsWebServiceURL.h

NSURL * MONAppsWebServiceURL(void); 

MONAppsWebServiceURL.m

#import "MONAppsWebServiceURL.h" 

#define MON_APP_USE_DUMMY_SERVICE 1 

NSURL * MONAppsWebServiceURL(void) { 
#if MON_APP_USE_DUMMY_SERVICE 
// perhaps you want warnings as errors for distro 
#warning using dummy web service 
    return the dummy url; 
#else 
    return the real url; 
#endif 
} 

これは、変更するときに1つのファイルの変更と再コンパイルが必要です。この方法を使用して、ロードするplistを特定することもできます(出荷前に取り外す限り)。

もっと複雑な問題にはもっと複雑な解決策がありますが、これはおそらくすべて必要です。私はそれを見るように、この場合必要なスキームや追加のターゲットはありません。

+0

新しいビルド構成で 'MON_APP_USE_DUMMY_SERVICE'(または他のプリプロセッサ定義を追加)を設定しないのはなぜですか?その新しい構成を使用する新しいスキームを作成します。そうすれば、IDE内で(またはxcodebuildを使用して)手動スキームを使用せずにターゲットを構築するスキームを選択できます。 – Till

+0

@どちらのアプローチもそれぞれの強み(および弱点) – justin

関連する問題