Gibt es eine Möglichkeit, die Build-Version meiner App programmgesteuert abzurufen? Ich muss erkennen können, wann der Benutzer die App über den AppStore aktualisiert hat, um Code für Anpassungen ausführen zu können
Gibt es eine Möglichkeit, die Build-Version meiner App programmgesteuert abzurufen? Ich muss erkennen können, wann der Benutzer die App über den AppStore aktualisiert hat, um Code für Anpassungen ausführen zu können
Antworten:
Der Wert, den Sie im Feld "Version" der Xcode-Zielzusammenfassung festgelegt haben, befindet sich hier:
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
und der "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()
ist jetztBundle.main
Sie können versuchen, das infoDictionary zu verwenden
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];
NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey];
Bei Verwendung MFMailComposeViewController
einer Schaltfläche "Kontakt" verwende ich diesen Code, um vom Benutzer einen formatierten HTML-Code für die E-Mail zu erhalten. Es gibt mir alle Informationen, die ich brauche, um bei der Lösung eines Problems zu helfen:
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];
Dies ist das Ergebnis beim Abrufen der Nachricht:
Schnelle Version für beide separat:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Es ist in diesem Repo enthalten, probieren Sie es aus:
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)") }
Projekt Einstellungen
Ich habe dieses Open Source-Projekt genau zu diesem Zweck geschrieben. In meinem Projekt werden Benachrichtigungen veröffentlicht, wenn wichtige Ereignisse auftreten, z. B. wenn ein Benutzer die App zum ersten Mal öffnet oder wenn er die App nach dem Upgrade öffnet (einschließlich Informationen darüber, von welcher Version der Benutzer ein Upgrade durchgeführt hat). Die Quelle ist unkompliziert und sollte leicht zu verstehen sein. Lassen Sie mich wissen, wenn Sie Fragen / Wünsche haben.
Ich habe auch kürzlich einen Blog-Beitrag darüber geschrieben.
1) Um die App-Version zu erhalten, müssen Sie Folgendes verwenden:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
2) Um die Build-Version zu erhalten, müssen Sie Folgendes verwenden:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];