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

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]; 

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


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


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


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.


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"];
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.