Build Number — είναι ένα μοναδικό αριθμητικό αναγνωριστικό της μεταγλώττισης μιας εφαρμογής για κινητά, το οποίο χρησιμεύει για την εσωτερική αναγνώριση εκδόσεων. Σε αντίθεση με το Version Name, αυτή η παράμετρος δεν εμφανίζεται στον χρήστη, αλλά είναι κρίσιμη για τα καταστήματα εφαρμογών. Σύμφωνα με τα δεδομένα των Android Developers, 2025, η σωστή χρήση του Build Number αποτρέπει συγκρούσεις κατά τη δημοσίευση ενημερώσεων.
Κύρια σημεία
Build Number — είναι ένα μοναδικό ακέραιο αναγνωριστικό που εκχωρείται σε κάθε μεταγλώττιση της εφαρμογής για κινητά. Τα καταστήματα εφαρμογών το χρησιμοποιούν για να προσδιορίσουν την καινούργια έκδοση — όσο μεγαλύτερος είναι ο αριθμός, τόσο νεότερη είναι η μεταγλώττιση.
Στο Android αυτή η παράμετρος ονομάζεται versionCode, στο iOS — CFBundleVersion. Και οι δύο παράμετροι είναι υποχρεωτικές για δημοσίευση και πρέπει να αυξάνονται μονότονα με κάθε νέα μεταγλώττιση.
Σύμφωνα με τα δεδομένα του Google Play Console Help (2025), το versionCode ελέγχεται σε κάθε μεταφόρτωση APK: εάν η μεταγλώττιση που μεταφορτώνεται έχει versionCode μικρότερο ή ίσο με αυτό που έχει ήδη δημοσιευτεί, το Google Play απορρίπτει το αρχείο με σφάλμα.
Χρησιμοποιήστε το Build Number για εσωτερική παρακολούθηση μεταγλωττίσεων — συνδέστε τον αριθμό με το commit hash στο σύστημα ελέγχου εκδόσεων για γρήγορη αναγνώριση μιας προβληματικής έκδοσης.
Build Number λύνει το πρόβλημα της μοναδικής αναγνώρισης κάθε μεταγλωττισμένης έκδοσης της εφαρμογής. Χωρίς αυτό, είναι αδύνατο να προσδιοριστεί ποια μεταγλώττιση είναι νεότερη εάν το Version Name δεν έχει αλλάξει.
Τα καταστήματα εφαρμογών, όπως το Google Play και το App Store, χρησιμοποιούν το Build Number για την επίλυση συγκρούσεων κατά την ενημέρωση. Εάν ο χρήστης εγκαθιστά μια νέα έκδοση πάνω από μια παλιά, το σύστημα συγκρίνει το Build Number και προσφέρει ενημέρωση μόνο εάν η τιμή είναι μεγαλύτερη.
Αυτός ο μηχανισμός είναι κρίσιμος για τη σωστή παράδοση ενημερώσεων: χωρίς μονότονα αυξανόμενο Build Number, οι χρήστες μπορεί να κολλήσουν σε μια παλιά έκδοση της εφαρμογής.
Build Number μπορεί να είναι ένας απλός διαδοχικός αριθμός (1, 2, 3...) ή σύνθετος, που κωδικοποιεί πρόσθετες πληροφορίες. Οι σύνθετοι αριθμοί συχνά περιλαμβάνουν την ημερομηνία μεταγλώττισης ή τον αριθμό μεταγλώττισης του συστήματος CI/CD.
Για Android το versionCode είναι ένας ακέραιος αριθμός τύπου int, μέγιστη τιμή — 2100000000. Για iOS το CFBundleVersion είναι μια συμβολοσειρά τριών αριθμών διαχωρισμένων με τελείες, κάθε ένας όχι μεγαλύτερος από 255.
Σύμφωνα με τα δεδομένα της Apple Developer (2025), το CFBundleVersion υποστηρίζει έως 3 στοιχεία, αλλά το App Store τα χρησιμοποιεί ως έναν ενιαίο αύξοντα αριθμό για σύγκριση εκδόσεων.
Στο Android το Build Number ορίζεται με την παράμετρο versionCode στο αρχείο build.gradle. Είναι ένας ακέραιος αριθμός που πρέπει να είναι μοναδικός για κάθε έκδοση της εφαρμογής που δημοσιεύεται στο Google Play.
Η παράμετρος δηλώνεται εντός του μπλοκ android.defaultConfig και πρέπει να αυξάνεται με κάθε νέα έκδοση. Το Google Play δεν επιτρέπει τη μεταφόρτωση APK με versionCode που έχει ήδη χρησιμοποιηθεί για άλλη έκδοση της ίδιας εφαρμογής.
Σύμφωνα με τα δεδομένα του Google Play Developer API (2025), η μέγιστη τιμή του versionCode είναι 2100000000. Συνιστάται να ξεκινάτε από το 1 και να αυξάνετε κατά 1 για κάθε νέα μεταγλώττιση για να αποφύγετε την εξάντληση του ορίου.
Χρησιμοποιήστε σύνθετο versionCode που κωδικοποιεί τον αριθμό έκδοσης: Major * 1000000 + Minor * 1000 + Patch — αυτό απλοποιεί την αντιστοίχιση με τη σημασιολογική έκδοση.
versionCode έχει αυστηρούς περιορισμούς: είναι ένας 32-bit ακέραιος αριθμός με πρόσημο, επομένως η μέγιστη τιμή είναι 2100000000. Όταν εξαντληθεί το όριο, η εφαρμογή δεν θα μπορεί να ενημερωθεί στο Google Play.
Για Android App Bundle, το versionCode καθορίζεται επίσης στη βασική μονάδα και κάθε μονάδα λειτουργίας μπορεί να έχει το δικό της versionCode. Το Google Play τα συνδυάζει σε ένα ενιαίο σύστημα επαλήθευσης.
Αυτός ο περιορισμός είναι σημαντικό να λαμβάνεται υπόψη κατά την επιλογή στρατηγικής έκδοσης — η πολύ γρήγορη αύξηση του αριθμού μπορεί να οδηγήσει σε προβλήματα μακροπρόθεσμα.
Στο iOS το Build Number ορίζεται με το κλειδί CFBundleVersion στο αρχείο Info.plist. Σε αντίθεση με το Android, αυτή η παράμετρος είναι μια συμβολοσειρά, αλλά επίσης πρέπει να αυξάνεται με κάθε νέα μεταγλώττιση.
Η μορφή του CFBundleVersion — από έναν έως τρεις αριθμούς διαχωρισμένους με τελείες. Κάθε αριθμός δεν μπορεί να υπερβαίνει το 255. Το App Store ερμηνεύει τη συμβολοσειρά ως ακολουθία αριθμών για σύγκριση: το 1.0.1 θεωρείται νεότερο από το 1.0.0.
Σύμφωνα με τα δεδομένα του Apple Developer Documentation (2025), το App Store Connect απαιτεί μοναδικότητα του CFBundleVersion για κάθε μεταφόρτωση μεταγλώττισης. Εάν μεταφορτωθεί μια μεταγλώττιση με ήδη χρησιμοποιημένο αριθμό, το σύστημα θα την απορρίψει.
Διαχειριστείτε το CFBundleVersion μέσω agvtool ή σεναρίων μεταγλώττισης Xcode για να εγγυηθείτε μονότονη αύξηση του αριθμού σε κάθε μεταγλώττιση.
Xcode επιτρέπει τη διαχείριση του CFBundleVersion μέσω των ρυθμίσεων Build Settings. Το πεδίο “Current Project Version” ορίζει τη βασική τιμή και τα σενάρια Build Phase μπορούν να την αυξάνουν αυτόματα.
Για CI/CD χρησιμοποιήστε το πρόσθετο fastlane increment_build_number, το οποίο διαβάζει την τρέχουσα έκδοση από το Info.plist και την αυξάνει κατά μια δεδομένη τιμή. Αυτό εγγυάται τη μοναδικότητα κάθε μεταγλώττισης.
Αυτή η προσέγγιση αυτοματοποιεί πλήρως τη διαχείριση του Build Number και εξαλείφει τα ανθρώπινα σφάλματα κατά την προετοιμασία μιας έκδοσης.
Αυτόματη αύξηση του Build Number είναι κοινή πρακτική σε σύγχρονους αγωγούς CI/CD. Η χειροκίνητη αύξηση του αριθμού μεταγλώττισης οδηγεί σε σφάλματα και συγκρούσεις κατά τη δημοσίευση.
GitHub Actions, GitLab CI και Jenkins παρέχουν ενσωματωμένες μεταβλητές με τον αριθμό μεταγλώττισης. Αυτές οι μεταβλητές χρησιμοποιούνται σε σενάρια Gradle ή Xcode για αυτόματη αντικατάσταση του Build Number.
Σύμφωνα με τα δεδομένα του GitLab CI Documentation (2025), η μεταβλητή CI_PIPELINE_IID εγγυάται έναν μοναδικό αριθμό για κάθε αγωγό, ο οποίος είναι ιδανικός για χρήση ως Build Number.
Διαμορφώστε την αυτόματη αύξηση σε επίπεδο CI/CD — αυτό θα εξαλείψει την ανάγκη χειροκίνητης αλλαγής του Build Number σε κάθε commit στον κλάδο έκδοσης.
GitHub Actions υποστηρίζει την ενσωματωμένη μεταβλητή run_number, η οποία αυξάνεται αυτόματα για κάθε εκτέλεση αγωγού. Η τιμή μπορεί να μεταβιβαστεί στο Gradle μέσω versionCode.
Jenkins χρησιμοποιεί τη μεταβλητή BUILD_NUMBER, η οποία είναι διαθέσιμη σε όλα τα στάδια μεταγλώττισης. Για έργα Xcode, το Jenkins εκτελεί το agvtool με αυτόν τον αριθμό.
Επιλέξτε το εργαλείο που είναι ενσωματωμένο στη στοίβα τεχνολογίας σας για να ελαχιστοποιήσετε την πρόσθετη διαμόρφωση.
Build Number και Version Name λειτουργούν ως ζεύγος: το πρώτο — για μηχανές, το δεύτερο — για ανθρώπους. Το Build Number παρέχει τεχνική μοναδικότητα, το Version Name — σημασιολογία κατανοητή από τον χρήστη.
Στο Android αυτές οι δύο παράμετροι είναι ανεξάρτητες: το versionCode μπορεί να αυξηθεί χωρίς αλλαγή του versionName (για παράδειγμα, για διόρθωση σφάλματος μεταγλώττισης). Στο iOS, το CFBundleVersion επίσης δεν συνδέεται με το CFBundleShortVersionString.
Σύμφωνα με τα δεδομένα του Stack Overflow Developer Survey (2024), το 82% των ομάδων χρησιμοποιεί αυτόματη αύξηση του Build Number, αλλά μόνο το 45% αυτοματοποιεί την ενημέρωση του Version Name — αυτή είναι μια από τις συχνές αιτίες σφαλμάτων κατά την έκδοση.
Αυξάνετε πάντα το Build Number σε κάθε μεταγλώττιση, ακόμη και αν το Version Name δεν αλλάζει — αυτό εγγυάται τη σωστή λειτουργία του μηχανισμού ενημέρωσης στα καταστήματα εφαρμογών.
Ξεκινήστε το versionCode από το 1 και αυξήστε κατά 1 για κάθε μεταγλώττιση. Για iOS χρησιμοποιήστε ανάλογη προσέγγιση με το CFBundleVersion. Αποφύγετε σύνθετους αριθμούς εάν δεν υπάρχει αυστηρή ανάγκη — ένας απλός διαδοχικός αριθμός είναι ευκολότερο να παρακολουθηθεί.
Συνδέστε το Build Number με τον αριθμό μεταγλώττισης του συστήματος CI/CD — αυτό απλοποιεί την ανίχνευση από το σφάλμα στο συγκεκριμένο commit. Το Git tag με τον αριθμό μεταγλώττισης και την έκδοση είναι η βέλτιστη πρακτική για τον έλεγχο εκδόσεων.
Παραδείγματα κώδικα δείχνουν πώς να ρυθμίσετε την αυτόματη αύξηση του Build Number και στις δύο πλατφόρμες.
Στο Android το versionCode μπορεί να οριστεί μέσω μιας μεταβλητής περιβάλλοντος CI/CD. Εάν η μεταβλητή δεν έχει οριστεί, χρησιμοποιείται η προεπιλεγμένη τιμή.
android {
defaultConfig {
versionCode System.getenv("CI_PIPELINE_ID")?.toInteger() ?: 1
versionName "1.2.0"
}
}
versionCode λαμβάνει την τιμή από τη μεταβλητή CI/CD, η οποία εγγυάται τη μοναδικότητα του αριθμού για κάθε μεταγλώττιση στον αγωγό.
Στο iOS για αυτόματη αύξηση του Build Number χρησιμοποιείται το agvtool, το οποίο είναι ενσωματωμένο στα Xcode Command Line Tools.
# Αύξηση του αριθμού build κατά 1
xcrun agvtool next-version -all
# Ορισμός συγκεκριμένου αριθμού build
xcrun agvtool new-version -all "3.0.1"
Η σημαία -all ενημερώνει την έκδοση σε όλους τους στόχους του έργου, η οποία εγγυάται τον συγχρονισμό των τιμών μεταξύ της κύριας εφαρμογής και των επεκτάσεων.
Fastlane — δημοφιλές εργαλείο για αυτοματισμό μεταγλώττισης εφαρμογών για κινητά. Το πρόσθετο increment_build_number αυξάνει αυτόματα το Build Number.
increment_build_number(
build_number: ENV["BUILD_NUMBER"] ||
latest_testflight_build_number + 1
)
Fastlane ενσωματώνεται με οποιοδήποτε σύστημα CI/CD και υποστηρίζει τόσο έργα Android όσο και iOS.
Συχνές ερωτήσεις
Το κατάστημα εφαρμογών θα απορρίψει τη μεταφόρτωση. Το Google Play και το App Store ελέγχουν εάν το Build Number της νέας μεταγλώττισης είναι μεγαλύτερο από αυτό της προηγούμενης δημοσιευμένης έκδοσης. Εάν η συνθήκη δεν ικανοποιείται, η μεταφόρτωση θα απορριφθεί.
Μόνο για νέα εφαρμογή. Μετά την πρώτη δημοσίευση, το Build Number μπορεί μόνο να αυξάνεται. Η επαναφορά στο 1 θα οδηγήσει σε σφάλμα “versionCode already exists” κατά την προσπάθεια δημοσίευσης μιας νέας έκδοσης.
2100000000 — η μέγιστη τιμή για versionCode στο Android, καθώς είναι ένας 32-bit ακέραιος αριθμός με πρόσημο. Με λογική αύξηση κατά 1 ανά μεταγλώττιση, το όριο επαρκεί για δισεκατομμύρια builds.
CFBundleVersion — ο εσωτερικός αριθμός μεταγλώττισης που πρέπει να αυξάνεται με κάθε build. CFBundleShortVersionString — η έκδοση χρήστη που εμφανίζεται στο App Store. Το πρώτο — για μηχανές, το δεύτερο — για ανθρώπους.
Ναι, υποχρεωτικά. Το TestFlight επίσης απαιτεί κάθε μεταφόρτωση μεταγλώττισης να έχει μοναδικό Build Number. Εάν ο αριθμός δεν αυξηθεί, το TestFlight θα απορρίψει τη μεταφόρτωση.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης