Xcode использует схемы для определения URL-адресов dev/промежуточного/производственного сервера

Я хочу использовать схемы Xcode для определения того, на каком сервере запускается приложение. У меня есть приложение, которое извлекает его информацию с сервера. Как и большинство людей, у меня есть сервер разработки, промежуточный сервер и производственный сервер.

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

FYI: Я использую Xcode 5.0.2 iOS7 SDK.

[EDIT] Все дали отличные предложения, но я чувствую, что @redent84 отвечает лучшим моим потребностям. Хотя мне было интересно, что никто не предлагал использовать разные схемы. [/EDIT]

Ответ 1

Я рекомендую вам создать различные XCode Targets для каждой среды. Я рекомендую вам изменить Идентификатор приложения для приложений, например, производственное приложение будет com.mycompany.App, а версия DEVEL будет com.mycompany.App-DEVEL. Таким образом вы можете отслеживать приложения отдельно в HockeyApp или TestFlight, и вы можете одновременно использовать оба приложения на одном устройстве.

Затем добавьте макросы препроцессора, которые определяют среду для каждой цели. DEVEL для разработки, например.

Если URL-адрес жестко закодирован, просто добавьте инструкцию #ifdef, чтобы выбрать URL-адрес:

#ifdef DEVEL
#define ENDPOINT_URL @"http://develserver:8080/EndPoint"
#elif defined(STAGING)
#define ENDPOINT_URL @"http://stagingserver:8080/EndPoint"
#else
#define ENDPOINT_URL @"http://app.mycompany.com/EndPoint"
#endif

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

Ответ 2

Используйте ключ в plist (для каждой схемы, например: URL_TO_USE), используйте define, чтобы создать "ярлык", чтобы получить значение.

  #define MyURL [[NSBundle mainBundle] objectForInfoDictionaryKey:@"URL_TO_USE"]

ИЗМЕНИТЬ

У вас должно быть несколько целей. Каждая цель должна указывать на другой файл .plist. Видеть: Как настроить независимые наборы параметров времени выполнения в XCode

Ответ 3

Я справляюсь с этим, задавая индивидуальные предпроцессоры для каждой схемы.