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
Я справляюсь с этим, задавая индивидуальные предпроцессоры для каждой схемы.