ver recuperar que para pantalla notificaciones las historial hacer funciona cómo como centro borradas bloqueo bloqueada aparecen iphone objective-c xcode build-process

iphone - recuperar - ¿Cómo obtener el nombre de destino?



whatsapp notificaciones iphone (5)

Sabemos que Xcode mantiene la variable de entorno de ${TARGET_NAME} pero, ¿cómo acceder a esta variable en el código objetivo-C?

¿Qué he probado?
He añadido "TARGET_NAME=${TARGET_NAME}" esto en la sección de macros del preprocesador de Configuración de compilación. Pero ahora no estoy seguro de cómo usar esta variable "TARGET_NAME" como una cadena en el código objetivo-C.

En mi caso, el nombre del producto y el nombre del objetivo son diferentes, así que no hay posibilidad de usarlo.

Traté de acceder usando

#ifdef TARGET_NAME NSLog(@"TargetIdentifier %@",TARGET_NAME); #endif

Este código está dando un error como "Uso del identificador no declarado ''myapptargetname''"


** Para Swift 4 **

No estoy seguro de lo bueno que es tener un archivo de Constantes en Swift, pero podrías crear algo así:

enum TargetType:String, CaseIterable{ case target1 = "My Target 1" case target 2 = "My Target 2" case unknown } var currentTarget:TargetType = { return TargetType(rawValue: (Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? "")) ?? .unknown }()

Así que puedes llamarlo en cualquier momento así.

if currentTarget != .unknown{ print(currentTarget.rawValue) }

Si desea agregar la variable dentro de una clase de Constantes, entonces:

class Constants: NSObject { static var currentTarget:TargetType = { return TargetType(rawValue: (Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? "")) ?? .unknown }() }


En Xcode 7.3.1

if let targetName = NSBundle.mainBundle().infoDictionary?["CFBundleName"] as? String{ print(targetName) }


Puede agregar la clave "Nombre de destino" a su archivo Info.plist:

Luego puedes acceder a él (código swift):

var plistFileName = NSBundle.mainBundle().infoDictionary?["TargetName"] as String


Swift 4, Xcode 9+

Nombre del paquete:

Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? ""

Nombre de visualización del paquete:

Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as? String ?? ""

Swift 3, Xcode 8+

let targetName = Bundle.main.infoDictionary?["CFBundleName"] as? String ?? ""


NSLog(@"Target name: %@",[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]);

Espero poder ayudarte!

Editado: "CFBundleName" agradece a Max y Daniel Bo por su recomendación