Πώς μπορεί το iPhone app μου να ανιχνεύσει το δικό της αριθμό έκδοσης του;

ψήφοι
237

Γράφω ένα iPhone app. Είναι ήδη δημοσιευθεί, αλλά θα ήθελα να προσθέσω ένα χαρακτηριστικό γνώρισμα όπου εμφανίζεται ο αριθμός έκδοσης του.

Θα προτιμούσα να μην χρειαστεί να το κάνετε αυτό χειροκίνητα με κάθε έκδοση θα κυκλοφορήσει ...

Είναι ένας τρόπος με τον στόχο-C για να μάθετε ποια είναι η έκδοση του app μου;

Δημοσιεύθηκε 19/01/2009 στις 19:32
πηγή χρήστη
Σε άλλες γλώσσες...                            


15 απαντήσεις

ψήφοι
216

Όπως περιγράφω εδώ , μπορώ να χρησιμοποιήσω μια δέσμη ενεργειών για να ξαναγράψει ένα αρχείο κεφαλίδας με τον τρέχοντα αριθμό αναθεώρησης Subversion μου. Ο αριθμός αναθεώρησης αποθηκεύεται στη σταθερή kRevisionNumber. Στη συνέχεια μπορούν να έχουν πρόσβαση την έκδοση και τον αριθμό αναθεώρησης χρησιμοποιώντας κάτι παρόμοιο με το ακόλουθο:

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

η οποία θα δημιουργήσει μια σειρά της μορφής «Έκδοση 1.0 (51)».

Απαντήθηκε 19/01/2009 στις 20:00
πηγή χρήστη

ψήφοι
143

Με βάση την απάντηση Brad Larson, εάν έχετε μεγάλες και μικρές πληροφορίες έκδοσης αποθηκεύονται στο info plist (όπως έκανα σε ένα συγκεκριμένο έργο), αυτό λειτούργησε καλά για μένα:

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

Τώρα φουλάρει μια μικρή έκδοση με το χέρι μπορεί να είναι ένα πόνο, και έτσι χρησιμοποιώντας μια πηγή αποθετήριο αριθμό αναθεώρησης κόλπο είναι ιδανική. Αν δεν έχετε δεμένα ότι (όπως δεν είχα), το παραπάνω απόσπασμα θα μπορούσε να είναι χρήσιμη. Παίρνει επίσης το εμφανιζόμενο όνομα της εφαρμογής.

Απαντήθηκε 15/08/2012 στις 05:13
πηγή χρήστη

ψήφοι
46

Swift έκδοση για δύο ξεχωριστά:

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

Της περιλαμβάνονται σε αυτό το repo, θα δείτε:

https://github.com/goktugyil/EZSwiftExtensions

Απαντήθηκε 19/03/2015 στις 12:42
πηγή χρήστη

ψήφοι
41

Αυτό είναι ό, τι έκανα στην αίτησή μου

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

Ας ελπίσουμε ότι αυτή η απλή απάντηση θα βοηθήσει κάποιος ...

Απαντήθηκε 02/11/2013 στις 21:01
πηγή χρήστη

ψήφοι
31

Μπορείτε να καθορίσετε τη CFBundleShortVersionStringσειρά σε plist.info σας και διαβάστε ότι προγραμματισμού χρησιμοποιώντας το API που παρέχεται .

Απαντήθηκε 19/01/2009 στις 19:46
πηγή χρήστη

ψήφοι
29

Υπάρχουν δύο πράγματα - την κατασκευή έκδοση και την έκδοση της εφαρμογής.

  1. Για να πάρετε App έκδοση:

    NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    
  2. Για να πάρετε Κατασκευάστηκε έκδοση:

    NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    
Απαντήθηκε 23/01/2015 στις 09:01
πηγή χρήστη

ψήφοι
17
// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Απαντήθηκε 23/07/2014 στις 19:15
πηγή χρήστη

ψήφοι
16

Μια σύντομη τρόπος για να αποκτήσετε μια σειρά έκδοση σε XYZ μορφή είναι:

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

Ή, για μόλις XY:

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

Και τα δύο αυτά αποσπάσματα επιστρέφει χορδές που θα αναθέσει σε ακίνητο κείμενο αντικειμένου ετικέτας σας, π.χ.

myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
Απαντήθηκε 07/09/2013 στις 03:58
πηγή χρήστη

ψήφοι
7

Μπορείτε να δοκιμάστε να χρησιμοποιήσετε λεξικό, όπως: -

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

NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
Απαντήθηκε 15/05/2014 στις 10:58
πηγή χρήστη

ψήφοι
4

Διαβάστε το info.plist αρχείο της εφαρμογής σας και να πάρετε την τιμή για το κλειδί CFBundleShortVersionString. Διαβάζοντας info.plist θα σας δώσει μια NSDictionary αντικειμένου

Απαντήθηκε 22/01/2009 στις 06:05
πηγή χρήστη

ψήφοι
1

Αν χρειάζεστε ένα συνδυασμό και των δύο έκδοσης και την κατασκευή num , εδώ είναι μια σύντομη τρόπο χρησιμοποιώντας 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)"

Προσθέστε ένα as! Stringστο τέλος είτε της appVersionή buildNumγραμμή για να πάρει μόνο εκείνο το τμήμα ως Stringαντικείμενο. Δεν υπάρχει ανάγκη για αυτό όμως, αν ψάχνετε για την πλήρη versionInfo.

Ελπίζω αυτό να βοηθήσει!

Απαντήθηκε 21/12/2016 στις 09:35
πηγή χρήστη

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

Με βάση @rajat Chauhan απάντηση χωρίς ανάγκασε ρίχνει στο String.

Απαντήθηκε 10/04/2019 στις 10:42
πηγή χρήστη

ψήφοι
0

Μπορείτε να δοκιμάσετε αυτήν τη μέθοδο:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Απαντήθηκε 24/10/2017 στις 18:15
πηγή χρήστη

ψήφοι
0

Μπορείτε να χρησιμοποιήσετε το infoDictionary που παίρνει τις λεπτομέρειες έκδοσης από info.plist της εφαρμογής σας. Αυτός ο κωδικός λειτουργεί για ταχεία 3. Απλά καλέστε τη μέθοδο αυτή και προβολή της έκδοσης σε οποιαδήποτε προτιμώμενο στοιχείο UI.

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)"
}
Απαντήθηκε 31/07/2017 στις 12:31
πηγή χρήστη

ψήφοι
0

Αυτό είναι ένα καλό πράγμα για να χειριστεί με ένα σύστημα ελέγχου αναθεώρησης. Με αυτόν τον τρόπο, όταν μπορείτε να πάρετε μια αναφορά σφάλματος από έναν χρήστη, μπορείτε να δείτε ότι η αναθεώρηση του κώδικα και (ελπίζουμε) να αναπαράγει το σφάλμα λειτουργεί ακριβώς το ίδιο κωδικό με το χρήστη.

Η ιδέα είναι ότι κάθε φορά που κάνετε μια κατασκευή, που θα τρέξει ένα script που παίρνει τον τρέχοντα αριθμό αναθεώρησης του κώδικα σας και να ενημερώνει ένα αρχείο στο πλαίσιο του έργου σας (συνήθως με κάποια μορφή συμβολική αντικατάστασης). Στη συνέχεια μπορείτε να γράψετε μια ρουτίνα χειρισμού σφάλματος που περιλαμβάνει πάντα τον αριθμό αναθεώρησης στην έξοδο σφάλματος, ή μπορείτε να το εμφανίσετε σε μια «About» σελίδα.

Απαντήθηκε 19/01/2009 στις 19:46
πηγή χρήστη

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