Hvordan kan min iphone app oppdage sin egen versjon nummer?

stemmer
239

Jeg skriver en iPhone app. Det er allerede blitt publisert, men jeg vil gjerne legge til en funksjon der versjonsnummeret vises.

Jeg vil heller ikke å gjøre dette manuelt med hver versjon jeg slipper ...

Er det en måte i Objective-C for å finne ut hva den versjonen er min app?

Publisert på 19/01/2009 klokken 18:32
kilden bruker
På andre språk...                            


15 svar

stemmer
217

Som jeg beskriver her , jeg bruker et skript til å skrive en header fil med min nåværende Subversion revisjonsnummer. At revisjonsnummer er lagret i kRevisionNumber konstant. Jeg kan da få tilgang til versjonen og revisjonsnummer ved hjelp av noe som ligner på følgende:

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

som vil skape en streng av formatet "Version 1.0 (51)".

Svarte 19/01/2009 kl. 19:00
kilden bruker

stemmer
143

Bygger på Brad Larson svar, hvis du har større og mindre versjon info lagret i info plist (som jeg gjorde på et bestemt prosjekt), dette fungerte bra for meg:

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

Nå turtall en mindre versjon manuelt kan være smertefullt, og så bruke en kilde depotrevisjon antall Trikset er ideelt. Hvis du ikke har bundet det i (som jeg ikke hadde), kodebiten over kan være nyttig. Det trekker også ut app visningsnavn.

Svarte 15/08/2012 kl. 04:13
kilden bruker

stemmer
47

Swift versjon for både separat:

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

Dens inkludert i denne repo, sjekk den ut:

https://github.com/goktugyil/EZSwiftExtensions

Svarte 19/03/2015 kl. 12:42
kilden bruker

stemmer
42

Dette er hva jeg gjorde i min søknad

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

Forhåpentligvis vil denne enkle svaret vil hjelpe noen ...

Svarte 02/11/2013 kl. 20:01
kilden bruker

stemmer
31

Du kan angi CFBundleShortVersionStringstrengen i plist.info og lese at programma bruker gitt API .

Svarte 19/01/2009 kl. 18:46
kilden bruker

stemmer
30

Det er to ting - å bygge versjon og app-versjon.

  1. For å få App versjon:

    NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    
  2. For å få bygge versjon:

    NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    
Svarte 23/01/2015 kl. 09:01
kilden bruker

stemmer
17
// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Svarte 23/07/2014 kl. 18:15
kilden bruker

stemmer
16

En kortfattet måte for å oppnå en versjon streng i XYZ -format er:

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

Eller, for bare XY:

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

Begge disse tekstutdragene returnerer strenger som du vil tilordne til merke objektets tekst eiendom, for eksempel

myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
Svarte 07/09/2013 kl. 02:58
kilden bruker

stemmer
7

Du kan prøve å bruke ordbok som: -

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

NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
Svarte 15/05/2014 kl. 09:58
kilden bruker

stemmer
4

Les Info.plist filen for appen din, og få verdien for nøkkelen CFBundleShortVersionString. Lese Info.plist vil gi deg en NSDictionary objekt

Svarte 22/01/2009 kl. 05:05
kilden bruker

stemmer
2

Du kan bruke infoDictionary som får versjons detaljer fra Info.plist av dere app. Denne koden fungerer for rask 3. Bare ring denne metoden, og vise versjonen på noen foretrukne UI element.

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)"
}
Svarte 31/07/2017 kl. 12:31
kilden bruker

stemmer
1

Hvis du trenger en kombinasjon av begge deler versjon og bygge num , her er en kort vei å bruke 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)"

Legg til en as! Stringtil enden av enten appVersioneller buildNumlinje for å få bare den del som et Stringobjekt. Ingen behov for det selv hvis du leter for fullt versionInfo.

Jeg håper dette hjelper!

Svarte 21/12/2016 kl. 09:35
kilden bruker

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

Basert på @rajat chauhan svar uten tvang kastet til String.

Svarte 10/04/2019 kl. 10:42
kilden bruker

stemmer
0

Du kan prøve denne metoden:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Svarte 24/10/2017 kl. 18:15
kilden bruker

stemmer
0

Dette er en god ting å håndtere med en revisjon kontrollsystem. På den måten når du får en feilrapport fra en bruker, kan du sjekke ut at revisjon av kode og (forhåpentligvis) reprodusere feilen kjører nøyaktig samme kode som brukeren.

Tanken er at hver gang du gjør en bygge, vil du kjøre et skript som får den nåværende revisjon antall koden din og oppdaterer en fil i prosjektet (vanligvis med noen form for symbolsk erstatning). Deretter kan du skrive en feil håndtering rutine som alltid inneholder revisjonsnummeret i feil utgang, eller du kan vise den på en "Om" -siden.

Svarte 19/01/2009 kl. 18:46
kilden bruker

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