Nilai-nilai apa yang harus saya gunakan untuk CFBundleVersion dan CFBundleShortVersionString?

Ini adalah pertama saya aplikasi iOS pengajuan dan saya don't ingin aplikasi saya ditolak.

Ini adalah dari Apple Docs:

CFBundleVersion (String - iOS, OS X) menentukan membangun nomor versi bundel, yang mengidentifikasi sebuah iterasi (dirilis atau belum pernah dirilis) bundel. Versi build number harus menjadi sebuah string yang terdiri dari tiga non-negatif, periode dipisahkan bilangan bulat dengan bilangan bulat yang lebih besar dari nol. String harus berisi angka (0-9) dan titik (.) karakter. Angka nol yang terpotong dari masing-masing bilangan bulat dan akan diabaikan (yaitu, 1.02.3 setara dengan 1.2.3). Kunci ini tidak dilokalisasi.

CFBundleShortVersionString (String - iOS, OS X) menentukan versi rilis nomor bundel, yang mengidentifikasi merilis iterasi dari aplikasi. Rilis dengan nomor versi adalah sebuah string yang terdiri dari tiga periode yang dipisahkan bilangan bulat. Pertama integer merupakan revisi besar untuk aplikasi, seperti revisi yang menerapkan fitur baru atau perubahan besar. Kedua integer yang menunjukkan revisi yang menerapkan kurang fitur yang menonjol. Ketiga integer merupakan rilis pemeliharaan.

Nilai untuk kunci ini berbeda dari nilai "CFBundleVersion," yang mengidentifikasi sebuah iterasi (dirilis atau belum pernah dirilis) dari aplikasi. Kunci ini dapat dilokalisasi dengan seperti itu anda InfoPlist.string file.

Tetapi tampaknya sedikit aneh. Interpretasi saya untuk ini adalah untuk menempatkan kedua nilai yang sama, yaitu:

CFBundleVersion: 1.0.0
CFBundleShortVersionString: 1.0.0

Seseorang dapat memastikan 100% bahwa apa yang saya seharusnya?

Mengomentari pertanyaan (4)

CFBundleShortVersionString memberi anda versi dari aplikasi anda. It's biasanya bertambah setiap kali anda mempublikasikan aplikasi anda ke App Store. Ini adalah versi yang terlihat pada "Versi" bagian untuk halaman App Store dari aplikasi anda.

CFBundleVersion memberi anda membangun nomor yang digunakan untuk pengembangan dan pengujian, yaitu "teknis" tujuan. Pengguna akhir ini jarang tertarik pada nomor yang membangun tetapi selama perkembangan anda mungkin perlu tahu apa's sedang dikembangkan dan tetap pada masing-masing membangun. Hal ini biasanya bertambah pada setiap iterasi dari internal rilis. Dan anda dapat menggunakan continuous integration alat-alat seperti Jenkins untuk auto-increment nomor yang membangun di setiap membangun.

Dua nomor yang tidak tergantung pada satu sama lain, tetapi itu adalah ide yang baik untuk menjaga mereka paralel untuk menghindari kebingungan. Perlu diingat bahwa setelah aplikasi anda telah lulus App Store review anda butuhkan untuk kenaikan nomor yang membangun seperti Phil dan likeTheSky telah menyatakan, terlepas dari apakah anda publikasikan atau tidak.

Use case: Let's mengatakan, anda telah teruji membangun, siap untuk diserahkan. It's nomor versi 1.0.0 dan membangun nomor 1.0.0.32. Setelah anda mengirimkan aplikasi anda, anda perlu memperbarui versi 1.0.1 dan membangun nomor sebagai 1.0.1.0.

Komentar (7)
Larutan

Pikirkan cara ini: "versi pendek" (CFBundleShortVersionString) adalah umum nomor versi. "versi" (CFBundleVersion) adalah lebih dari sebuah nomor versi internal yang bisa berubah jauh lebih sering dari publik "versi pendek". Secara pribadi saya menggunakan yang sama untuk keduanya, tapi banyak orang yang update "versi" di setiap membangun. Entah cara anda biasanya update "versi pendek" ketika anda melepaskan ke Apple. Seberapa sering anda memperbarui "versi" untuk anda dan kebutuhan anda.

Komentar (2)

Jawaban oleh rmaddy adalah benar. I'll menambahkan dua lebih banyak pikiran.

Ketiga Nomor Versi

Diketahui dari ketiga nomor versi, yang ditentukan pada iTunesConnect situs web sebagai bagian dari aplikasi anda's definisi. Jika nomor yang berbeda dari dua dalam Xcode, Apple memberikan anda sebuah peringatan. Anda dapat mengabaikan peringatan, karena tidak show-stopper (bukan "kesalahan").

Saat-Saat seperti versi

Juga, anda tidak perlu menggunakan tiga angka dengan tanda baca. Yang mungkin dapat akal untuk beberapa aplikasi, di mana secara tradisional perubahan dalam nomor pertama menunjukkan beberapa jenis perubahan dramatis biasanya mempengaruhi kompatibilitas.

Untuk aplikasi lain anda mungkin ingin menggunakan hanya sebuah tanggal-nilai waktu dalam ISO 8601 format standar gaya (YYYYMMDDHHMM). Misalnya, 201606070620. Urutan dari tahun-bulan-tanggal-jam-menit membuat jumlah yang semakin meningkat, selalu sama panjang karena padding nol, yang bila diurutkan berdasarkan abjad juga kronologis.

Saya telah berhasil menggunakan gaya ini dari nomor versi pada pengiriman aplikasi iOS yang bekerja di iOS 7, 8, & 9.

Anda bahkan dapat mengotomatisasi generasi dari nilai ini. Dalam proyek anda Target > Membangun Fase > Run Script panel:

  1. Menentukan dalam Shell field: /bin/sh
  2. Paste berikut 5 baris script dilihat di bawah ini.
  3. (opsional) Centang Show variabel lingkungan dalam membangun log kotak centang.
  4. Hapus centang pada Run script hanya ketika menginstal kotak centang.

Setiap kali anda melakukan build tanggal saat ini waktu di UTC zona waktu ditangkap. The -u bendera dalam naskah menggunakan UTC daripada anda saat ini default zona waktu. Umumnya terbaik untuk programmer dan sysadmin untuk dapat menggunakan dan berpikir dalam UTC daripada zona waktu setempat.

#!/bin/bash
buildNumber=$(date -u "+%Y%m%d%H%M")
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $buildNumber" "$INFOPLIST_FILE"  # Version number
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"  # Build number
echo "DateTime for app version number: $buildNumber"

Atau jangan hibrida, dengan konvensional 1.2.3 untuk nomor Versi dan tanggal-waktu sebagai nomor yang Membangun. Untuk melakukan hybrid, hanya komentar-out CFBundleShortVersionString garis # di depan.

Komentar (0)

Saya menggunakan CFBundleVersion untuk menunjukkan internal untuk membangun CFBundleShortVersionString. Saya menggunakan tes penerbangan untuk menyerahkan membangun untuk saya penguji sehingga perbedaan di antara mereka telah sangat berguna.

Apple dokumen kata CFBundleVersion "harus berupa string yang terdiri dari 3 non-negatif, periode dipisahkan bilangan bulat" Tapi sebenarnya hal itu dapat LEBIH DARI 3 bagian(seperti jawaban di atas menunjukkan). Saya menggunakan itu untuk menunjukkan perkembangan saya membangun, mengatakan saya CFBundleShortVersionString adalah 1.0.0, saya dapat menggunakan 1.0.0.11 untuk CFBundleVersion untuk menunjukkan bahwa saya 11th membangun untuk rilis 1.0.0

Masing-masing CFBundleVersion yang dikirimkan ke app store harus lebih besar dari sebelumnya atau anda akan mendapatkan KESALAHAN ITMS-90478: "Versi tidak Valid. Membangun dengan versi "xxx" tidak dapat diimpor karena versi yang lebih baru telah ditutup untuk membangun baru kiriman. Memilih nomor versi yang berbeda."

CFBundleShortVersionString hanya bisa memiliki 3 bagian atau anda akan mendapatkan ERROR ITMS-90060:nilai untuk kunci CFBundleShortVersionString 'xxx' di Info.plist harus menjadi periode-daftar dipisahkan paling tiga non-negatif bilangan bulat."

The 3 nomor Basil yang Bourque disebutkan, yaitu menunjukkan nomor versi pada iTunesConnect adalah di mana hal-hal yang mungkin menjadi rumit.

Saya menggunakan berbagai iTunesConnect nomor dari CFBundleShortVersionString karena ketika saya pertama kali mengajukan aplikasi ke app store kita sudah memiliki banyak putaran dari internal rilis. Jadi saya menggunakan 1.0 untuk iTunesConnect jumlah dan 5.x untuk CFBundleShortVersionString. Dalam rilis berikutnya untuk app store yang saya berikan fungsi untuk memeriksa apakah ada versi yang lebih baru di app store dan menyadari aku mengalami kesulitan sekarang karena saya hanya bisa mendapatkan iTunesConnect nomor (menggunakan http://itunes.apple.com/lookup?bundleId=) jadi saya perlu melakukan beberapa perhitungan untuk sebelum membandingkannya dengan CFBundleShortVersionString nomor.

Saya mencoba untuk memperbaikinya dengan menggunakan iTunesConnect nomor saya CFBundleShortVersionString, tapi punya kesalahan, KESALAHAN ITMS-90062: "bundel Ini adalah tidak valid. Nilai untuk kunci CFBundleShortVersionString [x.x.x] di Info.plist harus berisi versi yang lebih tinggi dari yang telah disetujui sebelumnya versi [x.x.x]."

Jadi saya akan menyarankan untuk selalu membuat mereka sama.

Komentar (0)

Skema yang paling masuk akal bagi saya adalah untuk menggunakan nomor versi (ie. CFBundleShortVersionString) yang sebenarnya nomor versi, dan kemudian menggunakan nomor build (ie. CFBundleVersion) untuk mewakili pengajuan ke App Store. Jadi, kecuali ada masalah dan karenanya kembali mengajukan, nomor ini selalu 1. Untuk rilis baru, saya reset ke 1 jika sebelumnya punya masalah di TestFlight pengujian atau di review.

Membangun nomor menyediakan cara untuk menjamin setiap pengiriman yang anda berikan untuk rilis tertentu. Seperti yang dijelaskan dalam definisi-definisi di atas, koleksi semua membangun yang anda berikan untuk versi tertentu dari aplikasi anda adalah yang disebut versi yang's 'rilis kereta api'. Untuk aplikasi iOS, membangun nomor harus unik dalam setiap rilis kereta api, tapi mereka tidak perlu menjadi unik di berbagai rilis kereta [penekanan saya]. Itu adalah untuk mengatakan, untuk Aplikasi iOS, anda dapat menggunakan yang sama membangun angka lagi dalam berbagai rilis kereta api jika anda ingin.

Dari Catatan Teknis TN2420: Nomor Versi dan Build Numbers.

Komentar (1)

Sesuatu yang saya've pernah melihat dibahas di mana saja adalah apa adalah jumlah maksimum untuk masing-masing bidang dalam CFBundleVersion?

Dengan menetapkan CFBundleVersion dalam aplikasi untuk 1.1.1 dan melihat heksadesimal vaue untuk versi di "lsregister -dump", saya bertekad bahwa nilai maksimal untuk field pertama adalah (2^22)-1 atau 4194303, dan nilai-nilai maksimum untuk kedua dan ketiga bidang ini adalah (2^21)-1 atau 2097151.

3 bidang yang menambahkan hingga 64 bit.

Hal ini memiliki implikasi bagi kita yang menggunakan CFBundleVersion berdasarkan tanggal dan waktu.

Saya membuat field pertama untuk YYYYMMDD. Ini selalu lebih besar dari max diperbolehkan versi dan itu yang menyebabkan hasil yang tak terduga, untuk sedikitnya, saat Peluncuran Layanan itu memutuskan versi mana yang aplikasi untuk menjalankan ketika anda memiliki beberapa versi yang diinstal dan menggunakan sesuatu seperti 'open-a Appname' dari baris perintah.

Silakan menyebarkan secara luas. Saya yakin banyak orang yang datang kemandekan dengan ini.

Komentar (0)

Seperti sekarang, Apple dokumentasi untukCFBundleVersion menyatakan [penekanan dari saya]:

membangun versi yang mengidentifikasi sebuah iterasi dari bundel.

...

kunci Ini adalah mesin yang dapat dibaca string yang terdiri dari satu untuk tiga periode yang dipisahkan bilangan bulat, seperti 10.14.1. String hanya dapat berisi karakter numerik (0-9) dan tanda titik.

...

Anda dapat memasukkan lebih banyak bilangan bulat tetapi sistem mengabaikan mereka.

Untuk CFBundleShortVersionString [penekanan dari saya]:

rilis versi atau jumlah bundel.

...

kunci Ini adalah user-visible string untuk versi bundel. Format yang diperlukan adalah tiga periode yang dipisahkan bilangan bulat, seperti 10.14.1. String hanya dapat berisi karakter numerik (0-9) dan tanda titik.

I'd sarankan hanya secara otomatis incrementing CFBundleVersion untuk membangun masing-masing (atau setiap rilis untuk TestFlight) dan mengembalikannya ke 0 setiap kali anda mengubah CFBundleShortVersionString.

Anda harus secara eksplisit rencana, atau menyusun konsisten berarti, untuk memperbarui terlihat pengguna versi di CFBundleShortVersionString.

Komentar (0)