descargar - ios significado
la aplicación iOS, obtiene programáticamente la versión de compilación (7)
¿Hay alguna forma de obtener programáticamente la versión de compilación de mi aplicación? Necesito poder detectar cuándo el usuario ha actualizado la aplicación a través de la AppStore, para ejecutar algún código de ajustes
1) Para obtener la versión de la aplicación, debes usar un:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
2) Para obtener la versión Build tienes que usar un:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
Al usar MFMailComposeViewController
para un botón "Contáctenos", utilizo este código para obtener un HTML formateado en el correo electrónico del usuario. Me da toda la información que necesito para comenzar a ayudar a resolver cualquier problema:
struct utsname systemInfo;
uname(&systemInfo);
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSDate *date = [NSDate date];
[formatter setDateFormat:@"MM/dd/yyyy ''at'' hh:mm a"];
NSString *dateString = [formatter stringFromDate:date];
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width - 65.0;
NSString *comments = NSLocalizedString(@"Please write your comments bellow:", nil);
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSString *appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
NSString *deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
NSString *iOSVersion = [[UIDevice currentDevice] systemVersion];
NSString *emailBody = [NSString stringWithFormat:@"<!DOCTYPE html><html><style> .div {background-color: lightgrey; width: %fpx; padding: 10px; border: 5px solid navy; margin: 2px;}</style><body><div class=''div''><p><b>App:</b> %@</p><b><p>Device:</b> %@</p><b><p>iOS Version:</b> %@</p><b><p><p>App Version and Build:</b> %@ (%@)</p><b><p>Date:</b> %@</p> </p></div><font color=''red''><b>%@</b></font><br><br></body></html>",screenWidth,appName,deviceModel,iOSVersion,version,build,dateString,comments];
[self setMessageBody:emailBody isHTML:YES];
Este es el resultado al recibir el mensaje:
El valor que establece en el campo "Versión" del resumen de objetivos de Xcode se encuentra aquí:
Swift 3
let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
ObjC
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Swift 2
let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as! String
y el "Build":
Swift 3
let build = Bundle.main.infoDictionary?[kCFBundleVersionKey as String] as? String
ObjC
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey];
Swift 2
let build = NSBundle.mainBundle().infoDictionary?[kCFBundleVersionKey as String] as! String
He escrito este proyecto de código abierto precisamente para este propósito. Mi proyecto publica notificaciones cuando se producen eventos importantes, como cuando un usuario abre la aplicación por primera vez o abre la aplicación después de la actualización (con información sobre la versión desde la que el usuario actualizó). La fuente es simple y debe ser fácil de entender. Avíseme si tiene alguna pregunta / solicitud.
Recientemente también escribí una publicación en un blog sobre esto.
Puedes intentar usar el infoDictionary
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];
NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey];
Swift versión para ambos por separado:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Está incluido en este repositorio, compruébalo:
Swift 3 obtiene la versión del paquete y las cadenas de construcción
Código
extension UIApplication {
class var Build: String? {
get {
return Bundle.main.infoDictionary?[kCFBundleVersionKey as String] as? String
}
}
class var Version: String? {
get {
return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
}
}
}
Uso
print("Version /(UIApplication.Version!)")
print("Build /(UIApplication.Build!)")
Resultado
Configuración del proyecto
Consola