Build Number — คืออะไร ค่าพารามิเตอร์และการเพิ่ม

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-04-18 เวลาอ่าน: 8 นาที

Build Number คือตัวระบุตัวเลขเฉพาะของบิลด์แอปพลิเคชันมือถือที่ใช้สำหรับการระบุเวอร์ชันภายใน ซึ่งแตกต่างจาก Version Name พารามิเตอร์นี้จะไม่แสดงให้ผู้ใช้เห็น แต่มีความสำคัญอย่างยิ่งต่อร้านค้าแอป ตาม Android Developers, 2025 การใช้ Build Number อย่างถูกต้องจะป้องกันความขัดแย้งเมื่อเผยแพร่อัปเดต

ประเด็นสำคัญ

  • Build Number — ตัวระบุตัวเลขของแต่ละบิลด์ ใช้สำหรับการติดตามเวอร์ชันภายใน
  • ใน Android ตั้งค่าด้วยพารามิเตอร์ versionCode ใน build.gradle ใน iOS — CFBundleVersion ใน Info.plist
  • Build Number ต้องเพิ่มขึ้น ทุกครั้งที่มีบิลด์ใหม่ — ร้านค้าแอปตรวจสอบเงื่อนไขนี้
  • ซึ่งแตกต่างจาก Version Name Build Number จะไม่แสดง ให้ผู้ใช้เห็นใน Google Play และ App Store
  • การเพิ่มอัตโนมัติ ของ Build Number ผ่าน CI/CD ช่วยขจัดข้อผิดพลาดหมายเลขบิลด์ซ้ำ

Build Number คืออะไร

Build Number คือตัวระบุจำนวนเต็มเฉพาะที่กำหนดให้กับแต่ละบิลด์ของแอปพลิเคชันมือถือ ร้านค้าแอปใช้มันเพื่อกำหนดความใหม่ของเวอร์ชัน — ยิ่งตัวเลขมากเท่าไหร่ บิลด์ยิ่งใหม่เท่านั้น

ใน Android พารามิเตอร์นี้เรียกว่า versionCode ใน iOS — CFBundleVersion พารามิเตอร์ทั้งสองจำเป็นสำหรับการเผยแพร่และต้องเพิ่มขึ้นอย่างซ้ำซากจำเจทุกครั้งที่มีบิลด์ใหม่

ตาม Google Play Console Help (2025) versionCode จะถูกตรวจสอบทุกครั้งที่อัปโหลด APK: หากอัปโหลดบิลด์ที่มี versionCode น้อยกว่าหรือเท่ากับเวอร์ชันที่เผยแพร่แล้ว Google Play จะปฏิเสธไฟล์พร้อมข้อผิดพลาด

ใช้ Build Number สำหรับการติดตามบิลด์ภายใน — เชื่อมโยงหมายเลขกับ commit hash ในระบบควบคุมเวอร์ชันของคุณเพื่อระบุรีลีสที่มีปัญหาได้อย่างรวดเร็ว

ทำไมต้องใช้ Build Number

Build Number แก้ปัญหาการระบุเวอร์ชันแอปพลิเคชันที่สร้างขึ้นแต่ละเวอร์ชันอย่างชัดเจน หากไม่มีมัน จะไม่สามารถระบุได้ว่าบิลด์ใดใหม่กว่าหาก Version Name ไม่เปลี่ยนแปลง

ร้านค้าแอปเช่น Google Play และ App Store ใช้ Build Number เพื่อแก้ไขความขัดแย้งระหว่างการอัปเดต เมื่อผู้ใช้ติดตั้งเวอร์ชันใหม่ทับเวอร์ชันเก่า ระบบจะเปรียบเทียบ 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 ใช้เป็นหมายเลขลำดับเดียวสำหรับการเปรียบเทียบเวอร์ชัน

Build Number บน Android

บน 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 ใน Android

versionCode มีข้อจำกัดที่เข้มงวด: มันเป็นจำนวนเต็มมีเครื่องหมาย 32 บิต ดังนั้นค่าสูงสุดคือ 2100000000 หากขีดจำกัดหมด จะไม่สามารถอัปเดตแอปพลิเคชันบน Google Play ได้

สำหรับ Android App Bundle versionCode ยังถูกระบุในโมดูลฐาน และแต่ละโมดูลคุณสมบัติสามารถมี versionCode ของตัวเอง Google Play รวมเข้าด้วยกันเป็นระบบตรวจสอบเดียว

ข้อจำกัดนี้สำคัญที่ต้องพิจารณาเมื่อเลือกกลยุทธ์การกำหนดเวอร์ชัน — การเพิ่มจำนวนที่เร็วเกินไปอาจนำไปสู่ปัญหาในระยะยาว

Build Number บน iOS

บน 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 Build Settings

Xcode อนุญาตให้จัดการ CFBundleVersion ผ่าน Build Settings ฟิลด์ “Current Project Version” กำหนดค่าพื้นฐาน และสคริปต์ Build Phase สามารถเพิ่มได้โดยอัตโนมัติ

สำหรับ CI/CD ให้ใช้ปลั๊กอิน fastlane increment_build_number ซึ่งอ่านเวอร์ชันปัจจุบันจาก Info.plist และเพิ่มตามค่าที่ระบุ ซึ่งรับประกันความไม่ซ้ำกันของแต่ละบิลด์

แนวทางนี้ทำให้การจัดการ Build Number เป็นอัตโนมัติอย่างสมบูรณ์และขจัดข้อผิดพลาดของมนุษย์ระหว่างการเตรียมรีลีส

การเพิ่ม 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 ด้วยตนเองทุกครั้งที่คอมมิตไปยังสาขารีลีส

เครื่องมืออัตโนมัติยอดนิยม

GitHub Actions รองรับตัวแปรในตัว run_number ซึ่งเพิ่มขึ้นโดยอัตโนมัติทุกครั้งที่รันไปป์ไลน์ ค่าสามารถส่งต่อไปยัง Gradle ผ่าน versionCode

Jenkins ใช้ตัวแปร BUILD_NUMBER ซึ่งพร้อมใช้งานในทุกขั้นตอนบิลด์ สำหรับโปรเจกต์ Xcode Jenkins จะรัน agvtool ด้วยหมายเลขนี้

เลือก เครื่องมือที่รวมเข้ากับสแต็กของคุณเพื่อลดการกำหนดค่าเพิ่มเติม

Build Number และ Version Name

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 จะไม่เปลี่ยนแปลง — ซึ่งรับประกันการทำงานที่ถูกต้องของกลไกอัปเดตในร้านค้าแอป

แนวทางปฏิบัติที่ดีที่สุดสำหรับ Build Number

เริ่ม versionCode ที่ 1 และเพิ่มครั้งละ 1 สำหรับแต่ละบิลด์ สำหรับ iOS ให้ใช้แนวทางเดียวกันกับ CFBundleVersion หลีกเลี่ยงหมายเลขประกอบหากไม่จำเป็นอย่างยิ่ง — หมายเลขลำดับอย่างง่ายติดตามได้ง่ายกว่า

เชื่อมโยง Build Number กับหมายเลขบิลด์ของระบบ CI/CD — ซึ่งช่วยให้การติดตามจากข้อผิดพลาดไปยังคอมมิตเฉพาะง่ายขึ้น Git tag พร้อมหมายเลขบิลด์และเวอร์ชันเป็นแนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดการรีลีส

ตัวอย่างการกำหนดค่า Build Number

ตัวอย่างโค้ด แสดงวิธีการกำหนดค่าการเพิ่ม Build Number อัตโนมัติบนทั้งสองแพลตฟอร์ม

versionCode ใน Gradle พร้อมตัวแปร CI

ใน Android versionCode สามารถกำหนดผ่านตัวแปรสภาพแวดล้อม CI/CD หากไม่ได้ตั้งค่าตัวแปร จะใช้ค่าดีฟอลต์

groovy
android {
    defaultConfig {
        versionCode System.getenv("CI_PIPELINE_ID")?.toInteger() ?: 1
        versionName "1.2.0"
    }
}

versionCode ได้รับค่าจากตัวแปร CI/CD ซึ่งรับประกันความไม่ซ้ำกันของหมายเลขสำหรับแต่ละบิลด์ในไปป์ไลน์

การเพิ่ม CFBundleVersion ผ่าน agvtool

ใน iOS ใช้ agvtool ซึ่งรวมอยู่ใน Xcode Command Line Tools สำหรับการเพิ่ม Build Number อัตโนมัติ

bash
# เพิ่มหมายเลขบิลด์ขึ้น 1
xcrun agvtool next-version -all

# กำหนดหมายเลขบิลด์เฉพาะ
xcrun agvtool new-version -all "3.0.1"

แฟล็ก -all อัปเดตเวอร์ชันในทุกเป้าหมายของโปรเจกต์ ซึ่งรับประกันการซิงค์ค่าระหว่างแอปพลิเคชันหลักและส่วนขยาย

Fastlane สำหรับอัตโนมัติ

Fastlane เป็นเครื่องมือยอดนิยมสำหรับทำให้บิลด์แอปพลิเคชันมือถือเป็นอัตโนมัติ ปลั๊กอิน increment_build_number จะเพิ่ม Build Number โดยอัตโนมัติ

ruby
increment_build_number(
    build_number: ENV["BUILD_NUMBER"] ||
                 latest_testflight_build_number + 1
)

Fastlane รวมเข้ากับระบบ CI/CD ใดๆ และรองรับทั้งโปรเจกต์ Android และ iOS

คำถามที่พบบ่อย

จะเกิดอะไรขึ้นหากไม่เพิ่ม Build Number?

ร้านค้าแอป จะปฏิเสธการอัปโหลด Google Play และ App Store ตรวจสอบว่า Build Number ของบิลด์ใหม่มากกว่าเวอร์ชันที่เผยแพร่ก่อนหน้านี้ หากไม่เป็นไปตามเงื่อนไข การอัปโหลดจะถูกปฏิเสธ

สามารถรีเซ็ต Build Number เป็น 1 ได้หรือไม่?

เฉพาะแอปพลิเคชันใหม่เท่านั้น หลังจากการเผยแพร่ครั้งแรก Build Number ต้องเพิ่มขึ้นเท่านั้น การรีเซ็ตเป็น 1 จะทำให้เกิดข้อผิดพลาด “versionCode already exists” เมื่อพยายามเผยแพร่เวอร์ชันใหม่

Build Number สูงสุดใน Android คือเท่าไหร่?

2100000000 คือค่าสูงสุดสำหรับ versionCode ใน Android เนื่องจากเป็นจำนวนเต็มมีเครื่องหมาย 32 บิต ด้วยการเพิ่มที่เหมาะสมครั้งละ 1 ต่อบิลด์ ขีดจำกัดจะเพียงพอสำหรับบิลด์นับพันล้าน

CFBundleVersion แตกต่างจาก CFBundleShortVersionString อย่างไร?

CFBundleVersion คือหมายเลขบิลด์ภายในที่ต้องเพิ่มขึ้นทุกครั้งที่มีบิลด์ CFBundleShortVersionString คือเวอร์ชันที่ผู้ใช้เห็นซึ่งแสดงใน App Store อย่างแรกสำหรับเครื่องจักร อย่างที่สองสำหรับมนุษย์

จำเป็นต้องเพิ่ม Build Number สำหรับบิลด์ทดสอบหรือไม่?

ใช่ จำเป็นอย่างยิ่ง TestFlight ก็ต้องการให้แต่ละบิลด์ที่อัปโหลดมี Build Number ที่ไม่ซ้ำกัน หากไม่ได้เพิ่มหมายเลข TestFlight จะปฏิเสธการอัปโหลด

สรุป

  • Build Number เป็นตัวระบุบิลด์ตัวเลขภายใน ซึ่งจำเป็นสำหรับการเผยแพร่บน Google Play และ App Store
  • บน Android ใช้ versionCode (จำนวนเต็ม) บน iOS — CFBundleVersion (สตริงสูงสุด 3 องค์ประกอบ)
  • หมายเลขบิลด์ ต้องเพิ่มขึ้นอย่างซ้ำซากจำเจ — ร้านค้าปฏิเสธบิลด์ที่ไม่ได้เพิ่ม Build Number
  • การเพิ่มอัตโนมัติ ผ่าน CI/CD ขจัดข้อผิดพลาดและรับประกันความไม่ซ้ำกันของแต่ละบิลด์
  • Build Number เป็นอิสระจาก Version Name — สามารถเพิ่มได้โดยไม่ต้องเปลี่ยนเวอร์ชันที่ผู้ใช้เห็น
  • สำหรับ Android ใช้ ตัวแปร CI/CD ใน Gradle สำหรับ iOS — agvtool หรือ fastlane
  • versionCode สูงสุด ใน Android คือ 2100000000, CFBundleVersion — สูงสุด 255 สำหรับแต่ละองค์ประกอบทั้งสาม

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม