2013-10-11 2 views
1

Я хотел бы иметь возможность включать или отключать определенную функциональность в приложении iOS в зависимости от того, является ли она версией выпуска или нет. Можно ли программно определить, является ли текущая сборка версией выпуска или нет? Я знаю, что подобная функциональность может быть достигнута с помощью макросов, но, как я понимаю, они не будут работать, если этот код находится внутри статической библиотеки.Можно ли определить целевую программу iOS программно

+5

'#ifdef DEBUG' должен сделать трюк. –

+0

Макрос DEBUG определяется в Target> Build settings> Макросы препроцессора. Будут две записи: Debug и Release. По умолчанию используется макрос DEBUG = 1, определенный в записи Debug. – Jano

ответ

0

Как Н2СО3 сказал:

#ifdef DEBUG 
    NSLog(@"Debug mode"); 
#endif 
+7

Зачем вам копировать комментарий и делать его ответом? также, разве этот код не имеет закрывающей скобки? –

+0

Потому что «комментарий» не был ответом, и он был неполным? – ader

1

создать флаг в вашей схеме и использовать его как

#ifdef BETA 

так, что вы хотите иметь метод струнный возвращающегося две разные строки для двух различных состояний

- (NSString *)someString { 

    #ifdef BETA 
    return @"Beta String"; 
    #else 
    return @"Release String"; 
    #endif 

} 

Вы можете использовать встроенный

#ifdef DEBUG 

это будет дифференцироваться между выпуском и отладить

Я Wouldnt рекомендую иметь две разные цели.

+0

Будет ли этот подход работать, если я хочу поставить статическую библиотеку другому третьему лицу? Я хочу иметь возможность инкапсулировать код, который отключает функциональность, если сборка является сборкой релиза, без того, чтобы пользователь библиотеки должен был настроить это или вообще знать об этом. – Ellis

+0

, это должно быть сделано, если вы используете флаг DEBUG с обязательным условием, иначе вы должны были бы сделать это условием – ninjr

0

Просто задайте целевое имя в своей схеме -> Переменные окружения -> добавьте имя и значение. например: Имя_целевого_объекта = "mytesttarget"

Obj-C

NSDictionary * Envir = [[NSProcessInfo processInfo] среда];
NSString * targetName = envir [@ "targetName"];

Swift

пусть Envir = NSProcessInfo.processInfo(). Среда
пусть Имя_целевого_объект = Envir [ "Имя_целевого_объект"]

Теперь вы можете проверить целевое состояние

если Имя_целевого_объект = = "mytesttarget" {
...
} else {
...
}

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