Esiste un modo per ottenere a livello di codice la versione build della mia app? Devo essere in grado di rilevare quando l'utente ha aggiornato l'app tramite AppStore, al fine di eseguire un codice per le regolazioni
Esiste un modo per ottenere a livello di codice la versione build della mia app? Devo essere in grado di rilevare quando l'utente ha aggiornato l'app tramite AppStore, al fine di eseguire un codice per le regolazioni
Risposte:
Il valore impostato nel campo "Versione" del riepilogo del target Xcode è qui:
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
e la "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
NSBundle.mainBundle()è oraBundle.main
Puoi provare a utilizzare infoDictionary
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];
NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey];
Quando utilizzo MFMailComposeViewControllerper un pulsante "Contattaci", utilizzo questo codice per ottenere un HTML formattato sull'e-mail dell'utente. Mi dà tutte le informazioni di cui ho bisogno per iniziare a risolvere qualsiasi 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 below:", 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];
Questo è il risultato quando si ottiene il messaggio:
Versione rapida per entrambi separatamente:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
È incluso in questo repository, dai un'occhiata:
class Info {
static let dictionary = Bundle.main.infoDictionary ?? [:]
enum Value {
case build, version
}
}
extension Info.Value {
var key: String {
switch self {
case .build: return kCFBundleVersionKey as String
case .version: return kCFBundleInfoDictionaryVersionKey as String
}
}
var string: String? { return Info.dictionary[key] as? String }
}
if let value = Info.Value.version.string { print("Version: \(value)") }
if let value = Info.Value.build.string { print("Build: \(value)") }
Impostazioni del progetto
Ho scritto questo progetto open source proprio per questo scopo. Il mio progetto pubblica notifiche quando si verificano eventi significativi, ad esempio quando un utente apre l'app per la prima volta o apre l'app dopo l'aggiornamento (completo di informazioni sulla versione da cui l'utente ha effettuato l'aggiornamento). La fonte è semplice e dovrebbe essere facile da capire. Fammi sapere se hai domande / richieste.
1) Per ottenere la versione dell'app devi usare un:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
2) Per ottenere la versione Build devi usare un:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];