Tôi muốn đọc thông tin phiên bản gói từ Info.plist vào mã của mình, tốt hơn là dưới dạng một chuỗi. Tôi có thể làm cái này như thế nào?
Tôi muốn đọc thông tin phiên bản gói từ Info.plist vào mã của mình, tốt hơn là dưới dạng một chuỗi. Tôi có thể làm cái này như thế nào?
Câu trả lời:
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 CFBundleVersion
theo 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"];
objectForInfoDictionaryKey:
thay vào đó, kể từ khi nó trả về giá trị cục bộ nếu có:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
CFBundleVersion
đã được thay thế để trở thành Bản dựng và Phiên bản là CFBundleShortVersionString
.
NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
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)")
}
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);
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];
}
Swift 3:
let appBuildNumber = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String