Có cách nào để lập trình phiên bản xây dựng ứng dụng của tôi không? Tôi cần có khả năng phát hiện khi người dùng đã cập nhật ứng dụng thông qua AppStore, để thực thi một số mã để điều chỉnh
Có cách nào để lập trình phiên bản xây dựng ứng dụng của tôi không? Tôi cần có khả năng phát hiện khi người dùng đã cập nhật ứng dụng thông qua AppStore, để thực thi một số mã để điều chỉnh
Câu trả lời:
Giá trị bạn đặt trong trường "Phiên bản" của tóm tắt mục tiêu Xcode nằm ở đây:
Swift 3
let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
ObjC
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Swift 2
let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as! String
và "Xây dựng":
Swift 3
let build = Bundle.main.infoDictionary?[kCFBundleVersionKey as String] as? String
ObjC
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey];
Swift 2
let build = NSBundle.mainBundle().infoDictionary?[kCFBundleVersionKey as String] as! String
NSBundle.mainBundle()
bây giờBundle.main
Bạn có thể thử sử dụng thông tin từ điển
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];
NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey];
Khi sử dụng MFMailComposeViewController
nút "Liên hệ với chúng tôi", tôi sử dụng mã này để nhận HTML được định dạng trên e-mail từ người dùng. Nó cung cấp cho tôi tất cả thông tin mà tôi cần để bắt đầu giúp giải quyết mọi vấn đề:
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];
Đây là kết quả khi nhận được tin nhắn:
Phiên bản Swift cho cả hai riêng biệt:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Nó bao gồm trong repo này, kiểm tra xem nó:
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)") }
Thiết lập dự án
Tôi đã viết dự án nguồn mở này cho chính xác mục đích này. Dự án của tôi đăng thông báo khi có sự kiện quan trọng xảy ra, chẳng hạn như khi người dùng mở ứng dụng lần đầu tiên hoặc mở ứng dụng sau khi nâng cấp (hoàn tất thông tin về phiên bản mà người dùng đã nâng cấp từ đó). Nguồn này rất đơn giản và dễ hiểu. Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi / yêu cầu.
Gần đây tôi cũng đã viết một bài blog về nó.
1) Để nhận phiên bản Ứng dụng, bạn phải sử dụng:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
2) Để có phiên bản Build, bạn phải sử dụng:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];