Я хочу прочитать информацию о версии пакета из Info.plist в свой код, желательно в виде строки. Как я могу это сделать?
Ответы:
Вы можете читать свой Info.plist как словарь с
[[NSBundle mainBundle] infoDictionary]
И таким образом можно легко получить версию под CFBundleVersion
ключ.
Наконец, вы можете получить версию с
NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];
objectForInfoDictionaryKey:
вместо этого, поскольку он возвращает локализованное значение, если оно доступно:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
CFBundleVersion
был перепрофилирован на сборку и версию CFBundleShortVersionString
.
NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
для пользователей Swift:
if let version = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") {
print("version is : \(version)")
}
для пользователей Swift3:
if let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") {
print("version is : \(version)")
}
Я знаю, что прошло какое-то время с момента квеста и ответа.
С iOS8 принятый ответ может не сработать.
Это новый способ сделать это сейчас:
NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey);
Теперь в iOS 8 необходимы оба поля. Раньше он работал без CFBundleShortVersionString
. Но теперь это обязательное поле plist для отправки любого приложения в магазин приложений. И kCFBundleVersionKey
сравнивается для загрузки каждой новой сборки, которая должна выполняться в возрастающем порядке. Специально для сборок TestFlight. Я так делаю,
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