Ini adalah pengiriman aplikasi iOS pertama saya dan saya tidak ingin aplikasi saya ditolak.
Ini dari Apple Docs:
CFBundleVersion (String - iOS, OS X) menentukan nomor versi build dari bundel, yang mengidentifikasi iterasi (dirilis atau tidak dirilis) bundel. Nomor versi build harus berupa string yang terdiri dari tiga bilangan bulat non-negatif yang dipisahkan titik dengan bilangan bulat pertama lebih besar dari nol. String hanya boleh berisi karakter numerik (0-9) dan titik (.). Nol di depan dipotong dari setiap bilangan bulat dan akan diabaikan (yaitu, 1.02.3 setara dengan 1.2.3). Kunci ini tidak dapat dilokalkan.
CFBundleShortVersionString (String - iOS, OS X) menentukan nomor versi rilis bundel, yang mengidentifikasi iterasi yang dirilis dari aplikasi. Nomor versi rilis adalah string yang terdiri dari tiga bilangan bulat yang dipisahkan oleh periode. Bilangan bulat pertama mewakili revisi besar pada aplikasi, seperti revisi yang menerapkan fitur baru atau perubahan besar. Bilangan bulat kedua menunjukkan revisi yang menerapkan fitur yang kurang menonjol. Bilangan bulat ketiga mewakili rilis pemeliharaan.
Nilai untuk kunci ini berbeda dari nilai untuk "CFBundleVersion", yang mengidentifikasi iterasi (dirilis atau tidak dirilis) aplikasi. Kunci ini dapat dilokalkan dengan memasukkannya ke dalam file InfoPlist.strings Anda.
Tapi sepertinya agak aneh. Interpretasi saya untuk ini adalah menempatkan kedua nilai yang sama, yaitu:
CFBundleVersion: 1.0.0
CFBundleShortVersionString: 1.0.0
Bisakah seseorang mengkonfirmasi 100% bahwa itu yang seharusnya saya masukkan?
Jawaban:
Anggap saja seperti ini: "versi singkat" (
CFBundleShortVersionString
) adalah nomor versi publik. "Versi" (CFBundleVersion
) lebih merupakan nomor versi internal yang dapat berubah jauh lebih sering daripada "versi pendek" publik. Secara pribadi saya menggunakan yang sama untuk keduanya tetapi banyak orang memperbarui "versi" pada setiap build. Apa pun itu, Anda biasanya memperbarui "versi pendek" saat merilis ke Apple. Seberapa sering Anda memperbarui "versi" terserah Anda dan kebutuhan Anda.sumber
CFBundleShortVersionString memberi Anda versi aplikasi Anda. Ini biasanya bertambah setiap kali Anda memublikasikan aplikasi Anda ke App Store. Ini adalah versi yang terlihat di bagian "Versi" untuk halaman App Store aplikasi Anda.
CFBundleVersion memberi Anda nomor build yang digunakan untuk pengembangan dan pengujian, yaitu tujuan "teknis". Pengguna akhir jarang tertarik dengan nomor build, tetapi selama pengembangan, Anda mungkin perlu mengetahui apa yang sedang dikembangkan dan diperbaiki pada setiap build. Ini biasanya bertambah pada setiap iterasi rilis internal. Dan Anda dapat menggunakan alat integrasi berkelanjutan seperti Jenkins untuk menaikkan nomor versi secara otomatis pada setiap versi.
Kedua angka tersebut tidak bergantung satu sama lain, tetapi sebaiknya jaga agar tetap sejajar untuk menghindari kebingungan. Perlu diingat bahwa setelah aplikasi Anda lulus peninjauan App Store, Anda perlu menaikkan nomor build seperti yang dinyatakan Phil dan likeTheSky, terlepas dari apakah Anda memublikasikannya atau tidak.
Kasus penggunaan: Misalnya, Anda memiliki build yang sudah teruji dengan baik, siap untuk dikirimkan. Nomor versinya adalah 1.0.0 dan nomor build adalah 1.0.0.32 . Setelah Anda mengirimkan aplikasi, Anda perlu memperbarui versinya sebagai 1.0.1 dan nomor build sebagai 1.0.1.0 .
sumber
201606070620
dalam aplikasi pengiriman iOS.The jawaban dengan rmaddy benar. Saya akan menambahkan dua pemikiran lagi.
Nomor Versi Ketiga
Perhatikan nomor versi ketiga, yang ditentukan di situs web iTunesConnect sebagai bagian dari definisi aplikasi Anda. Jika nomor itu berbeda dari dua di Xcode, Apple memberi Anda peringatan. Anda dapat mengabaikan peringatan tersebut, karena ini bukan show-stopper (bukan "error").
Tanggal-Waktu sebagai versi
Selain itu, Anda tidak perlu menggunakan tiga angka dengan tanda baca. Itu mungkin masuk akal untuk beberapa aplikasi, di mana secara tradisional perubahan pada angka pertama menunjukkan semacam perubahan dramatis yang biasanya memengaruhi kompatibilitas.
Untuk aplikasi lain, Anda mungkin ingin menggunakan nilai tanggal-waktu dalam gaya format standar ISO 8601 (YYYYMMDDHHMM). Misalnya
201606070620
,. Urutan tahun-bulan-tanggal-jam-menit membuat angka yang terus meningkat, selalu memiliki panjang yang sama karena mengisi nol, yang bila diurutkan menurut abjad juga kronologis.Saya telah berhasil menggunakan gaya nomor versi ini pada aplikasi pengiriman iOS yang berfungsi di iOS 7, 8, & 9.
Anda bahkan dapat mengotomatiskan pembuatan nilai ini. Dalam proyek Anda
Target
>Build Phases
>Run Script
panel:Shell
lapangan:/bin/sh
Show environment variables in build log
kotak.Run script only when installing
kotak centang.Setiap kali Anda membangun tanggal-waktu saat ini di zona waktu UTC diambil. The
-u
bendera di script yang menggunakan UTC bukan zona waktu default Anda saat ini. Umumnya paling baik untuk programmer dan sysadmin untuk menggunakan dan berpikir dalam UTC daripada zona waktu lokal.Atau lakukan hybrid, dengan konvensional
1.2.3
untuk nomor Versi dan tanggal-waktu sebagai nomor Build. Untuk melakukan hibrid, cukup beri komentar padaCFBundleShortVersionString
baris dengan#
di depan.sumber
Skema yang paling masuk akal bagi saya adalah menggunakan nomor versi (mis.
CFBundleShortVersionString
) Untuk nomor versi sebenarnya, lalu menggunakan nomor versi (yaituCFBundleVersion
) untuk mewakili pengiriman ke App Store. Jadi, kecuali jika ada masalah dan karenanya dikirimkan kembali, nomor ini selalu 1. Untuk rilis baru, saya setel ulang ke 1 jika sebelumnya ada masalah dalam pengujian TestFlight atau sedang ditinjau.Dari Catatan Teknis TN2420: Nomor Versi dan Nomor Build .
sumber
Saya menggunakan CFBundleVersion untuk menunjukkan internal build untuk CFBundleShortVersionString . Saya menggunakan uji terbang untuk mengirimkan build untuk penguji saya, sehingga perbedaan di antara build sangat berguna.
Dokumen Apple mengatakan CFBundleVersion "harus berupa string yang terdiri dari 3 bilangan bulat non-negatif, dipisahkan titik" Tapi sebenarnya itu bisa LEBIH DARI 3 bagian (seperti yang ditunjukkan jawaban di atas). Saya menggunakannya untuk menunjukkan build pengembangan saya, katakanlah CFBundleShortVersionString saya adalah 1.0.0, saya dapat menggunakan 1.0.0.11 untuk CFBundleVersion untuk menunjukkan bahwa build ke-11 saya untuk rilis 1.0.0
Setiap CFBundleVersion yang dikirimkan ke App Store harus lebih besar dari sebelumnya atau Anda akan mendapatkan ERROR ITMS-90478 : "Versi Tidak Valid. Build dengan versi" xxx "tidak dapat diimpor karena versi yang lebih baru telah ditutup untuk pengiriman build baru. Pilih nomor versi yang berbeda. "
CFBundleShortVersionString hanya dapat memiliki 3 bagian atau Anda akan mendapatkan ERROR ITMS-90060: Nilai untuk kunci CFBundleShortVersionString 'xxx' dalam file Info.plist harus berupa daftar yang dipisahkan oleh periode dari paling banyak tiga bilangan bulat non-negatif. "
Angka ke - 3 yang disebutkan Basil Bourque, yaitu nomor versi yang ditampilkan di iTunesConnect adalah tempat yang mungkin menjadi rumit.
Saya menggunakan nomor iTunesConnect yang berbeda dari CFBundleShortVersionString karena ketika saya pertama kali mengirimkan aplikasi saya ke app store, kami sudah memiliki banyak putaran rilis internal. Jadi saya menggunakan 1.0 untuk nomor iTunesConnect dan 5.x untuk CFBundleShortVersionString. Pada rilis berikutnya ke toko aplikasi saya menyediakan fungsi untuk memeriksa apakah ada versi yang lebih baru di toko aplikasi dan menyadari bahwa saya mengalami masalah sekarang karena saya hanya bisa mendapatkan nomor iTunesConnect (menggunakan
http://itunes.apple.com/lookup?bundleId=
) jadi saya perlu melakukan beberapa perhitungan sebelum membandingkannya dengan nomor CFBundleShortVersionString.Saya mencoba memperbaikinya dengan menggunakan nomor iTunesConnect sebagai CFBundleShortVersionString saya, tetapi mendapatkan kesalahan, ERROR ITMS-90062 : "Bundel ini tidak valid. Nilai untuk kunci CFBundleShortVersionString [xxx] di file Info.plist harus berisi versi yang lebih tinggi dari itu dari versi yang sebelumnya disetujui [xxx]. "
Jadi saya akan menyarankan untuk selalu membuatnya sama.
sumber
Sesuatu yang belum pernah saya lihat dibahas di mana pun adalah berapa jumlah maksimum untuk setiap bidang dalam CFBundleVersion?
Dengan menyetel CFBundleVersion di aplikasi ke 1.1.1 dan melihat nilai heksadesimal untuk versi di "lsregister -dump", saya menentukan bahwa nilai maksimum untuk bidang pertama adalah (2 ^ 22) -1 atau 4194303, dan maksimum nilai untuk bidang kedua dan ketiga adalah (2 ^ 21) -1 atau 2097151.
3 bidang menambahkan hingga 64 bit.
Ini berimplikasi pada kita yang menggunakan CFBundleVersion berdasarkan tanggal dan waktu.
Saya mengatur bidang pertama ke YYYYMMDD. Ini selalu lebih besar dari versi maksimum yang diizinkan dan itu mengarah ke hasil yang tidak dapat diprediksi, paling tidak, ketika Launch Services memutuskan versi aplikasi mana yang akan dijalankan ketika Anda menginstal beberapa versi dan menggunakan sesuatu seperti 'open -a Appname 'dari baris perintah.
Tolong sebarkan ini secara luas. Saya yakin banyak orang yang lepas kendali dengan ini.
sumber
Sampai sekarang, dokumentasi Apple untuk
CFBundleVersion
negara bagian [penekanan saya]:Untuk
CFBundleShortVersionString
[penekanan saya]:Saya sarankan hanya menambahkan secara otomatis
CFBundleVersion
untuk setiap build (atau setiap rilis ke TestFlight) dan menyetel ulang ke 0 setiap kali Anda mengubahnyaCFBundleShortVersionString
.Anda harus secara eksplisit merencanakan, atau merancang cara yang konsisten, untuk memperbarui versi pengguna yang terlihat di
CFBundleShortVersionString
.sumber