Differenza tra la versione Xcode (CFBundleShortVersionString) e la build (CFBundleVersion)


94

Riepilogo del target dell'app

In Xcode 4, vedo questo per il mio riepilogo di destinazione:

L'input "Version" corrisponde a CFBundleShortVersionStringnel file info.plist e l'input "Build" corrisponde a CFBundleVersion.

Qual è la differenza tra questi due? Vedo molte persone su Internet che vogliono mettere lo stesso valore per entrambi, e il mio sospetto è che sia per la compatibilità all'indietro.

Ho due domande:

1) Se dovessi iniziare da zero, quale sarebbe la best practice per il controllo delle versioni della tua app?

2) In tutte le versioni precedenti della mia app, ho usato solo CFBundleVersion. Per non rovinare il processo di aggiornamento, devo continuare a incrementare CFBundleVersionnello stesso modo in cui sono stato o è possibile passare alla "strada giusta", ammesso che esista?


3
Questo è un duplicato di stackoverflow.com/questions/6851660/version-vs-build-in-xcode-4 ma forse questa versione è meglio dichiarata (e ha uno screenshot).
Daniel Dickison

C'è qualcosa che dovevi fare per mostrare il campo Build nel tuo Riepilogo? Vedo solo una versione, ma nessun campo Build.
Kenny Wyland

Risposte:


68

Il documento Apple "Information Property List Key Reference" dice che CFBundleShortVersionStringrappresenta una versione di rilascio, mentre CFBundleVersionrappresenta qualsiasi build, rilasciata o meno. Inoltre, CFBundleShortVersionStringpuò essere localizzato, anche se non so perché lo vorresti, poiché dicono che dovrebbe essere "una stringa composta da tre numeri interi separati da punti". Per una build di rilascio, sarebbe ragionevole rendere i due numeri uguali. Per una build di sviluppo, potresti aggiungere qualcos'altro a CFBundleVersion, forse un altro punto e un numero intero.


Ma se ho attualmente usando 1.3.1 come il mio CFBundleVersione nulla come la mia CFBundleShortVersionString, e voglio passare ad usare CFBundleVersionper rappresentare interna costruisce, quindi ho bisogno almeno di partenza con un numero intero superiore a 1.3.1, giusto? O fare quel passaggio sta solo chiedendo guai?
Philip Walton

La versione ( CFBundleShortVersionString) è l'unica cosa importante per l'invio ad Apple. Build ( CFBundleVersion) può essere utilizzato come preferisci durante lo sviluppo o da mostrare nella tua app. Usa ottale (base 8) e ripeti al contrario di 12, se vuoi.
nekno

16
nekno: In realtà il CFBundleVersion è ciò che conta per Apple. Controlla questo messaggio di errore che Apple fornisce quando invia un'app: "Il file binario che hai caricato non era valido. La chiave CFBundleVersion nel file Info.plist deve contenere una versione superiore a quella della versione caricata in precedenza."
malhal

10
Alcuni paesi usano numeri diversi dall'arabo moderno usato nel mondo occidentale, come l'arabo orientale (٠, ١, ٢, ٣, ٤, ٥, ٦, ٧, ٨, ٩) o l'ebraico (א, ב, ג, ד, ה, ו, ז, ח, ט) - e anche questi due sono scritti da destra a sinistra. Ci sono molti altri sistemi numerici là fuori (vedi en.wikipedia.org/wiki/Category:Numerals ) Quindi la mia ipotesi è che questo sia ciò che Apple intende per numero di versione "localizzabile".
Ruslan Ulanov

A proposito, le tre cifre con punteggiatura non sono necessarie. Ho utilizzato invece un valore di data e ora come 201606070620per entrambi i valori in un'app iOS 7-8-9 di spedizione.
Basil Bourque

3

Alla domanda di JWWalker sul motivo per cui vorresti localizzare CFBundleShortVersionString, quello sarebbe il separatore decimale. Ad esempio, nelle versioni locali in cui il separatore decimale è effettivamente una virgola, la versione "1.5" sarebbe "1,5".


30
IMO non è necessario localizzare i numeri di versione. Vivo in una regione in cui il separatore decimale è una virgola (Germania) e sono abituato a numeri di versione separati da un punto. In effetti, non ricordo di aver mai visto un numero di versione con una virgola.
Christian Specht

2
Vivo anche in una regione che utilizza la virgola come separatore decimale, sebbene 1,3,1 sia un valore piuttosto strano, 1.3.1 sembra molto meglio.
Lucien

1
Penso che significhi che puoi avere diverse versioni dell'app per diverse regioni. 1.2.1> en.lproj 1.2.2> fr.lproj Anche se l'intero plist viene copiato quando si localizza il file in modo che entrambi i numeri di versione siano copiati in modo che entrambi 'possano essere localizzati'
brian.clear

1

Soluzione rapida:

Aggiungi semplicemente il CFBundleShortVersionStringfile plist e modifica la tua versione.

  1. Rivela il tuo InfoPlist.strings
  2. Evidenziarlo e incollare il codice sottostante in (assumendo che sia in modalità codice sorgente)

{"CFBundleShortVersionString" = "1.1";}

  1. Cambia 1.1 in qualunque sia la tua nuova build.
  2. Crea e invia senza più errori!

inserisci qui la descrizione dell'immagine


1

Consulta la documentazione di Apple sul caricamento dei file binari.

Numerazione di versioni e build: iTunes Connect estrae il numero di versione preliminare e il numero di build dal file binario. Il numero di versione non definitiva è il numero di versione di Xcode o il tasto "Stringa di versione del bundle, breve" nel file Info.plist. Il numero di build è il numero di Xcode Build o la chiave "Bundle version" in Info.plist. Il numero di versione preliminare e il numero di build verranno visualizzati nella scheda Prerelease, come descritto in Visualizzazione delle build.

Caricamento di un file binario per un'app

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.