Aplikasi iOS, secara terprogram mendapatkan versi build

Jawaban:

283

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
e1985
sumber
5
Menggunakan string literal dan bukan konstanta bukanlah bukti masa depan; lihat jawaban Anupdas untuk kunci konstan.
Aaron Brager
9
Anda tepat untuk @ "CFBundleVersion" - Saya telah mengedit jawaban saya. Namun untuk @ "CFBundleShortVersionString" tidak ada AFAIK konstan.
e1985
Bagi Swift, NSBundle.mainBundle()sekarangBundle.main
Todd
85

Anda dapat mencoba menggunakan infoDictionary

NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];

NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]; 
Anupdas
sumber
13
kCFBundleVersionKey adalah versi 'build' not ''
powerj1984
11

Saat menggunakan MFMailComposeViewControllertombol "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:

masukkan deskripsi gambar di sini

neowinston
sumber
3

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:

https://github.com/goktugyil/EZSwiftExtensions

Esqarrouth
sumber
Anda harus menjelaskan bahwa Anda memiliki repo itu. Anda tidak ingin menjadi spammer.
JAL
2

Detail

  • Xcode Versi 10.3 (10G8), Swift 5

Larutan

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 }
}

Pemakaian

if let value = Info.Value.version.string { print("Version: \(value)") }
if let value = Info.Value.build.string { print("Build: \(value)") }

Hasil

Pengaturan proyek

masukkan deskripsi gambar di sini

Bodnarchuk dengan mudah
sumber
1

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.

Stunner
sumber
1

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"];
Vaibhav Shiledar
sumber