Différence entre la version Xcode (CFBundleShortVersionString) et la build (CFBundleVersion)

94

Résumé de la cible de l'application

Dans Xcode 4, je vois ceci pour mon résumé de la cible:

L'entrée "Version" correspond à CFBundleShortVersionStringdans le fichier info.plist, et l'entrée "Build" correspond à CFBundleVersion.

Quelle est la différence entre ces deux? Je vois beaucoup de gens sur Internet vouloir mettre la même valeur dans les deux, et je soupçonne que c'est pour la compatibilité ascendante.

J'ai deux questions:

1) Si je partais de zéro, quelle serait la meilleure pratique pour la gestion des versions de votre application?

2) Dans toutes les versions précédentes de mon application, je n'utilisais que CFBundleVersion. Afin de ne pas gâcher le processus de mise à niveau, dois-je continuer à incrémenter de CFBundleVersionla même manière que je l'ai été ou est-il possible de passer à la «bonne voie», en supposant qu'il en existe une?

Philip Walton
la source
3
Il s'agit d'un double de stackoverflow.com/questions/6851660/version-vs-build-in-xcode-4 mais peut-être que cette version est mieux indiquée (et a une capture d'écran).
Daniel Dickison
Avez-vous dû faire quelque chose pour afficher le champ Construire dans votre résumé? Je ne vois qu'une version, mais pas de champ Build.
Kenny Wyland

Réponses:

68

Le document Apple «Information Property List Key Reference» indique que cela CFBundleShortVersionStringreprésente une version finale, alors que CFBundleVersionreprésente n'importe quelle version, publiée ou non. En outre, CFBundleShortVersionStringpeut être localisé, bien que je ne sache pas pourquoi vous voudriez, car ils disent que c'est censé être "une chaîne composée de trois entiers séparés par des points". Pour une version de version, il serait raisonnable de rendre les deux nombres identiques. Pour une version de développement, vous pouvez ajouter autre chose au CFBundleVersion, peut-être un autre point et un entier.

JWWalker
la source
Mais si j'utilise actuellement 1.3.1 comme mon CFBundleVersionet rien comme mon CFBundleShortVersionString, et que je veux passer à utiliser CFBundleVersionpour représenter les builds internes, alors je dois au moins commencer par un entier supérieur à 1.3.1, non? Ou est-ce que faire ce changement ne pose que des problèmes?
Philip Walton
La version ( CFBundleShortVersionString) est la seule chose qui importera pour la soumission à Apple. Le Build ( CFBundleVersion) est destiné à être utilisé comme vous le souhaitez dans le développement ou à afficher dans votre application. Utilisez octal (base 8) et itérez en sens inverse de 12, si vous le souhaitez.
nekno
16
nekno: En fait, la CFBundleVersion est ce qui compte pour Apple. Vérifiez ce message d'erreur envoyé par Apple lors de la soumission d'une application: "Le binaire que vous avez téléchargé n'était pas valide. La clé CFBundleVersion dans le fichier Info.plist doit contenir une version supérieure à celle de la version précédemment téléchargée."
malhal
10
Certains pays utilisent des chiffres autres que l'arabe moderne utilisé dans le monde occidental, comme l'arabe oriental (٠, ١, ٢, ٣, ٤, ٥, ٦, ٧, ٨, ٩) ou l'hébreu (א, ב, ג, ד, ה, ו, ז, ח, ט) - et ces deux sont également écrits de droite à gauche. Il existe de nombreux autres systèmes numériques (voir en.wikipedia.org/wiki/Category:Numerals ). Je suppose donc que c'est ce qu'Apple entend par numéro de version "localisable".
Ruslan Ulanov
À propos, les trois chiffres avec ponctuation ne sont pas obligatoires. J'utilise à la place une valeur date-heure telle que 201606070620pour les deux valeurs dans une application d'expédition iOS 7-8-9.
Basil Bourque
3

À la question de JWWalker sur la raison pour laquelle vous voudriez localiser CFBundleShortVersionString, ce serait le séparateur décimal. Par exemple, dans les paramètres régionaux où le séparateur décimal est en fait une virgule, la version "1.5" serait "1,5".

Arjun
la source
30
IMO, vous n'avez pas besoin de localiser les numéros de version. Je vis dans une région où le séparateur décimal est une virgule (Allemagne), et je suis habitué aux numéros de version séparés par un point. En fait, je ne me souviens pas avoir jamais vu un numéro de version avec une virgule.
Christian Specht
2
Je vis aussi dans une région utilisant la virgule comme séparateur décimal, bien que 1,3,1 soit une valeur assez étrange, 1.3.1 semble beaucoup mieux.
Lucien
1
Je pense que cela signifie que vous pouvez avoir différentes versions de l'application pour différentes régions. 1.2.1> en.lproj 1.2.2> fr.lproj Bien que tout le plist soit copié lorsque vous localisez le fichier, les deux numéros de version sont copiés afin que les deux 'puissent être localisés'
brian.clear
1

Solution rapide:

Ajoutez simplement le CFBundleShortVersionStringau fichier plist et modifiez votre version.

  1. Révélez votre InfoPlist.strings
  2. Mettez-le en surbrillance et collez le code ci-dessous dans (en supposant qu'il soit en mode code source)

{"CFBundleShortVersionString" = "1.1";}

  1. Changez le 1.1 pour quelle que soit votre nouvelle version.
  2. Construisez et soumettez sans plus d'erreur!

entrez la description de l'image ici

Louie
la source
1

Consultez la documentation Apple sur le téléchargement de binaires.

Numérotation des versions et des builds: iTunes Connect extrait son numéro de version préliminaire et son numéro de build du binaire. Le numéro de version préliminaire est le numéro de version de Xcode, ou la clé "Chaîne de version du bundle, courte" dans Info.plist. Le numéro de build est le numéro de build Xcode, ou la clé "Version du bundle" dans Info.plist. Le numéro de version et le numéro de version de la version préliminaire seront affichés dans l'onglet Avant-version, comme décrit dans Affichage des versions.

Télécharger un binaire pour une application

GilesDMiddleton
la source