Uygulamamın derleme sürümünü programlı olarak almanın bir yolu var mı? Ayarlamalar için bazı kodlar yürütmek için kullanıcının AppStore aracılığıyla uygulamayı ne zaman güncellediğini tespit edebilmem gerekiyor
Uygulamamın derleme sürümünü programlı olarak almanın bir yolu var mı? Ayarlamalar için bazı kodlar yürütmek için kullanıcının AppStore aracılığıyla uygulamayı ne zaman güncellediğini tespit edebilmem gerekiyor
Yanıtlar:
Xcode hedef özetinin "Sürüm" alanında ayarladığınız değer buradadır:
Hızlı 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
ve "Yapı":
Hızlı 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()için şimdiBundle.main
İnfoDictionary kullanmayı deneyebilirsiniz
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];
NSString *version = infoDictionary[@"CFBundleShortVersionString"];
NSString *build = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey];
Bir MFMailComposeViewController"Bize Ulaşın" düğmesini kullandığımda, kullanıcıdan e-postada biçimlendirilmiş bir HTML almak için bu kodu kullanıyorum. Herhangi bir sorunu çözmeye yardımcı olmaya başlamam için gereken tüm bilgileri bana veriyor:
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];
Bu mesajı alırken ortaya çıkan sonuç:
Her ikisi için ayrı ayrı Swift versiyonu:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Bu depoya dahildir, kontrol edin:
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)") }
Proje ayarları
Bu açık kaynak projeyi yazdım tam da bu amaçla . Projem, bir kullanıcı uygulamayı ilk kez açtığında veya yükseltmeden sonra uygulamayı açtığında (kullanıcının hangi sürümden yükseltme yaptığına ilişkin bilgilerle birlikte eksiksiz) önemli olaylar meydana geldiğinde bildirim gönderir. Kaynak basittir ve anlaşılması kolay olmalıdır. Herhangi bir sorunuz / isteğiniz varsa bana bildirin.
Yakın zamanda bununla ilgili bir blog yazısı da yazdım .
1) Uygulama sürümünü almak için şunları kullanmanız gerekir:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
2) Derleme sürümünü almak için bir kullanmalısınız:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];