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?
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.
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.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:Shell
field:/bin/sh
Show variabel lingkungan dalam membangun log
kotak centang.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.Atau jangan hibrida, dengan konvensional
1.2.3
untuk nomor Versi dan tanggal-waktu sebagai nomor yang Membangun. Untuk melakukan hybrid, hanya komentar-outCFBundleShortVersionString
garis#
di depan.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.
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.Dari Catatan Teknis TN2420: Nomor Versi dan Build Numbers.
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.
Seperti sekarang, Apple dokumentasi untuk
CFBundleVersion
menyatakan [penekanan dari saya]:Untuk
CFBundleShortVersionString
[penekanan dari saya]:I'd sarankan hanya secara otomatis incrementing
CFBundleVersion
untuk membangun masing-masing (atau setiap rilis untuk TestFlight) dan mengembalikannya ke 0 setiap kali anda mengubahCFBundleShortVersionString
.Anda harus secara eksplisit rencana, atau menyusun konsisten berarti, untuk memperbarui terlihat pengguna versi di
CFBundleShortVersionString
.