Je veux lire les informations de version du bundle d'Info.plist dans mon code, de préférence sous forme de chaîne. Comment puis-je faire ceci?
Je veux lire les informations de version du bundle d'Info.plist dans mon code, de préférence sous forme de chaîne. Comment puis-je faire ceci?
Réponses:
Vous pouvez lire votre Info.plist sous forme de dictionnaire avec
[[NSBundle mainBundle] infoDictionary]
Et vous pouvez facilement obtenir la version à la CFBundleVersion
clé de cette façon.
Enfin, vous pouvez obtenir la version avec
NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* version = [infoDict objectForKey:@"CFBundleVersion"];
objectForInfoDictionaryKey:
place, car il renvoie la valeur localisée si disponible:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]
CFBundleVersion
a été réutilisé pour être Build et Version is CFBundleShortVersionString
.
NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
self.versionLabel.text = [NSString stringWithFormat:@"%@.%@", version, build];
pour les utilisateurs de Swift:
if let version = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") {
print("version is : \(version)")
}
pour les utilisateurs de Swift3:
if let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") {
print("version is : \(version)")
}
Je sais qu'un certain temps s'est écoulé depuis la quête et la réponse.
Depuis iOS8, la réponse acceptée peut ne pas fonctionner.
Voici la nouvelle façon de le faire maintenant:
NSString *version = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey);
Maintenant, dans iOS 8, les deux champs sont nécessaires. Auparavant, cela fonctionnait sans le CFBundleShortVersionString
. Mais maintenant, c'est un champ plist obligatoire pour soumettre une application dans l'App Store. Et kCFBundleVersionKey
est comparé pour le téléchargement de chaque nouvelle version, qui doit être dans un ordre incrémentiel. Spécialement pour les builds TestFlight. Je le fais de cette façon,
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