แอปเปิ้ลจัดเรียงใหม่ / repurposed ฟิลด์
หากคุณมองไปที่แท็บข้อมูลสำหรับเป้าหมายแอปพลิเคชันของคุณคุณควรใช้สตริง "Bundle version, short" เป็นเวอร์ชันของคุณ (เช่น 3.4.0) และ "Bundle version" เป็น Build ของคุณ (เช่น 500 หรือ 1A500 ) หากคุณไม่เห็นพวกเขาทั้งคู่คุณสามารถเพิ่มพวกเขาได้ สิ่งเหล่านี้จะจับคู่กับกล่องข้อความรุ่นและสร้างที่เหมาะสมบนแท็บสรุป พวกเขาเป็นค่าเดียวกัน
เมื่อดูแท็บข้อมูลหากคุณคลิกขวาและเลือกแสดงคีย์ / ค่าดิบคุณจะเห็นชื่อจริงคือCFBundleShortVersionString
(เวอร์ชั่น) และCFBundleVersion
(Build)
ปกติแล้วเวอร์ชันจะถูกใช้ในลักษณะที่คุณใช้กับ Xcode 3 ฉันไม่แน่ใจในระดับที่คุณถามเกี่ยวกับความแตกต่างของ Version / Build ดังนั้นฉันจะตอบคำถามตามหลักปรัชญา
มีแผนการทุกประเภท แต่ที่เป็นที่นิยมคือ:
{MajorVersion}. {MinorVersion}. {} ทบทวน
- รุ่นหลัก - การเปลี่ยนแปลงที่สำคัญการออกแบบใหม่และการเปลี่ยนแปลงการทำงาน
- รุ่นรอง - การปรับปรุงเล็กน้อยการเพิ่มฟังก์ชัน
- Revision - หมายเลขแพตช์สำหรับแก้ไขข้อบกพร่อง
จากนั้น Build จะใช้แยกต่างหากเพื่อระบุจำนวนการสร้างทั้งหมดสำหรับการเปิดตัวหรือตลอดอายุการใช้งานของผลิตภัณฑ์ทั้งหมด
นักพัฒนาหลายคนเริ่มสร้างหมายเลขที่ 0 และทุกครั้งที่สร้างพวกเขาจะเพิ่มจำนวนทีละหนึ่งเพิ่มขึ้นตลอดไป ในโครงการของฉันฉันมีสคริปต์ที่เพิ่มหมายเลขการสร้างโดยอัตโนมัติทุกครั้งที่ฉันสร้าง ดูคำแนะนำสำหรับด้านล่าง
- 1.0.0 ที่วางจำหน่ายอาจจะสร้าง 542 มันต้องใช้ 542 สร้างที่จะได้รับการปล่อย 1.0.0
- รุ่น 1.0.1 อาจจะสร้าง 578
- รุ่น 1.1.0 อาจจะสร้าง 694
- รุ่น 2.0.0 อาจเป็นรุ่น 949
นักพัฒนาอื่น ๆ รวมถึง Apple มีหมายเลข Build ซึ่งประกอบด้วยรุ่นหลัก + รุ่นรอง + จำนวนรุ่นสำหรับรุ่น เหล่านี้เป็นหมายเลขรุ่นซอฟต์แวร์จริงซึ่งตรงข้ามกับค่าที่ใช้สำหรับการตลาด
หากคุณไปที่เมนูXcode > เกี่ยวกับ Xcodeคุณจะเห็นหมายเลขเวอร์ชันและ Build หากคุณกดปุ่มข้อมูลเพิ่มเติม ...คุณจะเห็นเวอร์ชั่นต่าง ๆ มากมาย เนื่องจากข้อมูลเพิ่มเติม ...ปุ่มถูกลบออกใน Xcode 5 ข้อมูลนี้ยังสามารถใช้ได้จากซอฟท์แว> นักพัฒนาส่วนหนึ่งของระบบสารสนเทศแอปที่มีอยู่โดยการเปิดแอปเปิ้ลเมนู> เกี่ยวกับ Mac นี้ > รายงานระบบ ...
ตัวอย่างเช่น Xcode 4.2 (4C139) เวอร์ชันการตลาด 4.2 คือบิวด์เวอร์ชันหลัก 4, บิวด์เวอร์ชันรอง C, และบิวด์หมายเลข 139 รุ่นถัดไป (สันนิษฐาน 4.3) น่าจะเป็นรุ่นบิลด์ 4D และหมายเลขบิลด์จะเริ่มใหม่ที่ 0 และเพิ่มขึ้นจากที่นั่น
หมายเลขเวอร์ชั่น / Build ของ iPhone Simulator เป็นวิธีเดียวกันกับ iPhone, Macs และอื่น ๆ
- 3.2: (7W367a)
- 4.0: (8A400)
- 4.1: (8B117)
- 4.2: (8C134)
- 4.3: (8H7)
อัปเดต : ตามคำขอนี่คือขั้นตอนในการสร้างสคริปต์ที่ทำงานทุกครั้งที่คุณสร้างแอปของคุณใน Xcode เพื่ออ่านหมายเลข Build เพิ่มขึ้นและเขียนกลับไปยัง{App}-Info.plist
ไฟล์ของแอป มีขั้นตอนเพิ่มเติมที่เป็นตัวเลือกหากคุณต้องการเขียนหมายเลขรุ่น / บิลด์ลงในSettings.bundle/Root*.plist
ไฟล์ของคุณ
นี้จะยื่นออกมาจากวิธีการบทความที่นี่
ใน Xcode 4.2 - 5.0:
- โหลดโครงการ Xcode ของคุณ
- ในบานหน้าต่างด้านซ้ายคลิกที่โครงการของคุณที่ด้านบนสุดของลำดับชั้น สิ่งนี้จะโหลดเครื่องมือแก้ไขการตั้งค่าโครงการ
- ทางด้านซ้ายมือของบานหน้าต่างหน้าต่างศูนย์คลิกบนแอปของคุณภายใต้เป้าหมายหัวข้อ คุณจะต้องกำหนดค่าการตั้งค่านี้สำหรับเป้าหมายแต่ละโครงการ
- เลือกแท็บBuild Phases
- ใน Xcode 4 ที่ด้านล่างขวาคลิกเพิ่มรูปร่างเฟสและเลือกเพิ่มเรียกใช้สคริปต์
- ใน Xcode 5 เลือกเมนูตัวแก้ไข > เพิ่มเฟสบิลด์ > เพิ่มเฟสรันสคริปต์บิลด์
- ลากแล้วปล่อยขั้นตอนการเรียกใช้สคริปต์ใหม่เพื่อย้ายไปข้างหน้าขั้นตอนการคัดลอกทรัพยากรบันเดิล (เมื่อไฟล์ app-info.plist จะถูกรวมกับแอปของคุณ)
- ในใหม่เรียกใช้สคริปต์ขั้นตอนการตั้งค่าเชลล์
/bin/bash
:
คัดลอกและวางข้อมูลต่อไปนี้ลงในพื้นที่สคริปต์สำหรับหมายเลขบิลด์ที่เป็นจำนวนเต็ม:
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
@Bdebeez ชี้ให้เห็นว่าApple Generic Versioning Tool ( agvtool
) ก็มีให้เช่นกัน หากคุณต้องการใช้งานแทนมีหลายสิ่งที่จะต้องเปลี่ยนก่อน:
- เลือกแท็บBuild Settings
- ภายใต้รุ่นส่วนกำหนดโครงการรุ่นปัจจุบันเป็นรุ่นจำนวนเริ่มต้นที่คุณต้องการใช้งานเช่น1
- กลับไปที่แท็บBuild Phasesแล้วลากและวางสคริปต์ RunของคุณหลังจากเฟสCopy Bundle Resourcesเพื่อหลีกเลี่ยงสภาวะการแย่งชิงเมื่อพยายามสร้างและอัปเดตไฟล์ต้นฉบับที่มีหมายเลขบิลด์ของคุณ
โปรดทราบว่าด้วยagvtool
วิธีการที่คุณอาจยังคงได้รับงานสร้างล้มเหลว / ยกเลิกเป็นระยะโดยไม่มีข้อผิดพลาด ด้วยเหตุนี้ฉันไม่แนะนำให้ใช้agvtool
กับสคริปต์นี้
อย่างไรก็ตามในช่วงRun Script ของคุณคุณสามารถใช้สคริปต์ต่อไปนี้:
"${DEVELOPER_BIN_DIR}/agvtool" next-version -all
next-version
เพิ่มขึ้นโต้แย้งสร้างจำนวน ( bump
ยังเป็นนามแฝงสำหรับสิ่งเดียวกัน) และ-all
การปรับปรุงInfo.plist
ที่มีหมายเลขการสร้างใหม่
และหากคุณมีบันเดิลการตั้งค่าที่คุณแสดงเวอร์ชันและบิลด์คุณสามารถเพิ่มสิ่งต่อไปนี้ในตอนท้ายของสคริปต์เพื่ออัปเดตเวอร์ชันและบิลด์ หมายเหตุ: เปลี่ยนPreferenceSpecifiers
ค่าเพื่อให้ตรงกับการตั้งค่าของคุณ PreferenceSpecifiers:2
หมายถึงดูรายการที่ดัชนี 2 ภายใต้PreferenceSpecifiers
อาร์เรย์ในไฟล์ plist ของคุณดังนั้นสำหรับดัชนีที่ใช้ 0 นั่นคือการตั้งค่าอันดับที่ 3 ในอาร์เรย์
productVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
หากคุณใช้agvtool
แทนการอ่านInfo.plist
โดยตรงคุณสามารถเพิ่มสิ่งต่อไปนี้ในสคริปต์ของคุณแทน:
buildNumber=$("${DEVELOPER_BIN_DIR}/agvtool" what-version -terse)
productVersion=$("${DEVELOPER_BIN_DIR}/agvtool" what-marketing-version -terse1)
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
และหากคุณมีแอพสากลสำหรับ iPad และ iPhone คุณสามารถตั้งค่าสำหรับไฟล์ iPhone:
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root~iphone.plist
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root~iphone.plist