2013-07-19 11 views
5

私は、RESTfulなリクエストを行うiosアプリケーションを持っています。 にWebサービスのRESTful要求を送信しているかどうかによって、サービス呼び出しのエンドポイントを自動的に変更したいのですが、開発サーバー b。ステージングサーバー c。たとえば、本番サーバXcode Objective Cマクロとビルドの設定、開発者とステージング、プロダクションの切り替え - 完全な例?

a. dev url: http://www.dev.camerakingphotos/getAllPhotos 
b. test url: http://www.test.camerakingphotos/getAllPhotos 
c. production url: http://www.camerkingphotos/getAllPhotos 
  1. にはどうすれば楽に開発サーバ対私の本番サーバーへのURLを切り替えるためにはXCodeを教えていますか?それはビルド設定、プリプロセッサマクロ、スキーム、または新しいターゲット(私は新しいターゲットが私が望むものではないと思う)です。理想的には、XCodeは私のアプリの開発版をテストしていることを知っているので、すべてのURLが開発サーバーを指し示すようにします。そして私は今、プロダクションを指すようにアプリをテストする準備ができていることをXCodeに伝えたいので、プロダクションサーバに対応するURLを使用してください。

  2. 私がプリプロセッサマクロを定義すると、どこでそうするのですか?私はすべてのサービスURLが格納されている単一の場所であるAPP_CONSTANTS.hファイルを持っています。私はAPP_CONSTANTS.hファイルまたはPrefix.pchファイルにプリプロセッサマクロを定義しますか?

  3. 誰かが私の詳細な例を綴っていますか?

私はstackoverflowの周りを見てきたが、私はあまり予備知識を負うものではありません明示的に私のために、一緒にすべてのピースを入れて誰かをいただければ幸いです。私はXcodeのビルドガイド(そのほとんど)を熟読しましたが、私は木だけを見て、森は見ませんでした。

ありがとうございます!

+0

「開発環境」などを明確に定義する必要があります。どういう意味ですか? – borrrden

+0

質問が明確になりました。 – user798719

答えて

7

コンパイラにこれを伝える必要がある場合は、Xcodeに(ほとんど)何も関係がありません。コンパイラは、あなたがそれを伝えるものだけを知っています。私もこの設定をしています。私はそれらを切り替えるためにプリプロセッサマクロを使用します。デフォルトでXcodeは、アプリケーションの開発ビルド時に設定されるDEBUGプリプロセッサフ​​ラグを定義します。リリーススキームでは定義されていません。

.hファイル

extern NSString *const MYServerURL; 

.mファイル

#ifdef DEBUG 
NSString *const MYServerURL = @"http://www.dev.camerakingphotos/getAllPhotos"; 
#else 
NSString *const MYServerURL = @"http://www.camerakingphotos/getAllPhotos"; 
#endif 

注私はない#defineこれらをしました:これは、2つのサーバー間で切り替えるための最も簡単な方法です。これは、.mファイルを変更したときに再コンパイルする必要があるだけでなく、ヘッダーを含むすべてのファイルを再コンパイルする必要があるという前提に反するという特典があります。これらの変数は、変数が定義されているヘッダーを含むファイルに対してグローバルに使用できます。より細かいコントロールが必要な場合は、.pchファイルに独自のプリプロセッサアイテムを定義し、必要に応じて(コメントを使用して)オンとオフを切り替えることができます。その後、上記のパターンを使用してDEBUGの代わりにアイテムを使用します(ただし、リリース前に適切な値に切り替えることを忘れないでください)。

+0

ありがとう!これはうまくいった!それをたくさん感謝します。 – user798719