Version Name คือสตริงเวอร์ชันของแอปพลิเคชันที่ผู้ใช้เห็นในร้านค้าและบนอุปกรณ์ แตกต่างจาก Build Number พารามิเตอร์นี้มีความหมายเชิงความหมายและสะท้อนถึงความสำคัญของการเปลี่ยนแปลง ตาม Android Developers, 2025 การใช้ Version Name อย่างถูกต้องช่วยให้ผู้ใช้เข้าใจความเกี่ยวข้องของการอัปเดตและไว้วางใจกระบวนการพัฒนา
ประเด็นสำคัญ
Version Name คือสตริงเชิงความหมายที่ระบุรุ่นเผยแพร่ของแอปพลิเคชันสำหรับผู้ใช้ แตกต่างจากตัวระบุทางเทคนิคของบิลด์ พารามิเตอร์นี้มีข้อมูลที่มีความหมาย: ผู้ใช้สามารถประเมินได้ว่าการอัปเดตใหม่แตกต่างจากรุ่นก่อนหน้ามากน้อยเพียงใด
Version Name จะแสดงในการ์ดแอปพลิเคชันบน Google Play และ App Store ในส่วน “เกี่ยวกับแอป” บนอุปกรณ์ และในกล่องโต้ตอบการอัปเดตระบบ นักพัฒนาจะระบุในไฟล์กำหนดค่าโครงการก่อนสร้างรุ่นเผยแพร่
ตาม Semantic Versioning 2.0 (2023) รูปแบบ Major.Minor.Patch ถูกใช้ใน 78% ของแอปพลิเคชันมือถือ เวอร์ชันหลักเปลี่ยนแปลงเมื่อมีการเปลี่ยนแปลง API ที่ไม่เข้ากัน เวอร์ชันรองเมื่อเพิ่มฟังก์ชันการทำงาน และแพตช์เมื่อแก้ไขข้อบกพร่อง
ใช้ Version Name เพื่อสื่อสารกับผู้ใช้: พวกเขาควรเข้าใจทันทีว่าการอัปเดตที่นำเสนอมีความสำคัญมากน้อยเพียงใด — หลัก รอง หรือแก้ไข
เวอร์ชันเชิงความหมาย ประกอบด้วยตัวเลขสามตัวคั่นด้วยจุด: Major.Minor.Patch แต่ละองค์ประกอบเหล่านี้รับผิดชอบการเปลี่ยนแปลงในระดับที่แตกต่างกันในแอปพลิเคชัน
เวอร์ชันหลัก (Major) เพิ่มขึ้นเมื่อมีการเปลี่ยนแปลงครั้งใหญ่ที่ทำลายความเข้ากันได้ย้อนหลัง เวอร์ชันรอง (Minor) เพิ่มฟังก์ชันการทำงานใหม่โดยไม่ทำลายฟังก์ชันที่มีอยู่ แพตช์ (Patch) มีเฉพาะการแก้ไขข้อบกพร่อง
ตัวอย่างเช่น เวอร์ชัน 3.2.1 หมายถึง: เวอร์ชันหลักที่สาม การอัปเดตรองที่สอง แพตช์แรก ระบบนี้เข้าใจได้ทั้งสำหรับนักพัฒนาและผู้ใช้
Version Name แสดงให้ผู้ใช้เห็นในหลายตำแหน่งสำคัญ ในร้านค้าแอป จะปรากฏในหัวข้อการ์ดแอปพลิเคชันและในรายการอัปเดต บนอุปกรณ์ จะปรากฏในการตั้งค่าระบบในส่วน “เกี่ยวกับแอป”
บน Google Play Version Name จะแสดงใต้ชื่อแอปพลิเคชันและมีผลต่อการตัดสินใจของผู้ใช้ในการอัปเดต ใน App Store สตริงเวอร์ชันจะแสดงในตำแหน่งเดียวกันเมื่อดูหน้าแอปพลิเคชัน
จากการวิจัยของ Apptentive (2024) ผู้ใช้ 67% ตรวจสอบเวอร์ชันแอปก่อนอัปเดต และความหมายที่ชัดเจนช่วยเพิ่มอัตราการแปลงการติดตั้งถึง 23%
บน Android Version Name กำหนดด้วยพารามิเตอร์ versionName ในไฟล์ build.gradle (ระดับโมดูล) พารามิเตอร์นี้เป็นสตริงและสามารถมีอักขระใดก็ได้ รวมถึงจุด ยัติภังค์ และตัวอักษร
พารามิเตอร์ถูกประกาศภายในบล็อก android.defaultConfig พร้อมกับพารามิเตอร์บังคับ versionCode Android ไม่จำกัดรูปแบบสตริง แต่ Google Play แนะนำให้ใช้ รูปแบบเชิงความหมาย
ตาม Android Developers (2025) Google Play ใช้ versionName สำหรับแสดงผลในอินเทอร์เฟซร้านค้าแต่ไม่ได้วิเคราะห์เนื้อหาโดยทางโปรแกรม — มีเพียง versionCode เท่านั้นที่ส่งผลต่อตรรกะการอัปเดต
ระบุ Version Name ในรูปแบบ Major.Minor.Patch และซิงโครไนซ์กับแท็กในระบบควบคุมเวอร์ชันเพื่อระบุรุ่นเผยแพร่ได้อย่างชัดเจน
Gradle อนุญาตให้กำหนด versionName แบบคงที่ใน build.gradle หรือแบบไดนามิกผ่านสคริปต์บิลด์ การสร้างแบบไดนามิกมีประโยชน์สำหรับบิลด์อัตโนมัติข้ามคืนและไปป์ไลน์ CI/CD
ใน build.gradle คุณสามารถใช้ตัวแปรสภาพแวดล้อม พารามิเตอร์บรรทัดคำสั่ง หรือการเรียกสคริปต์เชลล์เพื่อสร้าง versionName วิธีการทั่วไปคือการอ่านเวอร์ชันจากไฟล์ version.properties
ความยืดหยุ่น นี้ช่วยให้ทีมสามารถทำให้กระบวนการกำหนดเวอร์ชันเป็นอัตโนมัติและกำจัดข้อผิดพลาดของมนุษย์ในระหว่างการเตรียมเผยแพร่
บน iOS Version Name กำหนดด้วยคีย์ CFBundleShortVersionString ในไฟล์ Info.plist นี่คือพารามิเตอร์บังคับสำหรับการเผยแพร่แอปบน App Store และถูกกำหนดชนิดเป็นสตริงอย่างเคร่งครัด
แตกต่างจาก Android App Store Connect ตรวจสอบรูปแบบของ Version Name และกำหนดให้ตรงกับรูปแบบของตัวเลขที่คั่นด้วยจุด ความยาวสตริงสูงสุดคือ 18 อักขระ และแต่ละองค์ประกอบของเวอร์ชันต้องไม่เกิน 255
ตาม เอกสารสำหรับนักพัฒนา Apple (2025) CFBundleShortVersionString ถูกใช้โดย App Store เพื่อแสดงเวอร์ชันในอินเทอร์เฟซร้านค้าและในกล่องโต้ตอบระบบบนอุปกรณ์ของผู้ใช้
เมื่ออัปโหลดบิลด์ไปยัง App Store Connect ตรวจสอบให้แน่ใจว่า Version Name ตรงกับเวอร์ชันที่ระบุในเอกสารการตลาด — ซึ่งช่วยให้การสื่อสารกับผู้ใช้งาน่ายขึ้น
Xcode มีอินเทอร์เฟซกราฟิกสำหรับเปลี่ยน Version Name ในการตั้งค่าเป้าหมาย ฟิลด์ “Marketing Version” อยู่ในแท็บ General ภายใต้ส่วน Identity การเปลี่ยนแปลงจะถูกบันทึกไปยัง Info.plist โดยอัตโนมัติ
สำหรับ ระบบอัตโนมัติ คุณสามารถใช้สคริปต์บิลด์ใน Xcode Build Phases หรือยูทิลิตี้ agvtool (Apple Generic Version Tool) agvtool ช่วยให้จัดการเวอร์ชันจากบรรทัดคำสั่งและรวมเข้ากับ CI/CD
วิธีการนี้ สะดวกเป็นพิเศษเมื่อใช้ fastlane หรือ Jenkins สำหรับการบิลด์และการส่งมอบแอปพลิเคชันอัตโนมัติ
Version Name และ Build Number ทำหน้าที่ต่างกันในกระบวนการพัฒนา Version Name เป็นสตริงที่ผู้ใช้เห็น ในขณะที่ Build Number เป็นตัวระบุตัวเลขภายในที่ระบุแต่ละบิลด์โดยไม่ซ้ำกัน
Build Number (versionCode บน Android, CFBundleVersion บน iOS) ต้องเพิ่มขึ้น ทุกครั้งที่มีบิลด์ใหม่ และร้านค้าแอปใช้เพื่อกำหนดว่าเวอร์ชันใดใหม่กว่า Version Name สามารถคงเดิมได้ในหลายบิลด์ของเวอร์ชันเดียวกัน
ตาม นโยบาย Google Play (2025) แอปสองแอปที่มี versionCode เดียวกันถือเป็นเวอร์ชันเดียวกัน — versionCode ต้องไม่ซ้ำกันสำหรับแต่ละ APK Version Name ไม่มีส่วนร่วมในการตรวจสอบนี้
เพิ่ม Build Number ทุกครั้งที่มีบิลด์ใหม่และเปลี่ยน Version Name เฉพาะเมื่อฟังก์ชันการทำงานเปลี่ยน — ซึ่งป้องกันความขัดแย้งระหว่างการเผยแพร่
การเลือก Version Name ขึ้นอยู่กับกลยุทธ์การกำหนดเวอร์ชันของทีม วิธีการที่พบมากที่สุดคือการกำหนดเวอร์ชันเชิงความหมาย (SemVer) แต่มีรูปแบบทางเลือกอื่น เช่น การกำหนดเวอร์ชันตามปฏิทินหรือตามวันที่เผยแพร่
Semantic Versioning 2.0 แนะนำรูปแบบ Major.Minor.Patch พร้อมส่วนต่อท้ายก่อนเผยแพร่เพิ่มเติม สำหรับแอปมือถือ รูปแบบ Major.Minor ก็เป็นที่นิยมเช่นกัน โดยละเว้นเวอร์ชันแพตช์เพื่อลดความซับซ้อน
การกำหนดเวอร์ชันตามปฏิทิน (CalVer) ใช้ วันที่เผยแพร่ เป็นหมายเลขเวอร์ชัน — เช่น 25.06 (ปีและเดือน) วิธีการนี้สะดวกสำหรับแอปที่มีการเผยแพร่บ่อยครั้งซึ่งความหมายไม่มีนัยสำคัญ
การกำหนดเวอร์ชันเชิงความหมาย เหมาะสำหรับแอปที่มี API สาธารณะซึ่งความเข้ากันได้ย้อนหลังมีความสำคัญ ผู้ใช้และผู้รวมระบบเข้าใจว่าต้องคาดหวังการเปลี่ยนแปลงใดบ้างเมื่ออัปเดต
การกำหนดเวอร์ชันตามปฏิทิน ถูกเลือกสำหรับแอปที่ความสดใหม่ของการเผยแพร่สำคัญกว่าขอบเขตของการเปลี่ยนแปลง ตัวอย่างเช่น ตัวรวบรวมข่าวหรือแอปสภาพอากาศ
รูปแบบไฮบริด รวมทั้งสองวิธีการ: Major.Minor.RC โดยที่ RC คือหมายเลขบิลด์สำหรับผู้สมัครเผยแพร่ที่เฉพาะเจาะจง รูปแบบนี้สะดวกในระหว่างการทดสอบเบต้าที่ใช้งานอยู่
ตัวอย่างโค้ด ด้านล่างแสดงวิธีการตั้งค่า Version Name บน Android และ iOS สำหรับ Android ใช้ Gradle สำหรับ iOS ใช้ Xcode Build Settings กับ agvtool
ใน Android เวอร์ชันถูกกำหนดในไฟล์ app/build.gradle ภายในบล็อก defaultConfig พารามิเตอร์ versionName รับค่าสตริง
android {
defaultConfig {
versionCode 3
versionName "2.1.0"
}
}
versionName สามารถอ่านได้จากไฟล์ภายนอกหรือสร้างแบบไดนามิกโดยใช้ Gradle Script
เวอร์ชันแบบไดนามิก ถูกสร้างจากตัวแปรสภาพแวดล้อมของระบบ CI/CD ซึ่งรับประกันว่าทุกบิลด์จะได้รับหมายเลขเวอร์ชันที่ถูกต้อง
def getVersionName = {
return System.getenv("VERSION_NAME") ?:
"2.1.0"
}
android {
defaultConfig {
versionName getVersionName()
}
}
วิธีการนี้ ทำให้การกำหนดเวอร์ชันเป็นอัตโนมัติและกำจัดความเสี่ยงของความไม่ตรงกันระหว่างบิลด์และแท็กในพื้นที่เก็บข้อมูล
ใน iOS เวอร์ชันสามารถตั้งค่าผ่าน Xcode หรือผ่านบรรทัดคำสั่งโดยใช้ agvtool
# การตั้งค่าเวอร์ชันการตลาด
xcrun agvtool new-marketing-version 2.1.0
# การอ่านเวอร์ชันปัจจุบัน
xcrun agvtool what-marketing-version
agvtool อัปเดต Info.plist โดยอัตโนมัติและซิงโครไนซ์เวอร์ชันทั่วทุกเป้าหมายในโครงการ Xcode
คำถามที่พบบ่อย
Version Name คือสตริงเวอร์ชันที่ผู้ใช้เห็นซึ่งแสดงในร้านค้าแอป Build Number คือตัวระบุบิลด์ตัวเลขภายในที่ระบุแต่ละบิลด์โดยไม่ซ้ำกันและร้านค้าใช้เพื่อกำหนดความใหม่ของเวอร์ชัน
บน Android versionName สามารถมีอักขระใดก็ได้รวมถึงตัวอักษรและยัติภังค์ บน iOS CFBundleShortVersionString ต้องประกอบด้วยตัวเลขที่คั่นด้วยจุด แม้ว่าส่วนต่อท้ายตัวอักษรจะได้รับอนุญาตสำหรับเวอร์ชันก่อนเผยแพร่
ใช้ เครื่องมือ CI/CD — GitHub Actions, GitLab CI หรือ Jenkins สคริปต์บิลด์อ่านเวอร์ชันปัจจุบันจากไฟล์ เพิ่มองค์ประกอบที่ต้องการ และเขียนค่าใหม่ก่อนสร้างรุ่นเผยแพร่
ร้านค้า จะยอมรับบิลด์ใหม่ หาก Build Number เพิ่มขึ้น อย่างไรก็ตาม ผู้ใช้จะไม่เห็นการเปลี่ยนแปลงในเวอร์ชัน ซึ่งอาจทำให้เกิดความสับสน แนะนำให้เปลี่ยน Version Name ทุกครั้งที่เผยแพร่ฟังก์ชันใหม่
รูปแบบ Major.Minor.Patch เป็นตัวเลือกที่เหมาะสมที่สุดสำหรับโครงการส่วนใหญ่ เข้าใจได้สำหรับผู้ใช้และนักพัฒนา สอดคล้องกับมาตรฐาน SemVer และรองรับโดยร้านค้าแอปทั้งหมด
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม