www down developer apple app xcode ios uiapplicationdelegate

xcode - down - sign in to app store connect



¿Hay alguna forma de pasar las opciones de la línea de comandos a mi aplicación iOS desde Xcode? (4)

Además de los escalares, los argumentos de la línea de comando pueden ser referencias a NSData, NSArray o NSDictionary. La documentación de Apple sobre "Listas de propiedades ASCII de estilo antiguo" explica cómo hacerlo. https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/PropertyLists/OldStylePlists/OldStylePLists.html#//apple_ref/doc/uid/20001012-BBCBDBJE

Por ejemplo, esta sintaxis debería decodificarse en un NSDictionary:

MyApplication -aLocation "{latitude = 37.40089; longitud = -122.109428;}"

Espero encontrar un método para pasar cierta información a mi aplicación cuando la inicie durante las pruebas, para poder realizar tareas de depuración especiales. Xcode tiene una sección "Argumentos pasados ​​en el lanzamiento", y asumí que aparecerían en la aplicación de mi UIApplicationDelegate: didFinishLaunchingWithOptions: pero el diccionario que se pasa siempre es nulo.

¿Voy por esto de la manera incorrecta?


Otra forma más fácil es usar los NSUserDefaults.

http://perspx.com/archives/parsing-command-line-arguments-nsuserdefaults/

Del artículo:

Los argumentos de la línea de comando que se pueden analizar y utilizar por el NSArgumentDomain deben tener el formato:

-name value

El argumento se almacena como predeterminado con clave de name y valor de value . En este punto, el acceso a los valores que se pasan en la línea de comando es el mismo proceso para acceder a cualquier otro valor predeterminado.

Por ejemplo ejecutando una aplicación como tal:

MyApplication -aString "Hello, World" -anInteger 10

permite que los argumentos de la línea de comando se recuperen como tales:

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; NSString *aString = [standardDefaults stringForKey:@"aString"]; NSInteger anInteger = [standardDefaults integerForKey:@"anInteger"];


Para aquellos que tropezaron con esta pregunta como yo :) Quería tener un logLevel de logLevel para mi logLevel estática. La forma en que lo hice es,

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); }


Puedes acceder a ellos usando el objeto NSProcessInfo como este,

NSArray * arguments = [[NSProcessInfo processInfo] arguments];