อะไรคือความแตกต่างระหว่าง "หมายเลขเวอร์ชัน" ใน iTunes Connect, "เวอร์ชันบันเดิล", "สตริงเวอร์ชันบันเดิล" ใน Xcode


95

เอกสารของ Apple อาจมีความชัดเจนมากขึ้นเกี่ยวกับวิธีการส่งเวอร์ชันอัปเดต

ตามที่ถามในชื่อเรื่องความแตกต่างระหว่าง

  1. หมายเลขเวอร์ชันใน itunes เชื่อมต่อ (ซึ่งคุณต้องระบุเมื่อคุณส่งการอัปเดต)
  2. เวอร์ชันบันเดิลใน xcode
  3. สตริงเวอร์ชันมัดสั้น

เกี่ยวข้องกันในทางใด?


12
Apple และเงื่อนไข / สาขาที่สับสน ... : /
BoltClock

โปรดดูคำตอบก่อนหน้าของฉัน: stackoverflow.com/a/31921249/936957
Yunus Nedim Mehel

คำตอบ:


145

ใช่พวกเขาเกี่ยวข้องกัน ทั้งหมดนี้อ้างถึงเวอร์ชันของแอปพลิเคชันของคุณ

  • iTunes Connect
    นี่คือหมายเลขเวอร์ชันที่แสดงใน App Store ต้องเป็นหมายเลขเวอร์ชันที่แท้จริงเช่น1.2.3

  • เวอร์ชัน Bundle (CFBundleVersion)
    ไม่จำเป็นต้องเป็นหมายเลขเวอร์ชันที่แท้จริง นี้สามารถเป็นสิ่งที่ชอบหรือ12345 1.2.3 (Build 12345AB)ซึ่งจะแสดงในหน้าต่างเกี่ยวกับสำหรับแอป Mac OS X และมักจะเป็น "หมายเลขรุ่น" มากกว่า "หมายเลขเวอร์ชัน"

  • Bundle Version String (CFBundleShortVersionString) ค่านี้ใช้เป็นหมายเลขเวอร์ชัน "จริง" นี้จะต้องเป็นสายเดียวกันกับที่ใช้สำหรับรุ่นในiTunes Connect

อัปเดต:
ตามที่ @snlehton ระบุไว้CFBundleVersionจะต้องเป็นหมายเลขเวอร์ชันที่แท้จริงเช่น1.2.3เมื่อคุณต้องการอัปโหลดแอปพลิเคชันของคุณไปยัง App Store (iOS)


3
สำหรับการทดสอบคุณตั้งค่าสตริงเวอร์ชันบันเดิลเป็นหมายเลขเวอร์ชันสุดท้ายเช่น1.2.3จากนั้นเพิ่มเวอร์ชันบันเดิลสำหรับแต่ละบิลด์
Fabian Kreiser

19
นี่คือ CFBundleVersion ที่ไม่ถูกต้องจำเป็นต้องอยู่ใน xyz มิฉะนั้นการอัปโหลดบิลด์จะล้มเหลว! link
snlehton

2
ฉันเพิ่งส่งบิลด์ที่มี CFBundleVersion ด้วย "1.0.2 RC3" และมันเด้งพร้อมข้อความแสดงข้อผิดพลาด: "บันเดิลไม่ถูกต้อง CFBundleVersion ที่สำคัญในไฟล์ Info.plist ต้องเป็นรายการจำนวนเต็มที่ไม่เป็นลบที่คั่นด้วยจุด" ฉันคิดว่า nn.n.nxnnn เป็นรูปแบบที่ถูกต้องที่จะใช้ แต่ยังไม่ได้ลองใช้
snlehton

3
CFBundleVersion ของ 1235 ที่นี่ไม่มีปัญหา
Piotr Tomasik

4
ความสับสนที่นี่เป็นเพราะ CFBundleShortVersionString เป็นทางเลือกและเมื่อตั้งค่าแล้วจะเปลี่ยนสิ่งที่ใช้ CFBundleVersion หากรวมเฉพาะ CFBundleVersion จะต้องเป็นหมายเลขเวอร์ชันสาธารณะเช่น 1.0 อย่างไรก็ตามหากทั้ง CFBundleVersion และ CFBundleShortVersionString ถูกตั้งค่า CFBundleShortVersionString จะต้องเป็นหมายเลขเวอร์ชันสาธารณะเช่น 1.0 และตอนนี้ CFBundleVersion เปลี่ยนเป็นหมายเลขบิลด์ซึ่งโดยปกติจะเป็นจำนวนเต็มเดียวเช่น 374629 หวังว่านี่จะเป็นการล้างข้อมูล
malhal

29

ใช่มันเกี่ยวข้องกัน แต่คำจำกัดความขึ้นอยู่กับวิธีการใช้

  • เวอร์ชัน iTunes Connect

    ต้องเป็นหมายเลขเวอร์ชันเสมอเช่น 1.0

โหมดการใช้งาน 1 - ตั้งค่าเฉพาะ CFBundleVersion

  • เวอร์ชัน Bundle (CFBundleVersion)

    ต้องเป็นหมายเลขเวอร์ชันเช่น 1.0 ต้องตรงกับเวอร์ชัน iTunes Connect

โหมดการใช้งาน 2 - ตั้งค่าทั้ง CFBundleVersion และ CFBundleShortVersionString

  • เวอร์ชัน Bundle (CFBundleVersion)

    ต้องเป็นหมายเลขบิลด์เช่นจำนวนเต็มเดียวเช่น 435163

  • Bundle Short Version String (CFBundleShortVersionString)

    ต้องเป็นหมายเลขเวอร์ชันเช่น 1.0 ต้องตรงกับเวอร์ชัน iTunes Connect

โหมดการใช้งาน 2 เป็นวิธีที่ดีที่สุด ตัวอย่างตัวเลขสำหรับเส้นทางการอัปเกรดของแอปมีดังนี้

CFBundleShortVersionString CFBundleVersion 
1.0                        1
1.0.1                      2
1.0.2                      3
1.2                        5  (build 4 was a beta and never released publicly)
1.2.1                      6

หมายเหตุเพิ่มเติมเกี่ยวกับหมายเลขเวอร์ชัน: หากคุณส่งการอัปเดตเล็กน้อย (เช่นการแก้ไขข้อบกพร่อง) ไปยังแอปของคุณคุณจะต้องไม่พลาดช่วงเวลาในหมายเลขเวอร์ชันเช่นใช้ 1.0.1 และไม่เคย 1.01 เสมอมิฉะนั้นคุณจะเสี่ยงที่จะไม่สามารถใช้งานได้ หมายเลขเวอร์ชันที่แน่นอนในอนาคตเนื่องจากจะไม่สามารถเพิ่มได้


2
ตารางนั้นทำหน้าที่ได้ดีที่สุดในการอธิบายว่าตัวเลขทั้งสองนี้มีความสัมพันธ์และใช้ในทางปฏิบัติอย่างไร ขอบคุณ.
Joshua Pinter

ต้องตรงกับเวอร์ชัน iTunes Connect นี่ไม่ใช่ข้อกำหนดที่ยาก (แม้ว่าจะต้องเป็นสิ่งที่ต้องทำก็ตาม)
Marco Pappalardo

13

ใช่พวกเขาทั้งหมดเกี่ยวข้องกัน

Version Numberใน itunesconnect คือหมายเลขเวอร์ชันที่คุณต้องระบุ ยกตัวอย่างเช่น 2.1.1 หรือ 3.1.2 เป็นต้นและนี่ก็ควรจะเท่ากับCFBundleShortVersionString

เวอร์ชัน Bundle ใน Xcode ( CFBundleVersion ) แสดงเฉพาะหมายเลขบิลด์ที่ระบุการทำซ้ำ (เปิดตัวหรือยังไม่ได้เผยแพร่) ของแอปพลิเคชัน

สตริงเวอร์ชันบันเดิลแบบสั้น ( CFBundleShortVersionString ) คือตัวเลขที่ประกอบด้วยจำนวนเต็มสามจำนวนที่คั่นด้วยจุด อันดับแรกหมายถึงการอัปเดตที่สำคัญของแอปพลิเคชันเช่นการอัปเดตที่ใช้คุณลักษณะใหม่หรือการเปลี่ยนแปลงที่สำคัญ จำนวนเต็มที่สองหมายถึงการแก้ไขที่ใช้คุณลักษณะที่โดดเด่นน้อยกว่า จำนวนเต็มที่สามแสดงถึงรุ่นการบำรุงรักษา


3
จริงๆแล้ว "Bundle version string, short" ไม่จำเป็นต้องเป็นตัวเลขสามตัวที่คั่นด้วยจุด ฉันคิดว่า "1" และ "1.1" ก็ใช้ได้เช่นกัน
Nicolas Miari

จริงๆแล้วจากหมายเลขเวอร์ชันการทดสอบของฉันใน itunesconnect นั้นเป็นอิสระจาก CFBundleVersion และ ShortVersion ดังนั้นคุณสามารถทำให้พวกเขาแตกต่างกันได้
Marco Pappalardo

11

โปรดใช้ความระมัดระวังเกี่ยวกับCFBundleVersion ไม่ใช่แค่หมายเลขการผลิตเท่านั้น ค่านี้จะถูกตรวจสอบโดย Apple ระหว่างกระบวนการอัปโหลดไบนารีและอาจล้มเหลวได้

ตรวจสอบให้แน่ใจว่าคุณตั้งค่าCFBundleVersionด้วยค่าCFBundleShortVersionStringเมื่อคุณสร้างรุ่นเพื่อส่ง

ดูโพสต์เกี่ยวกับเรื่องนี้


3
นี่เป็นข้อมูลที่ถูกต้องคำตอบที่ยอมรับมีความผิดจริง
snlehton

9
นี้ไม่ถูกต้องไม่จำเป็นต้องตรงกับCFBundleVersion CFBundleShortVersionStringตัวอย่างเช่นถ้าคุณดูที่ไฟล์ .ipa ปัจจุบันสำหรับ Chrome (ใน App Store ตอนนี้) พวกเขามี "34.0.1847.18" สำหรับCFBundleVersionและ "34.1847.18" CFBundleShortVersionStringสำหรับ
progrmr

6
ไม่มีเอกสารที่ระบุว่า CFBundleVersion และ CFBundleShortVersionString ควรจะเหมือนกัน
Toydor

8

คำตอบที่ยอมรับคือหนทางที่จะไป - เพียงแค่เพิ่มสิ่งนี้เป็นตัวอย่าง

สำหรับรุ่นล่าสุดของเราจำเป็นต้องใช้ "Bundle Version String, short" และฉันจะจับคู่กับหมายเลขเวอร์ชัน Bundle (1.2.8 สำหรับแอปของเรา)

จากนั้นฉันก็เปิดใช้งาน Testflight และทำให้เวอร์ชันที่รอการตรวจสอบของ Apple (1.2.8) พร้อมใช้งานสำหรับผู้ทดสอบภายในของเรา อย่างไรก็ตามผู้ทดสอบพบปัญหาที่จำเป็นต้องแก้ไขและเราลบไบนารีออก เมื่ออัปโหลดบิวด์ใหม่เราพบข้อผิดพลาดที่ระบุว่าเวอร์ชันบิวด์อัปโหลดแล้ว

หลังจากอ่านลิงก์ SO และเอกสาร Apple สองสามรายการความเข้าใจของฉันคือการสร้างเวอร์ชันบันเดิล: 1.2.8.001 ในขณะที่การบำรุงรักษาบันเดิลเวอร์ชันสั้นอย่างที่เป็นอยู่ หากต้องการบิลด์ใหม่เราจะเพิ่มบันเดิลเวอร์ชันเป็น 1.2.8.002

หมายเหตุ: การอัปโหลดได้รับการยอมรับและบิวด์จะแสดงเป็น "1.2.8.001" ในช่วงก่อนวางจำหน่าย หมายเลขเวอร์ชันยังคงเป็น 1.2.8


3

คำตอบที่ยอมรับของลิงค์นี้มีรายละเอียดที่ดี :: เวอร์ชัน / หมายเลขบิลด์ของแอป iOS ใดที่ต้องเพิ่มขึ้นเมื่อเปิดตัว App Store

จาก apple docs

CFBundleVersion (เวอร์ชัน Bundle)

CFBundleVersion (String - iOS, OS X) ระบุหมายเลขเวอร์ชันบิวด์ของบันเดิลซึ่งระบุการทำซ้ำ (เปิดตัวหรือยังไม่ได้เผยแพร่) ของบันเดิล หมายเลขเวอร์ชันบิวด์ควรเป็นสตริงที่ประกอบด้วยจำนวนเต็มที่ไม่เป็นลบสามจำนวนที่คั่นด้วยจุดโดยที่จำนวนเต็มแรกมีค่ามากกว่าศูนย์ สตริงควรมีเฉพาะอักขระตัวเลข (0-9) และจุด (.) เลขศูนย์นำหน้าจะถูกตัดทอนจากจำนวนเต็มแต่ละตัวและจะถูกละเว้น (นั่นคือ 1.02.3 เทียบเท่ากับ 1.2.3) คีย์นี้ไม่สามารถแปลเป็นภาษาท้องถิ่นได้

CFBundleShortVersionString (สตริงเวอร์ชัน Bundle สั้น)

CFBundleShortVersionString (String - iOS, OS X) ระบุหมายเลขเวอร์ชันรีลีสของบันเดิลซึ่งระบุการทำซ้ำของแอพที่เผยแพร่ หมายเลขเวอร์ชันเผยแพร่คือสตริงที่ประกอบด้วยจำนวนเต็มที่คั่นด้วยจุดสามจุด จำนวนเต็มแรกแสดงถึงการแก้ไขที่สำคัญของแอปเช่นการแก้ไขที่ใช้คุณลักษณะใหม่หรือการเปลี่ยนแปลงที่สำคัญ จำนวนเต็มที่สองหมายถึงการแก้ไขที่ใช้คุณลักษณะที่โดดเด่นน้อยกว่า จำนวนเต็มที่สามแสดงถึงรีลีสการบำรุงรักษา

ค่าสำหรับคีย์นี้แตกต่างจากค่าสำหรับ CFBundleVersion ซึ่งระบุการทำซ้ำ (เปิดตัวหรือยังไม่ได้เผยแพร่) ของแอป คีย์นี้สามารถแปลเป็นภาษาท้องถิ่นได้โดยรวมไว้ในไฟล์ InfoPlist.strings ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.