Saya telah menggunakan skrip shell sebagai bagian dari proses pembuatan Xcode saya untuk menaikkan nomor build dalam file plist , namun itu membuat Xcode 4.2.1 sering crash (dengan kesalahan tentang target yang bukan milik sebuah proyek; Saya menebak mengubah file plist membingungkan Xcode dalam beberapa hal).
Skrip shell melakukan ini sehingga nomor build hanya bertambah agvtool
ketika sebuah file lebih baru dari file plist (jadi hanya membangun tidak menambah nilainya):
if [ -n \"`find ProjDir -newer ProjDir/Project-Info.plist`\" ]; then agvtool -noscm next-version -all; else echo \"Version not incremented\"; fi
Apakah ada cara untuk menaikkan nomor build (di file plist , atau di mana pun) yang tidak merusak Xcode?
EDIT AKHIR : Sekarang saya melakukan hal-hal semacam ini menggunakan skrip python yang baru saja saya publikasikan di github . Ini tidak terdokumentasi dengan baik tetapi seharusnya tidak sulit untuk dikerjakan. Sebagai bonus, repo ini juga berisi skrip yang berguna untuk secara otomatis menggabungkan pustaka pihak ketiga ke dalam bundel aplikasi.
Jawaban:
Jika saya memahami pertanyaan Anda dengan benar, Anda ingin mengubah
Project-Info.plist
file, yang merupakan bagian dari template proyek standar Xcode?Alasan saya menanyakan ini adalah karena
Project-Info.plist
biasanya di bawah kontrol versi, dan memodifikasinya berarti akan ditandai sebagai, yah, dimodifikasi.Jika Anda setuju, cuplikan berikut akan memperbarui nomor build dan menandai file sebagai diubah dalam proses, di mana
get_build_number
ada beberapa skrip (misalnya, placeholder dalam contoh ini) untuk mendapatkan nomor build (mungkin bertambah) yang Anda ingin menggunakan:#!/bin/sh # get_build_number is a placeholder for your script to get the latest build number build_number = `get_build_number` /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${build_number}" ProjDir/Project-Info.plist
PlistBuddy memungkinkan Anda untuk mengatur kunci apa pun di file plist, bukan hanya nomor versi. Anda dapat membuat semua file plist yang diinginkan, dan memasukkannya ke dalam resource jika diperlukan. Mereka kemudian dapat dibaca dari bundel.
Mengenai kebutuhan Anda untuk menunjukkan versi di panel tentang dan tempat lain, Anda juga dapat melihat ke pengaturan
CFBundleGetInfoString
danCFBundleShortVersionString
.sumber
agvtool
), namun tindakan memodifikasi plist selama build sering merusak Xcode (karena menghapus skrip yang tidak dimilikinya ' t macet sekali, saat macet setiap 3 bangunan atau lebih). Apakah mungkin untuk meletakkan info versi di file plist lain dan memasukkannya ke dalam bundel dan dapat diakses dari Aplikasi?get_build_number
hanya placeholder - memperbarui jawaban untuk memperjelas.Saya telah mengotak-atik banyak jawaban atas pertanyaan ini, dan tidak ada yang cukup memuaskan saya. Namun, saya akhirnya menemukan campuran yang sangat saya sukai!
Kami cukup menyetel nomor versi untuk produk yang dibangun ke jumlah Git commit. Ini tidak akan mengacaukan kontrol sumber Anda, karena skrip hanya memutasi produk yang dibuat.
Tambahkan fase build "Jalankan Skrip" ini ke akhir fase build Anda:
if [ "${CONFIGURATION}" = "Release" ]; then buildNumber=$(git rev-list --count head) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" fi
Setel versi Info.plist Anda di proyek Anda ke apa pun yang Anda inginkan, itu tidak akan pernah digunakan saat membangun rilis rilis. Saya mengatur milik saya
AUTOMATED
atauDEVELOPMENT
jadi jelas ketika saya menjalankan pembangunan pembangunan.Itu dia! Aplikasi yang dibangun akan memiliki nomor build yang terus meningkat. (Selama Anda selalu melakukan build dari cabang yang sama.)
Mengapa saya menyukai metode ini:
Catatan lain:
sumber
git rev-list --count HEAD
bukangit rev-list HEAD | wc -l | tr -d ' '
.fastlane
untuk mengupload build otomatis dengan cara ini, Anda akan mendapatkan: ERROR ITMS-90058: "Paket ini tidak valid. Nilai untuk CFBundleVersion [PENGEMBANGAN] kunci di file Info.plist harus berupa daftar yang dipisahkan oleh periode di kebanyakan tiga bilangan bulat non-negatif. "Saya telah menggunakan glist ini. Ini bekerja seperti yang diharapkan. https://gist.github.com/sekati/3172554 (semua kredit diberikan kepada penulis asli)
Skrip yang saya modifikasi dari waktu ke waktu.
xcode-versionString-generator.sh ,
xcode-build-number-generator.sh
Karena inti ini membantu komunitas pengembang, saya membuat proyek GitHub darinya. Jadi mari kita kembangkan dengan baik. Ini adalah proyek GitHub: https://github.com/alokc83/Xcode-build-and-version-generator
Saya telah memperbarui kode untuk kedua skrip sedikit peningkatan. alih-alih menggunakan di bawah, ambil yang terbaru dari GitHub
Untuk Versi:
# xcode-version-bump.sh # @desc Auto-increment the version number (only) when a project is archived for export. # @usage # 1. Select: your Target in Xcode # 2. Select: Build Phases Tab # 3. Select: Add Build Phase -> Add Run Script # 4. Paste code below in to new "Run Script" section # 5. Check the checkbox "Run script only when installing" # 6. Drag the "Run Script" below "Link Binaries With Libraries" # 7. Insure your starting version number is in SemVer format (e.g. 1.0.0) # This splits a two-decimal version string, such as "0.45.123", allowing us to increment the third position. VERSIONNUM=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}") NEWSUBVERSION=`echo $VERSIONNUM | awk -F "." '{print $3}'` NEWSUBVERSION=$(($NEWSUBVERSION + 1)) NEWVERSIONSTRING=`echo $VERSIONNUM | awk -F "." '{print $1 "." $2 ".'$NEWSUBVERSION'" }'` /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $NEWVERSIONSTRING" "${PROJECT_DIR}/${INFOPLIST_FILE}"
Untuk membangun:
# xcode-build-bump.sh # @desc Auto-increment the build number every time the project is run. # @usage # 1. Select: your Target in Xcode # 2. Select: Build Phases Tab # 3. Select: Add Build Phase -> Add Run Script # 4. Paste code below into new "Run Script" section # 5. Drag the "Run Script" below "Link Binaries With Libraries" # 6. Ensure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0) buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}") buildNumber=$(($buildNumber + 1)) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
sumber
Seluruh entri ini sangat membantu. Saya menggunakan trik ini tetapi menyiapkan skrip saya sebagai hook pasca-komit di GIT, jadi CFBundleVersion bertambah setelah setiap komit yang berhasil. Skrip hook masuk dalam .git / hooks. Sebuah log tertinggal di direktori proyek.
Ini memenuhi kriteria saya yang paling dasar. Saya ingin dapat menarik versi dari GIT dan membangun kembali bangunan yang sama seperti yang saya miliki sebelumnya. Setiap kenaikan yang dilakukan selama proses build tidak melakukan ini.
Ini skrip saya:
#!/bin/sh # # post-commit # # This script increments the CFBundleVersion for each successful commit # plist="./XYZZY/XYZZY-Info.plist" buildnum=$(/usr/libexec/Plistbuddy -c "Print CFBundleVersion" "$plist") if [ -z "$buildnum" ]; then exit 1 fi buildnumplus=$(expr $buildnum + 1) /usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnumplus" "$plist" echo $(date) "- Incremented CFBundleVersion to" $buildnumplus >> hookLog.txt
sumber
bump_build_number.sh
skrip sejak pembuatan.Saya tidak tahu cara mana yang terbaik, tetapi saya akan memposting jawaban Apple kalau-kalau ada yang mencarinya ...
Menurut posting Q&A Apple ini :
Mengotomatiskan Versi dan Bangun Nomor Menggunakan agvtool
Kunci nomor versi dan versi masing-masing menentukan versi pemasaran dan internal aplikasi Anda. agvtool adalah alat baris perintah yang memungkinkan Anda menaikkan angka-angka ini secara otomatis ke angka tertinggi berikutnya atau ke angka tertentu.
Nomor build mengidentifikasi versi aplikasi Anda yang belum atau sudah dirilis. Itu disimpan di Info.plist aplikasi Anda sebagai
CFBundleVersion
(versi Bundle).Anda harus menyelesaikan langkah-langkah berikut dalam proyek Xcode Anda:
Buka panel Pengaturan Build target Anda, lalu perbarui untuk semua konfigurasi build Anda sebagai berikut:
File data project Xcode Anda, project.pbxproj, menyertakan
CURRENT_PROJECT_VERSION
setelan build (Versi Project Saat Ini), yang menentukan versi project Anda saat ini. agvtool mencari project.pbxproj untukCURRENT_PROJECT_VERSION
. Itu terus berjalan jikaCURRENT_PROJECT_VERSION
ada dan berhenti berjalan, jika tidak. Nilainya digunakan untuk memperbarui nomor build.Secara default, Xcode tidak menggunakan sistem versi apa pun. Menyetel Sistem Versi ke Apple Generic memastikan bahwa Xcode akan menyertakan semua informasi versi yang dihasilkan agvtool dalam proyek Anda.
agvtool mencari Info.plist aplikasi Anda untuk versi dan nomor build. Itu memperbaruinya jika mereka ada dan tidak melakukan apa pun, sebaliknya. Pastikan bahwa kunci
CFBundleVersion
(versi Bundle) danCFBundleShortVersionString
(Bundle version string, short) ada di Info.plist Anda seperti yang terlihat pada gambar di bawah ini:Keluar dari Xcode, lalu buka direktori yang berisi file proyek .xcodeproj Anda di aplikasi Terminal sebelum menjalankan salah satu perintah berikut. File proyek .xcodeproj berisi project.pbxproj, yang digunakan oleh agvtool. (Ini adalah bagian yang dapat Anda jalankan dalam skrip alih-alih baris perintah.)
Memperbarui Nomor Versi
Untuk memperbarui nomor versi ke versi tertentu, jalankan
Contoh: Perbarui nomor versi ke 2.0
Memperbarui Nomor Build
Untuk menaikkan nomor build Anda secara otomatis, jalankan
Untuk menyetel nomor versi aplikasi Anda ke versi tertentu, jalankan
Contoh: Setel nomor build ke 2.6.9
Bonus:
Untuk melihat nomor versi saat ini, jalankan
Untuk melihat nomor build saat ini, jalankan
sumber
FWIW - inilah yang saat ini saya gunakan untuk meningkatkan jumlah build hanya untuk build rilis (yang mencakup pengarsipan). Bekerja dengan baik di bawah Xcode 5.1.
Cukup salin / tempel cuplikan ke fase pembuatan skrip Jalankan langsung di Xcode:
buildnum=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$PRODUCT_SETTINGS_PATH") if [ "$CONFIGURATION" = "Release" ]; then buildnum=$((buildnum + 1)) echo "Build number updated to $buildnum" /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildnum" "$PRODUCT_SETTINGS_PATH" fi;
sumber
Terima kasih untuk naskahnya. Ini bekerja dengan baik.
Info.plist saya berada dalam subdirektori dengan nama yang berisi spasi, jadi saya harus memodifikasi Run Script dengan tanda kutip di sekitar jalur plist:
${PROJECT_DIR}/tools/bump_build_number.sh "${PROJECT_DIR}/${INFOPLIST_FILE}"
dan skrip shell dengan cara yang sama dengan tanda kutip di semua jalur:
#!/bin/sh if [ $# -ne 1 ]; then echo usage: $0 plist-file exit 1 fi plist=$1 dir=$(dirname "$plist") # Only increment the build number if source files have changed if [ -n "$(find "$dir" \! -path "*xcuserdata*" \! -path "*.git" -newer "$plist")" ]; then buildnum=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$plist") if [ -z "$buildnum" ]; then echo "No build number in $plist" exit 2 fi buildnum=$(expr $buildnum + 1) /usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "$plist" echo "Incremented build number to $buildnum" else echo "Not incrementing build number as source files have not changed" fi
sumber
Skrip yang saat ini saya gunakan sangat banyak berdasarkan pada Alix , di atas. Adaptasi saya, di bawah, menambahkan centang untuk hanya melakukan penambahan otomatis pada rilis / pembuatan arsip.
Tanpa perubahan itu akan ada konflik kontrol versi karena setiap pengembang akan menaikkan nomor versi dengan kecepatan mereka sendiri. Dan fakta bahwa sejarah git akan tercemar secara tidak perlu dengan nomor build yang berubah sepanjang waktu.
# xcode-build-bump.sh # @desc Auto-increment Xcode target build number every time the project is archived # @src stackoverflow.com/a/15483906 # @usage # 1. Select: your Target in Xcode # 2. Select: Build Phases Tab # 3. Select: Add Build Phase -> Add Run Script # 4. Paste code below in to new "Run Script" section # 5. Drag the "Run Script" below "Link Binaries With Libraries" # 6. Insure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0) if [ "Release" != "${CONFIGURATION}" ] then exit 0 fi buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}") buildNumber=$(($buildNumber + 1)) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
Ini juga tersedia (dalam format yang sedikit lebih mudah untuk disalin dan ditempel) sebagai inti GitHub .
sumber
Saya akan merekomendasikan penggunaan autorevision .
Xcode memungkinkan file header (yang dapat dibuat secara otomatis pada waktu pembuatan dan bukan di vcs sendiri) untuk memberikan nilai yang akan diperluas di info.plist pada waktu pembuatan. Anda dapat menemukan panduan untuk menyiapkan ini di situs web autorevision .
Autorevision memiliki jenis keluaran yang diarahkan pada jenis file header ini untuk membantu dalam situasi ini.
sumber
Autorevision
tampaknya tidak menabrak nomor build, seperti yang diperlukan?VCS_NUM
seharusnya apa yang Anda cari ( lihatautorevision.h
contoh ).Satu masalah dengan beberapa solusi ini adalah bahwa Launch Services hanya mengenali
empatlima digit utama dalam versi bundel . Saya memiliki proyek dengan nomor build yang jumlahnya ribuan, jadi saya ingin menggunakan beberapa digit yang kurang signifikan.Skrip Perl ini menambah semua Info.plist dalam proyek, tidak hanya satu untuk target saat ini, jadi nomor build semua tetap terkunci. Ini juga menggunakan satu digit patch dan dua digit minor, jadi build 1234 diberikan versi 1.23.4. Saya menggunakannya sebagai perilaku pra-bangun, jadi ini berlaku untuk semua proyek yang saya bangun.
Skripnya cukup kasar, tetapi berhasil untuk saya.
#!/usr/bin/perl use strict; use warnings; use v5.12.0; use Dir::Iterate; for my $plist_file(grepdir { /-Info.plist$/ } '.') { my $build = `/usr/libexec/PlistBuddy -c "Print CFBundleVersion" '$plist_file'`; chomp $build; next unless $build; # Strip dots $build =~ s/\.//g; $build =~ s/^0//g; # Increment $build++; # Re-insert dots $build =~ s/^(\d{0,4}?) (\d{0,2}?) (\d{0,1}?)$/$1.$2.$3/x; # Insert zeroes $build =~ s{(^|\.)\.}{${1}0.}g; system qq(/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build" '$plist_file'); }
sumber
Anda dapat menggunakan versi generik Apple . Pada dasarnya yang harus Anda lakukan adalah memanggil
agvtool next-version -all
dari dalam direktori yang menampung file .xcproj Anda. Untuk lebih jelasnya lihat url di atas.sumber
Berdasarkan solusi Wil Gieseler , saya hanya memiliki satu perubahan yang ingin saya lakukan. Solusinya memasukkan hitungan git commit ke nomor build. Berguna, tetapi masih agak sulit untuk menemukan komitmen aktual yang menciptakan bangunan itu. Saya tidak terlalu peduli apakah nomor build meningkat secara monoton, jadi saya menghapus persyaratan itu sehingga saya dapat lebih mudah mengakses komit yang menghasilkan biner tertentu.
Untuk itu, saya memodifikasi skrip pertamanya menjadi berikut ini:
# Set the build number to the decimal conversion of the short version of the current git SHA # Get the short version of the current git SHA in hexadecimal SHA=$(git rev-parse --short @) # Uppercase any alphabetic chars in SHA (bc doesn't like lowercase hex numbers) UPPERCASE_SHA=$(tr '[:lower:]' '[:upper:]' <<< "$SHA") # Use bc to convert the uppercase SHA from hex to decimal BUILD_NUM=$(bc <<< "ibase=16;obase=A;$UPPERCASE_SHA") # Set our build number to that /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUM" "${PROJECT_DIR}/${INFOPLIST_FILE}" # To convert a build number back to a usable git SHA, run the following, substituting the build number for <build number> # bc <<< "ibase=10;obase=16;<build number>"
Ini mengubah versi singkat dari git SHA saat ini menjadi desimal. Karakter heksadesimal tidak cocok dengan persyaratan nomor build Apple, itulah sebabnya saya harus melakukan ini. Untuk mengubahnya kembali, Anda cukup menjalankan sesuatu seperti ini:
SHA=$(bc <<< "ibase=10;obase=16;<build number>")
di bash, di mana
<build number>
nomor build yang Anda dapatkan dari biner. Lalu, lari sajagit checkout $SHA
, dan itu dia.Karena ini merupakan adaptasi dari solusi Wil Gieseler , seperti yang disebutkan di atas, Anda juga memerlukan skrip pasca-pembuatan berikut:
# Set the build number to "DEVELOPMENT" /usr/libexec/PlistBuddy -c "Set :CFBundleVersion DEVELOPMENT" "${PROJECT_DIR}/${INFOPLIST_FILE}"
yang membuat riwayat git Anda bersih.
sumber
Info.plist
, yang dilacak oleh git?Saya mencoba prosedur yang dimodifikasi dan tidak berhasil, karena: -
Xcode 4.2.1 mengubah subdirektori xcuserdata di .xcodeproj
git mencatat perubahan sebelumnya di Project-Info.plist
Modifikasi berikut menyebabkan ini diabaikan dan hanya menandai perubahan asli: -
if [ -n "$(find $dir \! -path "*xcuserdata*" \! -path "*.git" -newer $plist)" ]; then
sumber
Anda mungkin ingin melakukan ini hanya ketika Anda mengarsipkan (dan mengunggah ke TF misalnya). Jika tidak, nomor versi Anda mungkin naik sangat cepat ..
Dalam skema (Produk / Edit Skema / Arsip / Pra-Tindakan) Anda dapat menambahkan skrip yang akan dijalankan hanya ketika Anda mengarsipkan.
Selain itu, Anda mungkin ingin menyetel ulang nomor versi setiap kali Anda menaikkan versi aplikasi.
Terakhir, jika Anda menggunakan arsip, Anda dapat menonaktifkannya dengan aman:
# if [ -n "$(find "$dir" \! -path "*xcuserdata*" \! -path "*.git" -newer "$plist")" ]; then ... # else # echo "Not incrementing build number as source files have not changed" # fi
Karena nomor build akan bertambah hanya saat Anda mengarsipkan ...
EDIT: Perbaiki apa yang saya katakan, tindakan awal dalam arsip terjadi setelah build (tetapi sebelum pengarsipan), jadi nomor build akan bertambah untuk arsip berikutnya ... Tetapi Anda dapat membuat skema baru dan menambahkan tindakan ini dalam build (pra- tindakan) dari skema baru ini. dan gunakan skema ini saat Anda ingin membuat build baru
sumber
Saya menggunakan revisi SVN terakhir untuk nomor build. Jika Anda mengubah Info.plist di direktori build, Anda tidak akan memengaruhi Info.plist sumber:
# use the last SVN revision as the build number: Info_plist="$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Info.plist" defaults write "${Info_plist}" CFBundleVersion `svn stat -u | awk '/'"Status against revision:"'/ {print $4}'`
sumber
Saya merasa seperti saya telah menemukan suku saya. Tribe, saya harap Anda terhibur dengan VersionX.
Satu dekade yang lalu saat mengerjakan ruang kerja yang memiliki lebih dari 25 proyek Xcode di dalamnya, saya mengambil kesempatan untuk mengotomatiskan versi dan membangun pembaruan string ke tingkat yang mungkin tampak tidak masuk akal, jika Anda hanya mempertahankan satu atau dua proyek dengan pembaruan sesekali.
VersionX:
Itu menyenangkan untuk dibuat. Saya belajar banyak tentang sistem build Xcode.
Berikut adalah contoh jenis string Versi dan Build yang canggih yang dapat dibuat oleh VersionX secara otomatis.
VersiX 1.0.1 β7 (c5959a3 "Bersih")
Versi Pemasaran: VersionX 1.0.1 β7 "1.0.1 diturunkan dari tag untuk komit, sedangkan" Beta 7 "secara otomatis dihasilkan oleh jumlah komit, atau jumlah versi (misalnya).
Versi Build: (c5959a3 “Clean”) Menampilkan hash komit singkat, dan memberi tahu Anda bahwa direktori build tidak memiliki perubahan yang belum dilakukan.
VersionX (sumber di GitHub) - sistem barok untuk menambahkan versi secara otomatis dan membangun string dalam proyek Xcode.
Dokumentasi VersionX.
sumber
Anda mungkin ingin memeriksa alat baru yang telah saya kembangkan bernama Xcodebump. Ini dapat menangani pembaruan CFBundleShortVersionString dan CFBundleVersion. Sebagai langkah terakhir, ini juga akan memeriksa git dan memberi tag pada komit untuk menyesuaikan dengan nilai CFBundle tersebut.
Itu Xcodebump terletak di sini:
https://github.com/markeissler/Xcodebump
sumber
Saya memperbarui
build number
dengan metode berikut.$INFO_FILE
adalah jalur dari file plist. Dan$build_number
merupakan nomor build baru untuk gedung ini./usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build_number" "${INFO_FILE}"
Umumnya, my
$build_number
terdiri darimajor
danminor
bagian. Iniminor
berasal dari informasi proyek. Jadi saya menjelaskan cara menghasilkanmajor
bagian tersebut.## Composed by `major` and `minor`. ## `minor` is parsed from project information. It's another story. ## Examples: `21.1`, or `21.1.3` build_number="${major_number}.${minor_number}"
Saya memiliki 2 strategi untuk memutuskan
$build_number
.Strategi Pertama
Strategi ini menggunakan
git tag
hitungan untuk memutuskanmajor
daribuild number
. Jika ada53
tag proyek, itu akan kembali53
dengan mengikuti skrip shell.Umumnya meningkat. Dan itu akan memaksa pengembang untuk meletakkan tag git sebelum menerbitkan.
major_number=$(git tag -l | wc -l | grep -oE "\d+")
Strategi Kedua
Biarkan sistem Jenkins CI yang menentukan
major
bagiannya. Ini memiliki variabel lingkunganBUILD_NUMBER
. Ini meningkat secara otomatis saat membangun di sistem CI. Informasi ini berguna untuk menelusuri riwayat proyek pada sistem CI.major_number=${BUILD_NUMBER}
sumber
Berikut versi yang diperbarui. Ini berfungsi pada Xcode 9.3.1, iOS 11.
Klik 'Build Phases' dari target aplikasi Anda, klik ikon + untuk menambahkan skrip proses baru, dan di dalam kotak, tempel kode ini.
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}") buildNumber=$(($buildNumber + 1)) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
Masuk ke file Info.plist dan atur 'Bundle version' menjadi 1, dan 'Bundle version string, short' to 1, Anda harus disetel.
Bangun proyek dengan Info.plist dalam tampilan, dan Anda akan melihat versi Bundle (nomor Build) berubah.
sumber
Inilah solusi saya. Jika Anda seperti saya: ramah terminal, seperti ruby, seperti pembuatan versi semantik, coba ini.
Buat file bernama
Rakefile
yang berisi ini:require "xcodeproj" require "versionomy" XCODEPROJECT = "MyProject.xcodeproj" INFOPLISTFILE = "MyProject/MyProject-Info.plist" $UPDATES = [:major,:minor,:tiny] $UPDATES.each { |part| desc "increment #{part} part of version" task "increment:#{part}" do |task| version=`/usr/libexec/Plistbuddy -c "Print CFBundleVersion" #{INFOPLISTFILE}`.chomp version=Versionomy.parse(version) version=version.bump(part) # I use the same string for CFBundleVersion and CFBundleShortVersionString for now `/usr/libexec/PlistBuddy -c "Set :CFBundleVersion #{version}" #{INFOPLISTFILE}` `/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString #{version}" #{INFOPLISTFILE}` print "version upgraded to #{version}\n" end }
Mempersiapkan:
gem install xcodeproj versionomy
Jalankan:
rake increment:major
ataurake increment:minor
ataurake increment:tiny
kapanpun Anda inginkan.sumber
Saya merasa paling nyaman menggunakan Automating Version dan Build Numbers Menggunakan agvtool .
Coba ini:
<your_app_target>
Skrip (baris pertama opsional):
exec > ${PROJECT_DIR}/prebuild.log 2>&1 cd ${PROJECT_DIR} xcrun agvtool next-version -all cd -
sumber
Mari lakukan ini dengan cara Apple sendiri. Ini akan meningkatkan nomor build setelah setiap build berhasil
Saya akan memandu Anda melalui 5 gambar, cukup lihat saja.
Pilih 'Edit Scheme ...' dari dropdown, saat Anda memilih nama Proyek Anda yang terletak di sisi kanan tombol Stop_build_button. Periksa Langkah Pertama
Dari menu leftSide perluas opsi 'Build' dan pilih 'Post-actions' Periksa Langkah Kedua
Di sini Anda dapat menambahkan Kode (Skrip) yang Anda inginkan yang ingin Anda jalankan setelah berhasil membangun program Anda. Ini adalah tempat di mana kita harus menambahkan sedikit kode untuk membuat otomatisasi kita bekerja dengan sempurna. >> 1. pilih tombol 'add (+)' dari pojok kiri untuk menambahkan file script baru >> 2. Sekarang dari drop down pilih 'New Run Script Action' Periksa Langkah Ketiga
Ini memiliki 3 bidang >> 1. shell sudah ditetapkan untuk Anda >> 2. sekarang untuk 'Berikan Anda membangun pengaturan dari' Pilih Nama Proyek Anda. >> 3. Ada bidang besar untuk menambahkan Script Anda, cukup salin dan tempel kode ini di sana: Periksa Langkah Keempat
PLIST = "$ {PROJECT_DIR} / $ {INFOPLIST_FILE}" PLB = / usr / libexec / PlistBuddy LAST_NUMBER = $ ($ PLB -c "Cetak CFBundleVersion" "$ PLIST") NEW_VERSION = $ (($ LAST_NUMBER + 1)) $ PLB -c "Set: CFBundleVersion $ NEW_VERSION" "$ PLIST"
Setelah menyelesaikan langkah ke-4 pilih saja 'Tutup' untuk menutup jendela dan kita harus melakukan langkah terakhir, Goto file 'plist.info' Anda di menu file Proyek dan pastikan tombol 'Versi Bundel' di bawah Bagian 'Kunci' paling banyak berisi Langkah Kelima Pemeriksaan Nilai Numerik
sumber