2012-05-12 1 views
4

У меня есть проект, который может различаться в зависимости от разных сред, поэтому проект точно такой же, но только некоторые изменения URL. Обычно у меня есть рабочая среда, где я обращаюсь к своим фиктивным веб-сервисам, а затем, когда вам нужно начинать использовать веб-службы клиента, я просто хочу быстро переключить эти URL-адреса. Для этого моя первоначальная идея заключалась в том, чтобы иметь разные файлы plist в соответствии с конечными точками веб-сервисов (клиент может иметь несколько URL-адресов: предварительная подготовка, тестирование, производство). Итак:Схемы или цели в iOS

  1. Это лучший вариант, который у меня есть? У вас разные plist для каждой конечной точки веб-сервисов? (опять же проект точно такой же, только разные конечные точки)

  2. Имеет ли смысл создавать новую цель для каждой другой среды ? Или я могу сделать это в схемах той же цели ?

ответ

2

В соответствии с тем, сколько параметров вам нужно изменить, вы можете использовать его с помощью макроса, например.

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

Затем вы можете легко прикрепить флаг компилятора для схемы отладки, в котором вы объявляете макрос без забот о необходимости различных целей.

Если вы предпочитаете хранить файл .plist, вы можете легко использовать тот же подход, но вместо этого изменить имя файла, чтобы hardcidng конечной точки. Но вы будете иметь оба листа, скопированных в пакете, если не использовать две цели (я думаю, что возможно даже условно включить файлы в фазу копирования, но не знаю, как это сделать)

+0

Забыл о '#define _DEBUG_MODE'dance, спасибо. Да, я думаю, что я собираюсь использовать 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 
} 

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

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

+0

Почему бы не установить параметр 'MON_APP_USE_DUMMY_SERVICE' (или любой другой, дополнительный препроцессор) в новой конфигурации сборки? Затем создайте новую схему, использующую эту новую конфигурацию. Таким образом, вы можете выбрать схему внутри IDE (или с помощью xcodebuild) для построения цели без дальнейшего ручного вмешательства. – Till

+0

@ У обоих подходов есть свои сильные стороны (и недостатки) – justin