Comment mon application iphone détecter son propre numéro de version?

voix
237

J'écris une application iPhone. Il a déjà été publié, mais je voudrais ajouter une fonction où son numéro de version est affiché.

Je préfère ne pas avoir à le faire manuellement avec chaque version que je libère ...

Est-il possible en Objective-C pour savoir ce que la version est de mon application?

Créé 19/01/2009 à 19:32
source utilisateur
Dans d'autres langues...                            


15 réponses

voix
216

Comme je le décris ici , j'utiliser un script pour réécrire un fichier d' en- tête avec mon numéro actuel de révision de Subversion. Ce numéro de révision est stocké dans la constante kRevisionNumber. Je peux alors accéder à la version et le numéro de révision en utilisant quelque chose de semblable à ce qui suit:

[NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], kRevisionNumber]

qui va créer une chaîne de format « Version 1.0 (51) ».

Créé 19/01/2009 à 20:00
source utilisateur

voix
143

S'appuyant sur la réponse de Brad Larson, si vous avez majeur et d'information de version mineure stockée dans l'info plist (comme je l'ai fait sur un projet particulier), cela a fonctionné bien pour moi:

- (NSString *)appNameAndVersionNumberDisplayString {
    NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
    NSString *appDisplayName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
    NSString *majorVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
    NSString *minorVersion = [infoDictionary objectForKey:@"CFBundleVersion"];

    return [NSString stringWithFormat:@"%@, Version %@ (%@)", 
                appDisplayName, majorVersion, minorVersion];
}

Maintenant montée en régime une version mineure peut manuellement être une douleur, et ainsi à l'aide d'un numéro de révision du référentiel source astuce est idéal. Si vous ne l'avez pas lié que (comme je l'avais pas), l'extrait ci-dessus peut être utile. Il tire également le nom d'affichage de l'application.

Créé 15/08/2012 à 05:13
source utilisateur

voix
46

Version rapide pour les deux séparément:

Swift 3

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String

Swift 2

let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

Son inclus dans cette mise en pension, check it out:

https://github.com/goktugyil/EZSwiftExtensions

Créé 19/03/2015 à 12:42
source utilisateur

voix
41

Voilà ce que je l'ai fait dans ma demande

NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];

Espérons que cette réponse simple va aider quelqu'un ...

Créé 02/11/2013 à 21:01
source utilisateur

voix
31

Vous pouvez spécifier la CFBundleShortVersionStringchaîne dans votre plist.info et de lire que l' utilisation de programmation l' API fournie .

Créé 19/01/2009 à 19:46
source utilisateur

voix
29

Il y a deux choses - construire la version et la version de l'application.

  1. Pour obtenir la version App:

    NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    
  2. Pour obtenir la version construire:

    NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    
Créé 23/01/2015 à 09:01
source utilisateur

voix
17
// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Créé 23/07/2014 à 19:15
source utilisateur

voix
16

Une façon succincte pour obtenir une chaîne de version en XYZ format est:

[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]

Ou, pour seulement XY:

[NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]

retourne ces deux extraits des chaînes que vous attribuons à votre propriété de texte de l'objet de l'étiquette, par exemple

myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
Créé 07/09/2013 à 03:58
source utilisateur

voix
7

Vous pouvez essayer d'utiliser le dictionnaire comme: -

NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];

NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
Créé 15/05/2014 à 10:58
source utilisateur

voix
4

Lire le fichier Info.plist de votre application et obtenir la valeur pour CFBundleShortVersionString clé. La lecture info.plist vous donnera un objet NSDictionary

Créé 22/01/2009 à 06:05
source utilisateur

voix
1

Si vous avez besoin d' une combinaison à la fois la version et construire num , voici une courte distance en utilisant Swift 3 :

let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"]!
let buildNum = Bundle.main.infoDictionary!["CFBundleVersion"]!
let versionInfo = "\(appVersion) (build \(buildNum))"
// versionInfo is now something like "2.3.0 (build 17)"

Ajouter un as! Stringà la fin de la soit appVersionou buildNumligne pour obtenir seulement la partie en tant que Stringobjet. Pas besoin pour cela mais si vous cherchez le plein versionInfo.

J'espère que ça aide!

Créé 21/12/2016 à 09:35
source utilisateur

voix
0
func getAppVersion() -> String {
    let dictionary = Bundle.main.infoDictionary!
    let versionValue = dictionary["CFBundleShortVersionString"] ?? "0"
    let buildValue = dictionary["CFBundleVersion"] ?? "0"
    return "\(versionValue) (build \(buildValue))"
}

Sur la base de @rajat réponse Chauhan sans jeter à forcé String.

Créé 10/04/2019 à 10:42
source utilisateur

voix
0

Vous pouvez essayer cette méthode:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Créé 24/10/2017 à 18:15
source utilisateur

voix
0

Vous pouvez utiliser le infoDictionary qui obtient les détails de la version de info.plist vous app. Ce code fonctionne pour rapidement 3. Il suffit d'appeler cette méthode et afficher la version dans un élément de l'interface utilisateur préférée.

Swift-3  

func getVersion() -> String {
    let dictionary = Bundle.main.infoDictionary!
    let version = dictionary["CFBundleShortVersionString"] as! String
    let build = dictionary["CFBundleVersion"] as! String
    return "v\(version).\(build)"
}
Créé 31/07/2017 à 12:31
source utilisateur

voix
0

Ceci est une bonne chose à manipuler avec un système de contrôle de révision. De cette façon, lorsque vous obtenez un rapport de bogue d'un utilisateur, vous pouvez vérifier que la révision du code et (espérons-le) reproduire le bug en cours d'exécution exactement le même code que l'utilisateur.

L'idée est que chaque fois que vous faites construire, vous exécuter un script qui obtient le numéro de révision de votre code et met à jour un fichier dans votre projet (généralement avec une certaine forme de remplacement des jetons). Vous pouvez alors écrire une routine de traitement des erreurs qui inclut toujours le numéro de révision dans la sortie d'erreur, ou vous pouvez l'afficher sur une page « A propos ».

Créé 19/01/2009 à 19:46
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more