Apakah ada cara untuk mendapatkan versi build dari aplikasi saya secara terprogram? Saya harus dapat mendeteksi ketika pengguna telah memperbarui aplikasi melalui AppStore, untuk mengeksekusi beberapa kode untuk penyesuaian
Apakah ada cara untuk mendapatkan versi build dari aplikasi saya secara terprogram? Saya harus dapat mendeteksi ketika pengguna telah memperbarui aplikasi melalui AppStore, untuk mengeksekusi beberapa kode untuk penyesuaian
Jawaban:
Nilai yang Anda atur di bidang "Versi" ringkasan target Xcode ada di sini:
Cepat 3
let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
ObjC
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Cepat 2
let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as! String
dan "Bangun":
Cepat 3
let build = Bundle.main.infoDictionary?[kCFBundleVersionKey as String] as? String
ObjC
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey];
Cepat 2
let build = NSBundle.mainBundle().infoDictionary?[kCFBundleVersionKey as String] as! String
NSBundle.mainBundle()
sekarangBundle.main
Anda dapat mencoba menggunakan infoDictionary
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];
NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey];
Saat menggunakan MFMailComposeViewController
tombol "Hubungi Kami", saya menggunakan kode ini untuk mendapatkan HTML yang diformat pada email dari pengguna. Ini memberi saya semua info yang saya perlukan untuk mulai membantu menyelesaikan masalah apa pun:
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];
Ini adalah hasil ketika menerima pesan:
Versi cepat untuk keduanya secara terpisah:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Termasuk dalam repo ini, lihat:
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)") }
Pengaturan proyek
Saya telah menulis proyek sumber terbuka ini untuk tujuan ini. Proyek saya memposting pemberitahuan ketika peristiwa penting terjadi, seperti ketika pengguna membuka aplikasi untuk pertama kalinya, atau membuka aplikasi setelah peningkatan (lengkap dengan informasi dari versi mana pengguna ditingkatkan dari). Sumbernya mudah dan harus mudah dimengerti. Beri tahu saya jika Anda memiliki pertanyaan / permintaan.
Saya juga baru saja menulis posting blog tentang hal itu.
1) Untuk mendapatkan versi Aplikasi Anda harus menggunakan:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
2) Untuk mendapatkan versi Build Anda harus menggunakan:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];