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