Đọc phiên bản từ Info.plist


Câu trả lời:


201

Bạn có thể đọc Info.plist của mình như một từ điển với

[[NSBundle mainBundle] infoDictionary]

Và bạn có thể dễ dàng lấy phiên bản CFBundleVersiontheo cách đó.

Cuối cùng, bạn có thể tải phiên bản với

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];

Hoàn hảo. Điều đó đơn giản hơn rất nhiều so với tất cả các dòng hàm CF * mà tôi đang sử dụng ... Tôi chắc chắn rằng phải có một cách nhanh chóng để lấy NSDictionary.
Hầm 31/10/10

16
Đối với số phiên bản, điều này không quan trọng, nhưng đối với các phím khác bạn có thể muốn sử dụng objectForInfoDictionaryKey:thay vào đó, kể từ khi nó trả về giá trị cục bộ nếu có:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
Zargony

20
Lưu ý trong Xcode4 nếu bạn nhìn vào bảng tóm tắt của mục tiêu, bạn sẽ thấy các trường Phiên bản & Bản dựng. CFBundleVersionđã được thay thế để trở thành Bản dựng và Phiên bản là CFBundleShortVersionString.
memmons

5
Thao tác này sẽ tìm nạp cả số phiên bản và phiên bản, đồng thời định dạng chúng cùng nhau: NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
Graham Perks

sử dụng CFBundleShortVersionString làm khóa cho phương thức objectForKey.
ayalcinkaya

11

cho người dùng Swift:

if let version = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") {
    print("version is : \(version)")
}

cho người dùng Swift3:

if let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") {
    print("version is : \(version)")
}

5

Tôi biết rằng một thời gian đã trôi qua kể từ nhiệm vụ và câu trả lời.

Vì iOS8, câu trả lời được chấp nhận có thể không hoạt động.

Đây là cách mới để làm điều đó ngay bây giờ:

NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey);

6
Bạn có liên kết tại sao lại như vậy không?
Ian Warburton

4

Bây giờ trong iOS 8 cả hai trường đều cần thiết. Trước đó nó hoạt động mà không có CFBundleShortVersionString. Nhưng bây giờ nó là một trường plist bắt buộc để gửi bất kỳ ứng dụng nào trong cửa hàng ứng dụng. Và kCFBundleVersionKeyđược so sánh để tải lên mọi bản dựng mới, phải theo thứ tự tăng dần. Đặc biệt cho các bản dựng TestFlight. Tôi làm theo cách này,

NSString * version = nil;
    version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
    if (!version) {
        version = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
    }

Cảm ơn .. version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleShortVersionString"]; đã làm việc cho tôi
swiftBoy

3

Swift 3:

let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.