2015-01-20 3 views
0

В настоящее время работает над iPhone-приложением, которое подключается к нескольким различным веб-сервисам. Эти веб-сервисы имеют несколько различных адресов в зависимости от окружающей среды, мы подключения:Xcode build for environment

Я хотел бы знать, что наилучшим соглашением является определение этих URL-адресов и переключение между ними в зависимости от того, в какой среде мы хотим строить. Я могу определить это в моих настройках сборки или настроить различные сборки с помощью определения для определения среды?

Примечание. Не уверен, имеет ли значение, но на данный момент мы используем чисто Objective-c, хотя мы можем интегрировать Swift когда-то намного позже в течение жизни проекта.

ответ

1

Эта работа для меня:

#ifdef TARGET_PROD 
    #define BASE_URL @" http://www.example.com/api/" 
#endif 
#ifdef TARGET_VAL 
    #define BASE_URL @"http://staging.example.com/api/" 
#endif 

#ifdef TARGET_TEST 
    #define BASE_URL @"http://staging.example.com/api/testing/" 
#endif 

Надень это, например, в Commons.h или общий файл проекта.

И для любой цели перейдите в раздел «Настройка параметров» и установите Макросы процессора, добавив TARGET_PROD в «Debug» и «Release», TARGET_TEST для целевого теста и TARGET_VAL для целевой постановки. Когда вы делаете запрос просто добавить в ваш base_url в SERVICENAME так:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@,%@", BASE_URL,yourService]]]; 
0

Использование NSUserDefaults.

Например, установите производственное значение как отказ по умолчанию, передав его в словаре на -registerDefaults:. Это ставит значение в NSRegistrationDomain. Затем для вашей проверки и тестирования вы можете:

  • Задайте значение в NSArgumentDomain с использованием кода. Это приведет к переопределению значения в NSRegistrationDomain.
  • Передайте значение в качестве аргумента запуска. Когда вы это сделаете, значение вставляется в NSArgumentDomain, снова переопределяя любое значение в NSRegistrationDomain.

NSUserDefaults ищет домен в определенном порядке, чтобы найти значение. Такое поведение хорошо объясняется в this post by oleb.

Этот подход является гибким и не имеет некоторых недостатков использования условной компиляции для решения этой проблемы.