My project have multi-targets. Each target has its own Class
file for setting stuff. I want to store that Class
name in a target setting (Info.plist
or Target's Building setting). So that I can define which class I need to use in each target based on this setting.
According to this question, I put "a target-specific User Defined
variable" in each Target's Building Setting.
But don't know how to get it back in my code?
As the Info.plist file is preprocessed too, you can use this approach:
Define a User defined setting in your build settings, for Example CLASS_NAME.
And a key to your Info.plist-file. Name the key CLASS_NAME and set the value to ${CLASS_NAME}
.
You can then access this setting by:
NSString* className = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"CLASS_NAME"];
You can not directly use a variable defined in the build settings. These variables are meant to be used by build tools.
Instead define a preprocessor macro in the Preprocessor Macros Variable like 'MYVAR=5'. You can access these macros in your code like:
#if MYVAR==5
//Do something
#endif
Please note, that the evaluation of these expressions happens at build-time not at runtime.
It is very typical use to just define a Macro without caring for the value. For example define 'DEBUG=1' in the debug build settings and 'RELEASE=1' in the release build settings.
You can then test using #ifdef or #ifndef
#ifdef DEBUG
// Log
#endif