2009-07-10 3 views
5

Вопрос о лучших практиках.Особенности настройки конфигурации iPhone iPhone

Есть ли способ программно определить, скомпилировано ли приложение для конфигурации AdHoc, и если да, включите функцию в приложении?

Например, я имею в виду включение переключателя между бета-версией и базой prod в зависимости от того, является ли приложение конфигурацией AdHoc или Release.

Этот способ позволяет тестировщикам переключаться между серверными средами в одном приложении.

Может ли это сделать с #define, но я подумал, что спрошу, есть ли более элегантный способ сделать это, обнаружив текущую конфигурацию.

ответ

7

Вы можете установить пользовательское определение в своей конфигурации, используя настройку Preprocessor Macros в своем проекте или информацию о цели. Это работает так же, как если бы у вас была #define 'd переменная в вашем источнике.

В вашей конфигурации выпуска установите GCC_PREPROCESSOR_DEFINITIONS («Макросы препроцессора») на MYAPP_RELEASE=1. Вы можете использовать этот код для изменения функциональности во время компиляции:

#ifdef MYAPP_RELEASE 
    NSString *title = @"Release Version"; 
#else 
    NSString *title = @"Beta Version"; 
#endif 
+0

Это также полезно для включения/отключения функций при компиляции для цели приложения Lite с использованием того же проекта, что и полная версия. –

0

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

CFBundleRef mainBundle; 
CFDictionaryRef bundleInfoDict; 
mainBundle = CFBundleGetMainBundle(); 
bundleInfoDict = CFBundleGetInfoDictionary(mainBundle); 

if (bundleInfoDict != NULL) { 
    // check for your custom config key here 
} 
+0

Это тоже работает, но обычно у вас нет другой настройки файла Info.plist для конфигураций AdHoc и Release. Я не думаю, что здесь есть другие настройки, которые вам нужно будет изменить. Вы также можете найти интерфейс Cocoa для пакета/plist более простым в использовании: 'NSString * myKey = [[[NSBundle mainBundle] infoDictionary] objectForKey: @" myInfoPlistKeyName "];' – pix0r

Смежные вопросы