Is there a way to pass command line options to my iOS app from Xcode?
You can access them using NSProcessInfo
object like this,
NSArray * arguments = [[NSProcessInfo processInfo] arguments];
Another easier way is to use the NSUserDefaults.
http://perspx.com/archives/parsing-command-line-arguments-nsuserdefaults/
From the article:
Command line arguments that can be parsed and used by the
NSArgumentDomain
must take the format:-name value
The argument is stored as a default with key of
name
and value ofvalue
. At this point accessing values passed in on the command line is the same process for accessing any other defaults.For example running an application as such:
MyApplication -aString "Hello, World" -anInteger 10
allows the command line arguments to be retrieved as such:
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];NSString *aString = [standardDefaults stringForKey:@"aString"];NSInteger anInteger = [standardDefaults integerForKey:@"anInteger"];
For those who stumbled to this question like me :)I wanted to have a logLevel
for my static lib. The way I did is,
static NSUInteger logLevel = 1;/** This argument should be passed from XCode's build scheme configuration option, Arguments passed on launch */static const NSString *kIdcLogLevelArgument = @"-com.mycompany.IDCLogLevel";@implementation IDCLogger+ (instancetype)sharedInstance { static id sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance;}+(void)initialize{ logLevel = 1; NSArray *arguments = [[NSProcessInfo processInfo] arguments]; NSUInteger value = 0; if ([arguments containsObject:kIdcLogLevelArgument]) { NSUInteger index = [arguments indexOfObject:kIdcLogLevelArgument]; if (arguments.count > index) { NSString *valueStr = [arguments objectAtIndex:index + 1]; NSCharacterSet* notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; if ([valueStr rangeOfCharacterFromSet:notDigits].location == NSNotFound) { value = [valueStr integerValue]; logLevel = value; } } } NSLog(@"%@:logLevel = %lu", [self class], (unsigned long)logLevel);}+ (void)setLogLevel:(NSUInteger)l{ logLevel = l; NSLog(@"[%@]: Log level set to: %lu", [self class], (unsigned long)l);}