Другой код / ​​конфиг в Release & Debug build (Obj-C) - PullRequest
5 голосов
/ 10 сентября 2009

Я пишу приложение Какао в Objective C, которое связывается с веб-сервисом, и я хочу, чтобы оно подключалось к песочнице в режиме отладки и к реальному веб-сервису в режиме выпуска. Все, что мне нужно, это изменить строку кода, где создается экземпляр объекта, который содержит конфигурацию (с другим сообщением инициализации и другими параметрами).

Так как мне поменять строку кода для режима Release или Debug?

Ответы [ 3 ]

8 голосов
/ 10 сентября 2009

Вы можете использовать специфичные для конфигурации определения, чтобы изменить исполняемый код. Прочитайте о том, как определить символ препроцессора в Xcode первым. Затем в вашем коде сделайте что-то вроде этого:

#if DEBUG_MODE
#define BACKEND_URL @"http://testing.myserver.com"
#else
#define BACKEND_URL @"http://live.myserver.com"
#end

NSURLRequest *myRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:BACKEND_URL]];
7 голосов
/ 10 сентября 2009

Вы можете проверить на #ifdef DEBUG, но я бы порекомендовал вам не делать этого.

Существует множество различий между сборками Debug и Release. Разные оптимизации компилятора, разные наборы символов и т. Д ...

В любом случае вы окажетесь в ситуации, когда вы захотите запустить сборку Release для своей песочницы для целей отладки ... и для вашей сборки отладки для производственного веб-сервиса, потому что у некоторых клиентов возникает проблема, которая воспроизводится только в Режим разблокировки.

Итак, для этого я бы предложил пользовательское значение по умолчанию. Смотри NSUserDefaults.

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

Таким образом, вы можете сделать что-то вроде:

/path/to/Myapp.app/Contents/Macos/Myapp -ServerMode Debug
2 голосов
/ 10 сентября 2009

Сначала определите символ препроцессора, который устанавливается только в вашей конфигурации сборки Debug, согласно вопросу 367368 - назовите его, скажем, DEBUG. Тогда вы можете сделать

#ifdef DEBUG
  // Code that only compiles in debug configuration
#else
  // Code that compiles in other configurations (i.e. release)
#endif
...