Come può il mio iphone app di rilevare il proprio numero di versione?

voti
237

Sto scrivendo un'applicazione per iPhone. E 'già stato pubblicato, ma vorrei aggiungere una caratteristica in cui viene visualizzato il numero di versione.

Preferirei non doverlo fare manualmente con ogni versione vi rilasci ...

C'è un modo in Objective-C per scoprire che cosa è la versione della mia applicazione?

È pubblicato 19/01/2009 alle 19:32
fonte dall'utente
In altre lingue...                            


15 risposte

voti
216

Come ho descritto qui , io uso uno script di riscrivere un file di intestazione con il mio numero di revisione corrente Subversion. Questo numero di revisione viene memorizzato nella costante kRevisionNumber. Posso quindi accedere alla versione e numero di revisione utilizzando qualcosa di simile al seguente:

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

che creerà una stringa di formato "versione 1.0 (51)".

Risposto il 19/01/2009 a 20:00
fonte dall'utente

voti
143

Sulla risposta di Brad Larson, se avete maggiore e minore informazioni versione memorizzata nel plist informazioni (come ho fatto su un progetto particolare), questo ha funzionato bene per me:

- (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];
}

Ora giri una versione minore manualmente può essere un dolore, e in modo da utilizzare una fonte repository numero di revisione trucco è l'ideale. Se non hai legato che (come ho avuto non), quanto sopra snippet può essere utile. Si tira anche fuori il nome visualizzato del app.

Risposto il 15/08/2012 a 05:13
fonte dall'utente

voti
46

Versione Swift per sia separatamente:

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

La sua incluso in questo repo, check it out:

https://github.com/goktugyil/EZSwiftExtensions

Risposto il 19/03/2015 a 12:42
fonte dall'utente

voti
41

Questo è quello che ho fatto nella mia applicazione

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

Speriamo che questo semplice risposta sarà aiutare qualcuno ...

Risposto il 02/11/2013 a 21:01
fonte dall'utente

voti
31

È possibile specificare la CFBundleShortVersionStringstringa nel vostro plist.info e leggere che a livello di codice utilizzando l' API fornite .

Risposto il 19/01/2009 a 19:46
fonte dall'utente

voti
29

Ci sono due cose - costruire la versione e la versione app.

  1. Per ottenere la versione App:

    NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    
  2. Per ottenere Versione build:

    NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    
Risposto il 23/01/2015 a 09:01
fonte dall'utente

voti
17
// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Risposto il 23/07/2014 a 19:15
fonte dall'utente

voti
16

Un modo succinto per ottenere una stringa di versione in XYZ formato è:

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

Oppure, per soli XY:

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

Entrambi questi frammenti restituisce stringhe che si desidera assegnare alla proprietà di testo del vostro oggetto etichetta, ad esempio,

myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
Risposto il 07/09/2013 a 03:58
fonte dall'utente

voti
7

Si può provare a utilizzare dizionario come: -

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

NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
Risposto il 15/05/2014 a 10:58
fonte dall'utente

voti
4

Leggere il file info.plist della vostra applicazione e ottenere il valore per CFBundleShortVersionString chiave. Lettura info.plist vi darà un oggetto NSDictionary

Risposto il 22/01/2009 a 06:05
fonte dall'utente

voti
1

Se hai bisogno di una combinazione di entrambi versione e costruire num , ecco un breve tratto con 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)"

Aggiungi as! Stringalla fine sia del appVersiono buildNumlinea di avere solo la porzione in Stringoggetto. Non c'è bisogno di ciò, però, se stai cercando per il pieno versionInfo.

Spero che aiuti!

Risposto il 21/12/2016 a 09:35
fonte dall'utente

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

Sulla base di @rajat risposta Chauhan senza forzato cast String.

Risposto il 10/04/2019 a 10:42
fonte dall'utente

voti
0

Si può provare questo metodo:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Risposto il 24/10/2017 a 18:15
fonte dall'utente

voti
0

È possibile utilizzare l'infoDictionary che ottiene i dettagli della versione da info.plist di voi app. Questo codice funziona per SWIFT 3. Basta chiamare questo metodo e visualizzare la versione in qualsiasi elemento dell'interfaccia utente preferito.

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)"
}
Risposto il 31/07/2017 a 12:31
fonte dall'utente

voti
0

Questa è una buona cosa per gestire con un sistema di controllo di revisione. In questo modo quando si ottiene una segnalazione di bug da un utente, è possibile controllare che la revisione del codice e (si spera) riprodurre l'errore che esegue il codice esattamente lo stesso come l'utente.

L'idea è che ogni volta che fate una build, si eseguire uno script che ottiene il numero di revisione corrente del codice e aggiorna un file all'interno del progetto (di solito con una qualche forma di sostituzione del token). È quindi possibile scrivere una routine di gestione degli errori che include sempre il numero di revisione in uscita di errore, oppure si può visualizzare su una pagina "About".

Risposto il 19/01/2009 a 19:46
fonte dall'utente

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