Czy istnieje sposób na programowe pobranie wersji kompilacji mojej aplikacji? Muszę być w stanie wykryć, kiedy użytkownik zaktualizował aplikację za pośrednictwem AppStore, aby wykonać kod w celu dostosowania
ios
objective-c
jcardenete
źródło
źródło
Odpowiedzi:
Wartość ustawiona w polu „Wersja” podsumowania elementu docelowego Xcode znajduje się tutaj:
Szybki 3
let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
ObjC
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Szybki 2
let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as! String
i „Kompilacja”:
Szybki 3
ObjC
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey];
Szybki 2
let build = NSBundle.mainBundle().infoDictionary?[kCFBundleVersionKey as String] as! String
źródło
NSBundle.mainBundle()
jest terazBundle.main
Możesz spróbować użyć infoDictionary
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary]; NSString *version = infoDictionary[@"CFBundleShortVersionString"]; NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey]; NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey];
źródło
Używając
MFMailComposeViewController
przycisku „Skontaktuj się z nami”, używam tego kodu, aby otrzymać sformatowany kod HTML w wiadomości e-mail od użytkownika. Zawiera wszystkie informacje, których potrzebuję, aby zacząć pomagać w rozwiązaniu dowolnego problemu: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];
Oto wynik podczas otrzymywania wiadomości:
źródło
Szybka wersja dla obu osobno:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Jest uwzględniony w tym repozytorium, sprawdź to:
https://github.com/goktugyil/EZSwiftExtensions
źródło
Detale
Rozwiązanie
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 } }
Stosowanie
if let value = Info.Value.version.string { print("Version: \(value)") } if let value = Info.Value.build.string { print("Build: \(value)") }
Wynik
Ustawienia projektu
źródło
Właśnie w tym celu napisałem ten projekt open source . Mój projekt publikuje powiadomienia, gdy wystąpią istotne zdarzenia, na przykład gdy użytkownik otworzy aplikację po raz pierwszy lub otworzy aplikację po aktualizacji (wraz z informacją, z której wersji użytkownik dokonał aktualizacji). Źródło jest proste i powinno być łatwe do zrozumienia. Daj mi znać, jeśli masz jakieś pytania / prośby.
Niedawno napisałem też o tym wpis na blogu .
źródło
1) Aby uzyskać wersję aplikacji, musisz użyć:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
2) Aby uzyskać wersję Build, musisz użyć:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
źródło